- IHlink_SetStringReference(hl, HLINKSETF_TARGET | HLINKSETF_LOCATION,
- pwzTarget, pwzLocation);
+ if (pwzTarget)
+ {
+ hash = strchrW(pwzTarget, '#');
+ if (hash)
+ {
+ if (hash == pwzTarget)
+ tgt = NULL;
+ else
+ {
+ int tgt_len = hash - pwzTarget;
+ tgt = heap_alloc((tgt_len + 1) * sizeof(WCHAR));
+ if (!tgt)
+ return E_OUTOFMEMORY;
+ memcpy(tgt, pwzTarget, tgt_len * sizeof(WCHAR));
+ tgt[tgt_len] = 0;
+ }
+ if (!pwzLocation)
+ loc = hash + 1;
+ else
+ loc = pwzLocation;
+ }
+ else
+ {
+ tgt = hlink_strdupW(pwzTarget);
+ if (!tgt)
+ return E_OUTOFMEMORY;
+ loc = pwzLocation;
+ }
+ }
+ else
+ {
+ tgt = NULL;
+ loc = pwzLocation;
+ }
+
+ IHlink_SetStringReference(hl, HLINKSETF_TARGET | HLINKSETF_LOCATION, tgt, loc);
+
+ heap_free(tgt);