]> git.sur5r.net Git - openldap/blobdiff - libraries/libldif/line64.c
Cast `char' arguments to ctype.h functions to `unsigned char'.
[openldap] / libraries / libldif / line64.c
index 2761ec5e0b2b2c9d3d89b70184ef55d85766eed0..d0af5ae29be248acba19652d72af45bce917f215 100644 (file)
@@ -3,16 +3,19 @@
 #include "portable.h"
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <ctype.h>
 
 #include <ac/string.h>
 #include <ac/socket.h>
 #include <ac/time.h>
 
+int ldif_debug = 0;
+
 #include "ldap_log.h"
+#include "lber_pvt.h"
 #include "ldif.h"
 
-
 #define RIGHT2                 0x03
 #define RIGHT4                 0x0f
 #define CONTINUED_LINE_MARKER  '\001'
@@ -40,14 +43,14 @@ static unsigned char b642nib[0x80] = {
 };
 
 /*
- * str_parse_line - takes a line of the form "type:[:] value" and splits it
+ * ldif_parse_line - takes a line of the form "type:[:] value" and splits it
  * into components "type" and "value".  if a double colon separates type from
  * value, then value is encoded in base 64, and parse_line un-decodes it
  * (in place) before returning.
  */
 
 int
-str_parse_line(
+ldif_parse_line(
     char       *line,
     char       **type,
     char       **value,
@@ -59,7 +62,7 @@ str_parse_line(
        int     i, b64;
 
        /* skip any leading space */
-       while ( isspace( *line ) ) {
+       while ( isspace( (unsigned char) *line ) ) {
                line++;
        }
        *type = line;
@@ -67,12 +70,13 @@ str_parse_line(
        for ( s = line; *s && *s != ':'; s++ )
                ;       /* NULL */
        if ( *s == '\0' ) {
-               Debug( LDAP_DEBUG_PARSE, "parse_line missing ':'\n", 0, 0, 0 );
+               lber_pvt_log_printf( LDAP_DEBUG_PARSE, ldif_debug,
+                       "ldif_parse_line missing ':'\n");
                return( -1 );
        }
 
        /* trim any space between type and : */
-       for ( p = s - 1; p > line && isspace( *p ); p-- ) {
+       for ( p = s - 1; p > line && isspace( (unsigned char) *p ); p-- ) {
                *p = '\0';
        }
        *s++ = '\0';
@@ -88,13 +92,14 @@ str_parse_line(
        }
 
        /* skip space between : and value */
-       while ( isspace( *s ) ) {
+       while ( isspace( (unsigned char) *s ) ) {
                s++;
        }
 
        /* if no value is present, error out */
        if ( *s == '\0' ) {
-               Debug( LDAP_DEBUG_PARSE, "parse_line missing value\n", 0,0,0 );
+               lber_pvt_log_printf( LDAP_DEBUG_PARSE, ldif_debug,
+                       "ldif_parse_line missing value\n");
                return( -1 );
        }
 
@@ -110,12 +115,12 @@ str_parse_line(
                stop = strchr( s, '\0' );
                byte = s;
                for ( p = s, *vlen = 0; p < stop; p += 4, *vlen += 3 ) {
-                       for ( i = 0; i < 3; i++ ) {
+                       for ( i = 0; i < 4; i++ ) {
                                if ( p[i] != '=' && (p[i] & 0x80 ||
                                    b642nib[ p[i] & 0x7f ] > 0x3f) ) {
-                                       Debug( LDAP_DEBUG_ANY,
-                                   "invalid base 64 encoding char (%c) 0x%x\n",
-                                           p[i], p[i], 0 );
+                                       lber_pvt_log_printf( LDAP_DEBUG_ANY, ldif_debug,
+"ldif_parse_line: invalid base 64 encoding char (%c) 0x%x\n",
+                                           p[i], p[i] );
                                        return( -1 );
                                }
                        }
@@ -154,7 +159,7 @@ str_parse_line(
 }
 
 /*
- * str_getline - return the next "line" (minus newline) of input from a
+ * ldif_getline - return the next "line" (minus newline) of input from a
  * string buffer of lines separated by newlines, terminated by \n\n
  * or \0.  this routine handles continued lines, bundling them into
  * a single big line before returning.  if a line begins with a white
@@ -168,10 +173,9 @@ str_parse_line(
  */
 
 char *
-str_getline( char **next )
+ldif_getline( char **next )
 {
-       char    *l;
-       char    c;
+       char            *l;
 
        if ( *next == NULL || **next == '\n' || **next == '\0' ) {
                return( NULL );
@@ -179,7 +183,7 @@ str_getline( char **next )
 
        l = *next;
        while ( (*next = strchr( *next, '\n' )) != NULL ) {
-               c = *(*next + 1);
+               unsigned char c = *(*next + 1);
                if ( isspace( c ) && c != '\n' ) {
                        **next = CONTINUED_LINE_MARKER;
                        *(*next+1) = CONTINUED_LINE_MARKER;
@@ -194,7 +198,7 @@ str_getline( char **next )
 }
 
 void
-put_type_and_value( char **out, char *t, char *val, int vlen )
+ldif_put_type_and_value( char **out, char *t, char *val, int vlen )
 {
        unsigned char   *byte, *p, *stop;
        unsigned char   buf[3];
@@ -299,12 +303,16 @@ ldif_type_and_value( char *type, char *val, int vlen )
     int                tlen;
 
     tlen = strlen( type );
-    if (( buf = (char *)malloc( LDIF_SIZE_NEEDED( tlen, vlen ) + 1 )) !=
-           NULL ) {
+    if (( buf = (char *) malloc( LDIF_SIZE_NEEDED( tlen, vlen ) + 1 ))
+               == NULL )
+       {
+               lber_pvt_log_printf( LDAP_DEBUG_ANY, ldif_debug,
+                       "ldif_type_and_value: malloc failed!" );
+               return NULL;
     }
 
     p = buf;
-    put_type_and_value( &p, type, val, vlen );
+    ldif_put_type_and_value( &p, type, val, vlen );
     *p = '\0';
 
     return( buf );