+ if (strchr(arg, '+'))
+ size++, make_compatible = 1;
+ else if (strchr(arg, '-'))
+ size--, make_compatible = 1;
+ if (size > 0 && make_compatible) {
+ /* We convert this manually because we many need %lld
+ * precision, and that's not portable. */
+ char buf[128], *s = buf + sizeof buf;
+ OFF_T num = size;
+ *--s = '\0';
+ while (num) {
+ if (s == buf) /* impossible... */
+ out_of_memory("parse_size_arg@buf");
+ *--s = (num % 10) + '0';
+ num /= 10;
+ }
+ if (!(*size_arg = strdup(s)))
+ out_of_memory("parse_size_arg");
+ }