long getmntoptnum(mntoptparse_t mp, const char *opt) { char *ep; long rv; void (*fun)(int, const char *, ...) = NULL; const char *val = getmntoptstr(mp, opt); if (val == NULL) { if (getmnt_silent == 0) errx(1, "Missing %s argument", opt); else return -1; } errno = 0; rv = strtol(val, &ep, 0); if (*ep) fun = errx; if (errno == ERANGE && (rv == LONG_MAX || rv == LONG_MIN)) fun = err; if (fun) { if (getmnt_silent != 0) return -1; (*fun)(1, "Invalid %s argument `%s'", opt, val); } return rv; }
static char* egetmntoptstr(mntoptparse_t mp, const char *k) { const char *v; char *p; v = getmntoptstr(mp, k); if (v == NULL) return NULL; p = strdup(v); if (p == NULL) err(1, NULL); return p; }