1*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 2*7c478bd9Sstevel@tonic-gate 3*7c478bd9Sstevel@tonic-gate /* 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the Netscape Public 5*7c478bd9Sstevel@tonic-gate * License Version 1.1 (the "License"); you may not use this file 6*7c478bd9Sstevel@tonic-gate * except in compliance with the License. You may obtain a copy of 7*7c478bd9Sstevel@tonic-gate * the License at http://www.mozilla.org/NPL/ 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * Software distributed under the License is distributed on an "AS 10*7c478bd9Sstevel@tonic-gate * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 11*7c478bd9Sstevel@tonic-gate * implied. See the License for the specific language governing 12*7c478bd9Sstevel@tonic-gate * rights and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * The Original Code is Mozilla Communicator client code, released 15*7c478bd9Sstevel@tonic-gate * March 31, 1998. 16*7c478bd9Sstevel@tonic-gate * 17*7c478bd9Sstevel@tonic-gate * The Initial Developer of the Original Code is Netscape 18*7c478bd9Sstevel@tonic-gate * Communications Corporation. Portions created by Netscape are 19*7c478bd9Sstevel@tonic-gate * Copyright (C) 1998-1999 Netscape Communications Corporation. All 20*7c478bd9Sstevel@tonic-gate * Rights Reserved. 21*7c478bd9Sstevel@tonic-gate * 22*7c478bd9Sstevel@tonic-gate * Contributor(s): 23*7c478bd9Sstevel@tonic-gate */ 24*7c478bd9Sstevel@tonic-gate 25*7c478bd9Sstevel@tonic-gate /* 26*7c478bd9Sstevel@tonic-gate * LIBLDAP unescape.c -- LDAP URL un-escape routines 27*7c478bd9Sstevel@tonic-gate * We also tolerate URLs that look like: <ldapurl> and <URL:ldapurl> 28*7c478bd9Sstevel@tonic-gate */ 29*7c478bd9Sstevel@tonic-gate 30*7c478bd9Sstevel@tonic-gate #include "ldap-int.h" 31*7c478bd9Sstevel@tonic-gate 32*7c478bd9Sstevel@tonic-gate 33*7c478bd9Sstevel@tonic-gate static int unhex( char c ); 34*7c478bd9Sstevel@tonic-gate 35*7c478bd9Sstevel@tonic-gate 36*7c478bd9Sstevel@tonic-gate void nsldapi_hex_unescape(char * s)37*7c478bd9Sstevel@tonic-gatensldapi_hex_unescape( char *s ) 38*7c478bd9Sstevel@tonic-gate { 39*7c478bd9Sstevel@tonic-gate /* 40*7c478bd9Sstevel@tonic-gate * Remove URL hex escapes from s... done in place. The basic concept for 41*7c478bd9Sstevel@tonic-gate * this routine is borrowed from the WWW library HTUnEscape() routine. 42*7c478bd9Sstevel@tonic-gate */ 43*7c478bd9Sstevel@tonic-gate char *p; 44*7c478bd9Sstevel@tonic-gate 45*7c478bd9Sstevel@tonic-gate for ( p = s; *s != '\0'; ++s ) { 46*7c478bd9Sstevel@tonic-gate if ( *s == '%' ) { 47*7c478bd9Sstevel@tonic-gate if ( *++s != '\0' ) { 48*7c478bd9Sstevel@tonic-gate *p = unhex( *s ) << 4; 49*7c478bd9Sstevel@tonic-gate } 50*7c478bd9Sstevel@tonic-gate if ( *++s != '\0' ) { 51*7c478bd9Sstevel@tonic-gate *p++ += unhex( *s ); 52*7c478bd9Sstevel@tonic-gate } 53*7c478bd9Sstevel@tonic-gate } else { 54*7c478bd9Sstevel@tonic-gate *p++ = *s; 55*7c478bd9Sstevel@tonic-gate } 56*7c478bd9Sstevel@tonic-gate } 57*7c478bd9Sstevel@tonic-gate 58*7c478bd9Sstevel@tonic-gate *p = '\0'; 59*7c478bd9Sstevel@tonic-gate } 60*7c478bd9Sstevel@tonic-gate 61*7c478bd9Sstevel@tonic-gate 62*7c478bd9Sstevel@tonic-gate static int unhex(char c)63*7c478bd9Sstevel@tonic-gateunhex( char c ) 64*7c478bd9Sstevel@tonic-gate { 65*7c478bd9Sstevel@tonic-gate return( c >= '0' && c <= '9' ? c - '0' 66*7c478bd9Sstevel@tonic-gate : c >= 'A' && c <= 'F' ? c - 'A' + 10 67*7c478bd9Sstevel@tonic-gate : c - 'a' + 10 ); 68*7c478bd9Sstevel@tonic-gate } 69