static HRESULT WINAPI HTMLLocation_get_hash(IHTMLLocation *iface, BSTR *p) { HTMLLocation *This = impl_from_IHTMLLocation(iface); URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)}; const WCHAR hash[] = {'#',0}; DWORD hash_pos = 0; HRESULT hres; TRACE("(%p)->(%p)\n", This, p); if(!p) return E_POINTER; url.dwExtraInfoLength = 1; hres = get_url_components(This, &url); if(FAILED(hres)) return hres; if(!url.dwExtraInfoLength){ *p = NULL; return S_OK; } hash_pos = strcspnW(url.lpszExtraInfo, hash); url.dwExtraInfoLength -= hash_pos; *p = SysAllocStringLen(url.lpszExtraInfo + hash_pos, url.dwExtraInfoLength); if(!*p) return E_OUTOFMEMORY; return S_OK; }
/*************************************************************************** * add_load_order_set * * Adds a set of entries in the list of command-line overrides from the key parameter. */ static void add_load_order_set( WCHAR *entry ) { module_loadorder_t ldo; WCHAR *end = strchrW( entry, '=' ); if (!end) return; *end++ = 0; ldo.loadorder = parse_load_order( end ); while (*entry) { entry += strspnW( entry, separatorsW ); end = entry + strcspnW( entry, separatorsW ); if (*end) *end++ = 0; if (*entry) { WCHAR *ext = strrchrW(entry, '.'); if (ext) remove_dll_ext( ext ); ldo.modulename = entry; add_load_order( &ldo ); entry = end; } } }
/*************************************************************************** * parse_load_order * * Parses the loadorder options from the configuration and puts it into * a structure. */ static enum loadorder parse_load_order( const WCHAR *order ) { enum loadorder ret = LO_DISABLED; while (*order) { order += strspnW( order, separatorsW ); switch(*order) { case 'N': /* native */ case 'n': if (ret == LO_DISABLED) ret = LO_NATIVE; else if (ret == LO_BUILTIN) return LO_BUILTIN_NATIVE; break; case 'B': /* builtin */ case 'b': if (ret == LO_DISABLED) ret = LO_BUILTIN; else if (ret == LO_NATIVE) return LO_NATIVE_BUILTIN; break; } order += strcspnW( order, separatorsW ); } return ret; }
/************************************************************************* * StrCSpnW [COMCTL32.364] * * See StrCSpnA. */ int WINAPI StrCSpnW(LPCWSTR lpszStr, LPCWSTR lpszMatch) { if (!lpszStr || !lpszMatch) return 0; return strcspnW( lpszStr, lpszMatch ); }
/********************************************************************* * wcscspn (NTDLL.@) */ INT __cdecl NTDLL_wcscspn( LPCWSTR str, LPCWSTR reject ) { return strcspnW( str, reject ); }