Fix based on code from monyo@home.monyo.com to fix multibyte continuation
authorJeremy Allison <jra@samba.org>
Tue, 21 Dec 1999 02:15:53 +0000 (02:15 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 21 Dec 1999 02:15:53 +0000 (02:15 +0000)
issues.
Jeremy.

source/param/params.c

index 74dd3d7a254830afb58035cac9d8972be48052c4..944bc3d1b43ead9023af7a59d88b24e1fb45314b 100644 (file)
@@ -157,28 +157,42 @@ static int EatComment( FILE *InFile )
   return( c );
   } /* EatComment */
 
+/*****************************************************************************
+ * Scan backards within a string to discover if the last non-whitespace
+ * character is a line-continuation character ('\\').
+ *
+ *  Input:  line  - A pointer to a buffer containing the string to be
+ *                  scanned.
+ *          pos   - This is taken to be the offset of the end of the
+ *                  string.  This position is *not* scanned.
+ *
+ *  Output: The offset of the '\\' character if it was found, or -1 to
+ *          indicate that it was not.
+ *
+ *****************************************************************************/
+
 static int Continuation( char *line, int pos )
-  /* ------------------------------------------------------------------------ **
-   * Scan backards within a string to discover if the last non-whitespace
-   * character is a line-continuation character ('\\').
-   *
-   *  Input:  line  - A pointer to a buffer containing the string to be
-   *                  scanned.
-   *          pos   - This is taken to be the offset of the end of the
-   *                  string.  This position is *not* scanned.
-   *
-   *  Output: The offset of the '\\' character if it was found, or -1 to
-   *          indicate that it was not.
-   *
-   * ------------------------------------------------------------------------ **
-   */
-  {
+{
+  int pos2 = 0;
+
   pos--;
   while( (pos >= 0) && isspace(line[pos]) )
      pos--;
 
-  return( ((pos >= 0) && ('\\' == line[pos])) ? pos : -1 );
-  } /* Continuation */
+  /* we should recognize if `\` is part of a multibyte character or not. */
+  while(pos2 <= pos) {
+    size_t skip = 0;
+    skip = skip_multibyte_char(line[pos2]);
+    if (skip) {
+        pos2 += skip;
+    } else if (pos == pos2) {
+        return( ((pos >= 0) && ('\\' == line[pos])) ? pos : -1 );
+    } else  {
+        pos2++;
+    }
+  }
+  return (-1);
+}
 
 
 static BOOL Section( FILE *InFile, BOOL (*sfunc)(char *) )