shlwapi 405/406

Robert Shearman R.J.Shearman at warwick.ac.uk
Tue Sep 23 13:38:41 CDT 2003


Hi,

Just a few comments on an otherwise good patch:

> -static BOOL URL_JustLocation(LPCWSTR str)
> +static BOOL WINAPI URL_JustLocation(LPCWSTR str)
...
> -static LPCWSTR  URL_ScanID(LPCWSTR start, LPDWORD size,
> WINE_URL_SCAN_TYPE type)
> +static LPCWSTR WINAPI URL_ScanID(LPCWSTR start, LPDWORD size,
> WINE_URL_SCAN_TYPE type)

Is there any reason for changing the calling convention of these two
functions?

> +/****************************************************************
> *********
> + *  MLBuildResURLA	[SHLWAPI.406]
> + *
> + * See MLBuildResURLA.
> + */
> +HRESULT WINAPI MLBuildResURLW(LPCWSTR lpszLibName, HMODULE hMod,
> DWORD dwFlags,
> +                              LPCWSTR lpszRes, LPWSTR lpszDest,
> DWORD dwDestLen)
> +{
> +  static const WCHAR szRes[] = { 'r','e','s',':','/','/','\0' };
> +#define szResLen (sizeof(szRes)/sizeof(WCHAR) - sizeof(WCHAR))

Should this not be #define szResLen (sizeof(szRes)/sizeof(WCHAR) - 1) ?

> +  HRESULT hRet = E_FAIL;
> +
> +  TRACE("(%s,%p,0x%08lx,%s,%p,%ld)\n", debugstr_w(lpszLibName),
> hMod, dwFlags,
> +        debugstr_w(lpszRes), lpszDest, dwDestLen);
> +
> +  if (!lpszLibName || !hMod || hMod == INVALID_HANDLE_VALUE ||
> !lpszRes ||
> +      !lpszDest || (dwFlags && dwFlags != 2))
> +    return E_INVALIDARG;
> +
> +  if (dwDestLen >= szResLen + 1)
> +  {
> +    dwDestLen -= (szResLen + 1);
> +    memcpy(lpszDest, szRes, sizeof(lpszDest));
> +
> +    hMod = MLLoadLibraryW(lpszLibName, hMod, dwFlags);
> +
> +    if (hMod)
> +    {
> +      WCHAR szBuff[MAX_PATH];
> +
> +      if (GetModuleFileNameW(hMod, szBuff, sizeof(szBuff)/sizeof(WCHAR)))
> +      {
> +        DWORD dwPathLen = strlenW(szBuff) + 1;
> +
> +        if (dwDestLen >= dwPathLen)
> +        {
> +          DWORD dwResLen;
> +
> +          dwDestLen -= dwPathLen;
> +          memcpy(lpszDest + szResLen, szBuff, dwPathLen * sizeof(WCHAR));
> +
> +          dwResLen = strlenW(lpszRes) + 1;
> +          if (dwDestLen >= dwResLen + 1)
> +          {
> +            lpszDest[szResLen + dwPathLen + dwResLen] = '/';
> +            memcpy(lpszDest + szResLen + dwPathLen, lpszRes,
> dwResLen * sizeof(WCHAR));
> +            hRet = S_OK;
> +          }
> +        }
> +      }
> +      MLFreeLibrary(hMod);
> +    }
> +  }
> +  return hRet;
> +}

Rob





More information about the wine-devel mailing list