]> git.sur5r.net Git - openldap/blobdiff - libraries/librewrite/parse.c
Merge branch 'mdb.master' of ssh://git-master.openldap.org/~git/git/openldap
[openldap] / libraries / librewrite / parse.c
index 7b65d1897f7866666b3817547257d67b4b426e8e..e2b6b87546b7e9ace9eb990a7e9e4dcac2020801 100644 (file)
@@ -1,29 +1,26 @@
-/******************************************************************************
+/* $OpenLDAP$ */
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
+ * Copyright 2000-2011 The OpenLDAP Foundation.
  * All rights reserved.
  *
- * Permission is granted to anyone to use this software for any purpose
- * on any computer system, and to alter it and redistribute it, subject
- * to the following restrictions:
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
  *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission.  Since few users ever read sources,
- * credits should appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.  Since few users
- * ever read sources, credits should appear in the documentation.
- * 
- * 4. This notice may not be removed or altered.
- *
- ******************************************************************************/
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
+ */
+/* ACKNOWLEDGEMENT:
+ * This work was initially developed by Pierangelo Masarati for
+ * inclusion in OpenLDAP Software.
+ */
 
 #include <portable.h>
 
+#include <stdio.h>
+
 #include "rewrite-int.h"
 
 static int
@@ -38,14 +35,14 @@ parse_line(
        int in_quoted_field = 0, cnt = 0;
        char quote = '\0';
        
-       for ( p = buf; isspace( p[ 0 ] ); p++ );
+       for ( p = buf; isspace( (unsigned char) p[ 0 ] ); p++ );
        
        if ( p[ 0 ] == '#' ) {
                return 0;
        }
        
        for ( begin = p;  p[ 0 ] != '\0'; p++ ) {
-               if ( p[ 0 ] == '\\' ) {
+               if ( p[ 0 ] == '\\' && p[ 1 ] != '\0' ) {
                        p++;
                } else if ( p[ 0 ] == '\'' || p[ 0 ] == '\"') {
                        if ( in_quoted_field && p[ 0 ] == quote ) {
@@ -57,7 +54,7 @@ parse_line(
                                        *argc = cnt;
                                        return 1;
                                }
-                               for ( p++; isspace( p[ 0 ] ); p++ );
+                               for ( p++; isspace( (unsigned char) p[ 0 ] ); p++ );
                                begin = p;
                                p--;
                                
@@ -69,7 +66,7 @@ parse_line(
                                in_quoted_field = 1 - in_quoted_field;
                                quote = p[ 0 ];
                        }
-               } else if ( isspace( p[ 0 ] ) && !in_quoted_field ) {
+               } else if ( isspace( (unsigned char) p[ 0 ] ) && !in_quoted_field ) {
                        p[ 0 ] = '\0';
                        argv[ cnt ] = begin;
 
@@ -78,7 +75,7 @@ parse_line(
                                return 1;
                        }
 
-                       for ( p++; isspace( p[ 0 ] ); p++ );
+                       for ( p++; isspace( (unsigned char) p[ 0 ] ); p++ );
                        begin = p;
                        p--;
                }