-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathurldecode.c
30 lines (30 loc) · 987 Bytes
/
urldecode.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<ctype.h>
#define HEXDIGIT(c) ((c>='A')?(toupper(c)-'A'+10):(c-'0'))
void urldecode(char *src){
int c,lastc=0;
register unsigned short i=0;
char *dst=src;
while ((c=*src++)!='\0') {
if(c=='+') c=' ';
else if (c=='%') {
c=HEXDIGIT(*src);
src++;
c=16 * c + HEXDIGIT(*src);
src++;
i+=2;
}
if ((c!=0x0A) || (lastc!=0x0D)) {
if(c=='|'){
*dst++='\\';
*dst++='|';
}
else if((c==0x0A)||(c==0x0D)){
*dst++='\\';
*dst++='n';
}
else *dst++=c;
}
lastc=c;
}
*dst++='\0';
}