- while(*s && !(*s == '\n' && !(s[1] == ' ' || s[1] == '\t')))
- dynstr_append(&value, *s++);
- if(*s) ++s;
+ while(*s && !(*s == '\n' && !(s[1] == ' ' || s[1] == '\t'))) {
+ const int c = *s++;
+ /* Strip leading whitespace */
+ if(value.nvec || !(c == ' ' || c == '\t' || c == '\n' || c == '\r'))
+ dynstr_append(&value, c);
+ }
+ /* Strip trailing whitespace */
+ while(value.nvec > 0 && (value.vec[value.nvec - 1] == ' '
+ || value.vec[value.nvec - 1] == '\t'
+ || value.vec[value.nvec - 1] == '\n'
+ || value.vec[value.nvec - 1] == '\r'))
+ --value.nvec;
+ if(*s)
+ ++s;