Line data Source code
1 : /* Copyright (C) 2000-2012 by George Williams */
2 : /*
3 : * Redistribution and use in source and binary forms, with or without
4 : * modification, are permitted provided that the following conditions are met:
5 :
6 : * Redistributions of source code must retain the above copyright notice, this
7 : * list of conditions and the following disclaimer.
8 :
9 : * Redistributions in binary form must reproduce the above copyright notice,
10 : * this list of conditions and the following disclaimer in the documentation
11 : * and/or other materials provided with the distribution.
12 :
13 : * The name of the author may not be used to endorse or promote products
14 : * derived from this software without specific prior written permission.
15 :
16 : * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17 : * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19 : * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 : * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 : * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 : * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 : * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 : */
27 :
28 : #include "giofuncP.h"
29 : #include "ustring.h"
30 :
31 : struct transtab {
32 : unichar_t *old;
33 : unichar_t *new;
34 : /* struct transtab *next; /* pointer to next transtab */
35 : int olen; /* length to test against */
36 : int gf_mask; /* enum giofuncs */
37 : };
38 : static struct transtab *transtab=NULL;
39 :
40 0 : unichar_t *_GIO_translateURL(unichar_t *path, enum giofuncs gf) {
41 : struct transtab *test;
42 : unichar_t *res;
43 :
44 0 : if ( transtab==NULL )
45 : /* Need some sort of _GIO_addURL(), otherwise you never get past here */
46 0 : return( NULL );
47 :
48 0 : for ( test = transtab; test->old!=NULL; ++test ) {
49 0 : if ( (test->gf_mask&(1<<gf)) && u_strncmp(path,test->old,test->olen)==0 ) {
50 0 : if ( (res=malloc((u_strlen(path)-test->olen+u_strlen(test->new)+1)*sizeof(unichar_t)))==NULL )
51 0 : return( NULL );
52 0 : u_strcpy(res,test->new);
53 0 : u_strcat(res,path+test->olen);
54 0 : return( res );
55 : }
56 : }
57 0 : return( NULL );
58 : }
|