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