diff -ruN rrdcollect-0.2.3.orig/src/scan.c rrdcollect-0.2.3/src/scan.c --- rrdcollect-0.2.3.orig/src/scan.c 2005-01-20 18:42:17.000000000 +0100 +++ rrdcollect-0.2.3/src/scan.c 2006-01-22 00:51:52.000000000 +0100 @@ -74,6 +74,11 @@ } while (isdigit(*fmt)); } + /* skip white spaces like scanf does */ + if (strchr("difuoxX", *fmt)) + while (isspace(*buf)) + buf++; + /* FIXME: we should check afterward: * if (start == buf || start == '-' && buf-start == 1) * die("WTF??? zero-length number???"); @@ -150,27 +155,22 @@ buf++, length--; } - /* ignore if value not found */ - if(value == 0) - return 0; - if (!ignore) - counter[i++]->value = valuedup(value); + counter[i++]->value = strndup(start, buf - start); break; case 'c': + if (length < 0) + length = 1; // default length is 1 + while (*buf && length > 0) { buf++, length--; } if (length > 0) return 2; - /* ignore if value not found */ - if(value == 0) - return 0; - if (!ignore) - counter[i++]->value = valuedup(value); + counter[i++]->value = strndup(start, buf - start); break; @@ -192,7 +192,7 @@ case '\f': case '\v': /* don't match if not at least one space */ - if(!isspace(*(buf))) + if(!isspace(*buf)) return 0; else buf++; @@ -208,7 +208,7 @@ case '\v': break; default: - while (isspace(*(buf))) + while (isspace(*buf)) buf++; } fmt++;