]> git.sesse.net Git - vlc/blob - src/interface/intf_urldecode.c
ec693ed01083078e192921b55092550f03343e8d
[vlc] / src / interface / intf_urldecode.c
1 /*  Copyright (C) 1999, 2000 VideoLAN 
2  *  Copyright (C) 1998-2000  Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
3  *
4  *  Code borrowed from xmms 1.2.4
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public Licensse as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19  */
20
21 #include "intf_urldecode.h"
22 #include <string.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25
26 /* URL-decode a file: URL path, return NULL if it's not what we expect */
27 void urldecode_path(char *encoded_path)
28 {
29     char *tmp = NULL, *cur = NULL, *ext = NULL;
30     int realchar;
31
32
33     if (!encoded_path || *encoded_path == '\0' )
34         return;
35     
36     cur = encoded_path ;
37     
38     tmp = calloc(strlen(encoded_path) + 1,  sizeof(char) );
39
40     
41     while ( ( ext = strchr(cur, '%') ) != NULL)
42     {
43         strncat(tmp, cur, (ext - cur) / sizeof(char));
44         ext++;
45
46         if (!sscanf(ext, "%2x", &realchar))
47         {
48             free(tmp);
49             return;
50         }
51
52         tmp[strlen(tmp)] = (char)realchar;
53         
54         cur = ext + 2;
55     }
56     strcat(tmp, cur);
57     strcpy(encoded_path,tmp);
58 }