summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>1999-12-21 02:15:53 +0000
committerJeremy Allison <jra@samba.org>1999-12-21 02:15:53 +0000
commite004340f715743e16f599bd0be3e9dad4c53bf2d (patch)
treec73890f2a99e9bfe2add539fd05f31f109235418 /source3
parent7b39ef295073847b29af3220e0566131e503b0a0 (diff)
downloadsamba-e004340f715743e16f599bd0be3e9dad4c53bf2d.tar.gz
samba-e004340f715743e16f599bd0be3e9dad4c53bf2d.tar.bz2
samba-e004340f715743e16f599bd0be3e9dad4c53bf2d.zip
Fix based on code from monyo@home.monyo.com to fix multibyte continuation
issues. Jeremy. (This used to be commit 023f90e7664d358ddf73272597e75041f5413e9f)
Diffstat (limited to 'source3')
-rw-r--r--source3/param/params.c48
1 files changed, 31 insertions, 17 deletions
diff --git a/source3/param/params.c b/source3/param/params.c
index 74dd3d7a25..944bc3d1b4 100644
--- a/source3/param/params.c
+++ b/source3/param/params.c
@@ -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 *) )