summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
5da45d9)
The test for a NUL byte was before the test for start being before end.
Whilst here, hoist the test of end out of the per-byte loop, alter the
function to return bool, and merge the two, different, comments
explaining the function's behaviour.
void to_lower(char *s);
void to_upper(char *s);
void to_lower(char *s);
void to_upper(char *s);
-/*
- * See if a string contains 8 bit characters (use isascii() for the test).
- * Arguments include:
- *
- * start - Pointer to start of string to test.
- * end - End of string to test (test will stop before reaching
- * this point). If NULL, continue until reaching '\0'.
- *
- * This function always stops at '\0' regardless of the value of 'end'.
- * Returns 1 if the string contains an 8-bit character, 0 if it does not.
- */
-int contains8bit(const char *start, const char *end);
+bool contains8bit(const char *start, const char *end);
/*
* See if file has any 8-bit bytes.
/*
* See if file has any 8-bit bytes.
-/*
- * Scan for any 8-bit characters. Return 1 if they exist.
- *
- * Scan up until the given endpoint (but not the actual endpoint itself).
- * If the endpoint is NULL, scan until a '\0' is reached.
- */
-
-int
-contains8bit(const char *start, const char *end)
+/* contains8bit returns true if any byte from start onwards fails
+ * isascii(3), i.e. is outside [0, 0x7f]. If start is NULL it returns
+ * false. Bytes are examined until a NUL byte, or, if end is not NULL,
+ * whilst start is before end. */
+bool contains8bit(const char *start, const char *end)
- if (! start)
- return 0;
+ const char *p;
+ char c;
- while (*start != '\0' && (!end || (start < end)))
- if (! isascii((unsigned char) *start++))
- return 1;
+ if (!start)
+ return false;
+ p = start;
+ if (end) {
+ while (p < end && (c = (*p++)))
+ if (!isascii((unsigned char)c))
+ return true;
+ } else {
+ while ((c = (*p++)))
+ if (!isascii((unsigned char)c))
+ return true;
+ }
+
+ return false;