add missing fflush() on close - fixes a bug in the lock/unlock order (thx, Cyrus)
[project/uci.git] / util.c
diff --git a/util.c b/util.c
index e56992e..9843058 100644 (file)
--- a/util.c
+++ b/util.c
@@ -86,7 +86,7 @@ __plugin bool uci_validate_str(const char *str, bool name)
                return false;
 
        while (*str) {
-               char c = *str;
+               unsigned char c = *str;
                if (!isalnum(c) && c != '_') {
                        if (name || (c < 33) || (c > 126))
                                return false;
@@ -114,8 +114,9 @@ static inline bool uci_validate_name(const char *str)
 bool uci_validate_text(const char *str)
 {
        while (*str) {
-               if ((*str == '\r') || (*str == '\n') ||
-                       ((*str < 32) && (*str != '\t')))
+               unsigned char c = *str;
+               if ((c == '\r') || (c == '\n') ||
+                       ((c < 32) && (c != '\t')))
                        return false;
                str++;
        }
@@ -477,6 +478,7 @@ static void uci_close_stream(FILE *stream)
        if (!stream)
                return;
 
+       fflush(stream);
        fd = fileno(stream);
        flock(fd, LOCK_UN);
        fclose(stream);