Diff
Not logged in

Differences From:

File src/blob.c part of check-in [e44d7a4b5a] - Prevent buffer overrun when adding \r characters to the check-in descriptions for win32. Ticket 41bb23e650. by drh on 2008-10-26 02:29:22. [view]

To:

File src/blob.c part of check-in [054dd31b71] - Use our own isspace() function since the standard-library isspace() sometimes gives incorrect results for non-ASCII characters. by drh on 2008-11-03 21:56:09. [view]

@@ -76,8 +76,17 @@
 #define blob_is_reset(x)
 #endif
 
 /*
+** We find that the built-in isspace() function does not work for
+** some international character sets.  So here is a substitute.
+*/
+static int blob_isspace(char c){
+  return c==' '  || c=='\n' || c=='\t' ||
+         c=='\r' || c=='\f' || c=='\v';
+}
+
+/*
 ** This routine is called if a blob operation fails because we
 ** have run out of memory.
 */
 static void blob_panic(void){
@@ -412,9 +421,9 @@
 */
 int blob_trim(Blob *p){
   char *z = p->aData;
   int n = p->nUsed;
-  while( n>0 && isspace(z[n-1]) ){ n--; }
+  while( n>0 && blob_isspace(z[n-1]) ){ n--; }
   p->nUsed = n;
   return n;
 }
 
@@ -435,13 +444,13 @@
 int blob_token(Blob *pFrom, Blob *pTo){
   char *aData = pFrom->aData;
   int n = pFrom->nUsed;
   int i = pFrom->iCursor;
-  while( i<n && isspace(aData[i]) ){ i++; }
+  while( i<n && blob_isspace(aData[i]) ){ i++; }
   pFrom->iCursor = i;
-  while( i<n && !isspace(aData[i]) ){ i++; }
+  while( i<n && !blob_isspace(aData[i]) ){ i++; }
   blob_extract(pFrom, i-pFrom->iCursor, pTo);
-  while( i<n && isspace(aData[i]) ){ i++; }
+  while( i<n && blob_isspace(aData[i]) ){ i++; }
   pFrom->iCursor = i;
   return pTo->nUsed;
 }