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;
}