X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fdynamic-string.c;h=dbb33a3563304cfec53e5505598096ef35e132d2;hb=9d7c56431990fc56a1b26dd32c1e7a8d9258345f;hp=c3338180d250aed389c432031598fde630cb8afa;hpb=a4af00400a835eb87569ba40e21874c05e872c0f;p=sliver-openvswitch.git diff --git a/lib/dynamic-string.c b/lib/dynamic-string.c index c3338180d..dbb33a356 100644 --- a/lib/dynamic-string.c +++ b/lib/dynamic-string.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,7 +32,7 @@ ds_init(struct ds *ds) } void -ds_clear(struct ds *ds) +ds_clear(struct ds *ds) { ds->length = 0; } @@ -66,7 +66,7 @@ ds_put_uninit(struct ds *ds, size_t n) } void -ds_put_char(struct ds *ds, char c) +ds_put_char__(struct ds *ds, char c) { *ds_put_uninit(ds, 1) = c; } @@ -147,8 +147,6 @@ ds_put_format_valist(struct ds *ds, const char *format, va_list args_) if (needed < available) { ds->length += needed; } else { - size_t available; - ds_reserve(ds, ds->length + needed); va_copy(args, args_); @@ -162,7 +160,7 @@ ds_put_format_valist(struct ds *ds, const char *format, va_list args_) } void -ds_put_printable(struct ds *ds, const char *s, size_t n) +ds_put_printable(struct ds *ds, const char *s, size_t n) { ds_reserve(ds, ds->length + n); while (n-- > 0) { @@ -179,7 +177,7 @@ void ds_put_strftime(struct ds *ds, const char *template, const struct tm *tm) { if (!tm) { - time_t now = time_now(); + time_t now = time_wall(); tm = localtime(&now); } for (;;) { @@ -189,7 +187,7 @@ ds_put_strftime(struct ds *ds, const char *template, const struct tm *tm) ds->length += used; return; } - ds_reserve(ds, ds->length + (avail < 32 ? 64 : 2 * avail)); + ds_reserve(ds, ds->length + (avail < 32 ? 64 : 2 * avail)); } } @@ -209,6 +207,32 @@ ds_get_line(struct ds *ds, FILE *file) } } +/* Reads a line from 'file' into 'ds', clearing anything initially in 'ds'. + * Deletes comments introduced by "#" and skips lines that contains only white + * space (after deleting comments). + * + * Returns 0 if successful, EOF if no non-blank line was found. */ +int +ds_get_preprocessed_line(struct ds *ds, FILE *file) +{ + while (!ds_get_line(ds, file)) { + char *line = ds_cstr(ds); + char *comment; + + /* Delete comments. */ + comment = strchr(line, '#'); + if (comment) { + *comment = '\0'; + } + + /* Return successfully unless the line is all spaces. */ + if (line[strspn(line, " \t\n")] != '\0') { + return 0; + } + } + return EOF; +} + char * ds_cstr(struct ds *ds) {