Changeset 6712 for trunk/src/shlwapi/url.c
- Timestamp:
- Sep 15, 2001, 11:47:44 AM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shlwapi/url.c
r6650 r6712 1 /* $Id: url.c,v 1.4 2001-09-05 13:48:39 bird Exp $ */2 1 /* 3 2 * Url functions … … 54 53 if(dwFlags & URL_ESCAPE_SPACES_ONLY) { 55 54 if(ch == ' ') 56 57 58 55 return TRUE; 56 else 57 return FALSE; 59 58 } 60 59 61 60 if (ch <= 31 || ch >= 127) 62 61 return TRUE; 63 62 64 63 else { 65 64 switch (ch) { 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 65 case ' ': 66 case '<': 67 case '>': 68 case '\"': 69 case '{': 70 case '}': 71 case '|': 72 case '\\': 73 case '^': 74 case ']': 75 case '[': 76 case '`': 77 case '&': 78 return TRUE; 79 80 default: 81 return FALSE; 82 } 84 83 } 85 84 } … … 89 88 */ 90 89 HRESULT WINAPI UrlCanonicalizeA(LPCSTR pszUrl, LPSTR pszCanonicalized, 91 90 LPDWORD pcchCanonicalized, DWORD dwFlags) 92 91 { 93 92 HRESULT hr = S_OK; … … 97 96 98 97 TRACE("(%s %p %p 0x%08lx)\n", debugstr_a(pszUrl), pszCanonicalized, 99 98 pcchCanonicalized, dwFlags); 100 99 101 100 nLen = strlen(pszUrl); … … 114 113 if(dwFlags & (URL_ESCAPE_UNSAFE | URL_ESCAPE_SPACES_ONLY)) { 115 114 DWORD EscapeFlags = dwFlags & (URL_ESCAPE_SPACES_ONLY 116 117 118 115 /* | URL_ESCAPE_PERCENT */); 116 hr = UrlEscapeA(lpszUrlCpy, pszCanonicalized, pcchCanonicalized, 117 EscapeFlags); 119 118 } else { /* No escapping needed, just copy the string */ 120 119 nLen = strlen(lpszUrlCpy); 121 122 123 124 125 126 127 120 if(nLen < *pcchCanonicalized) 121 memcpy(pszCanonicalized, lpszUrlCpy, nLen + 1); 122 else { 123 hr = E_POINTER; 124 nLen++; 125 } 126 *pcchCanonicalized = nLen; 128 127 } 129 128 130 129 HeapFree(GetProcessHeap(), 0, lpszUrlCpy); 131 130 132 131 return hr; 133 132 } … … 136 135 * UrlCanonicalizeW [SHLWAPI] 137 136 */ 138 HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, 139 137 HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, 138 LPDWORD pcchCanonicalized, DWORD dwFlags) 140 139 { 141 140 FIXME("(%s %p %p 0x%08lx): stub\n",debugstr_w(pszUrl), 142 141 pszCanonicalized, pcchCanonicalized, dwFlags); 143 142 return E_NOTIMPL; 144 143 } 145 144 146 145 /************************************************************************* 147 * UrlEscapeA 146 * UrlEscapeA [SHLWAPI] 148 147 * 149 148 * Converts unsafe characters into their escape sequences. … … 173 172 */ 174 173 HRESULT WINAPI UrlEscapeA( 175 176 177 178 174 LPCSTR pszUrl, 175 LPSTR pszEscaped, 176 LPDWORD pcchEscaped, 177 DWORD dwFlags) 179 178 { 180 179 LPCSTR src; … … 186 185 187 186 TRACE("(%s %p %p 0x%08lx)\n", debugstr_a(pszUrl), pszEscaped, 188 187 pcchEscaped, dwFlags); 189 188 190 189 if(dwFlags & ~URL_ESCAPE_SPACES_ONLY) … … 193 192 for(src = pszUrl; *src; src++) { 194 193 if(!(dwFlags & URL_ESCAPE_SPACES_ONLY) && 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 194 (*src == '#' || *src == '?')) 195 stop_escapping = TRUE; 196 197 if(URL_NeedEscape(*src, dwFlags) && stop_escapping == FALSE) { 198 next[0] = '%'; 199 next[1] = hex[(*src >> 4) & 0xf]; 200 next[2] = hex[*src & 0xf]; 201 len = 3; 202 } else { 203 next[0] = *src; 204 len = 1; 205 } 206 207 if(needed + len <= *pcchEscaped) { 208 memcpy(dst, next, len); 209 dst += len; 210 } 211 needed += len; 213 212 } 214 213 215 214 if(needed < *pcchEscaped) { 216 215 *dst = '\0'; 217 216 ret = S_OK; 218 217 } else { 219 218 needed++; /* add one for the '\0' */ 220 219 ret = E_POINTER; 221 220 } 222 221 *pcchEscaped = needed; 223 222 return ret; 224 } 225 226 /************************************************************************* 227 * UrlEscapeW 223 } 224 225 /************************************************************************* 226 * UrlEscapeW [SHLWAPI] 228 227 */ 229 228 HRESULT WINAPI UrlEscapeW( 230 231 232 233 229 LPCWSTR pszUrl, 230 LPWSTR pszEscaped, 231 LPDWORD pcchEscaped, 232 DWORD dwFlags) 234 233 { 235 234 FIXME("(%s %p %p 0x%08lx): stub\n",debugstr_w(pszUrl), 236 235 pszEscaped, pcchEscaped, dwFlags); 237 236 return E_NOTIMPL; 238 237 } … … 240 239 241 240 /************************************************************************* 242 * UrlUnescapeA 241 * UrlUnescapeA [SHLWAPI] 243 242 * 244 243 * Converts escape sequences back to ordinary characters. 245 * 244 * 246 245 * If URL_ESCAPE_INPLACE is set in dwFlags then pszUnescaped and 247 246 * pcchUnescaped are ignored and the converted string is returned in … … 257 256 */ 258 257 HRESULT WINAPI UrlUnescapeA( 259 260 261 262 258 LPCSTR pszUrl, 259 LPSTR pszUnescaped, 260 LPDWORD pcchUnescaped, 261 DWORD dwFlags) 263 262 { 264 263 char *dst, next; … … 269 268 270 269 TRACE("(%s, %p, %p, %08lx): stub\n", debugstr_a(pszUrl), pszUnescaped, 271 270 pcchUnescaped, dwFlags); 272 271 273 272 if(dwFlags & URL_UNESCAPE_INPLACE) … … 278 277 for(src = pszUrl, needed = 0; *src; src++, needed++) { 279 278 if(dwFlags & URL_DONT_UNESCAPE_EXTRA_INFO && 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 279 (*src == '#' || *src == '?')) { 280 stop_unescapping = TRUE; 281 next = *src; 282 } else if(*src == '%' && isxdigit(*(src + 1)) && isxdigit(*(src + 2)) 283 && stop_unescapping == FALSE) { 284 INT ih; 285 char buf[3]; 286 memcpy(buf, src + 1, 2); 287 buf[2] = '\0'; 288 ih = strtol(buf, NULL, 16); 289 next = (CHAR) ih; 290 src += 2; /* Advance to end of escape */ 291 } else 292 next = *src; 293 294 if(dwFlags & URL_UNESCAPE_INPLACE || needed < *pcchUnescaped) 295 *dst++ = next; 297 296 } 298 297 299 298 if(dwFlags & URL_UNESCAPE_INPLACE || needed < *pcchUnescaped) { 300 299 *dst = '\0'; 301 300 ret = S_OK; 302 301 } else { 303 302 needed++; /* add one for the '\0' */ 304 303 ret = E_POINTER; 305 304 } 306 305 if(!(dwFlags & URL_UNESCAPE_INPLACE)) … … 311 310 312 311 /************************************************************************* 313 * UrlUnescapeW 312 * UrlUnescapeW [SHLWAPI] 314 313 */ 315 314 HRESULT WINAPI UrlUnescapeW( 316 317 318 319 315 LPCWSTR pszUrl, 316 LPWSTR pszUnescaped, 317 LPDWORD pcchUnescaped, 318 DWORD dwFlags) 320 319 { 321 320 FIXME("(%s, %p, %p, %08lx): stub\n", debugstr_w(pszUrl), pszUnescaped, 322 321 pcchUnescaped, dwFlags); 323 322 return E_NOTIMPL; 324 323 } 325 324 326 325 /************************************************************************* 327 * HashData 326 * HashData [SHLWAPI] 328 327 * 329 328 * Hash an input block into a variable sized digest. … … 358 357 359 358 /************************************************************************* 360 * UrlHashA 359 * UrlHashA [SHLWAPI] 361 360 * 362 361 * Hash an ASCII URL. … … 372 371 373 372 /************************************************************************* 374 * UrlApplySchemeW 373 * UrlApplySchemeW [SHLWAPI.@] 375 374 */ 376 375 HRESULT WINAPI UrlApplySchemeW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut, DWORD dwFlags)
Note:
See TracChangeset
for help on using the changeset viewer.