static int dt_opt_size(dtrace_hdl_t *dtp, const char *arg, uintptr_t option) { dtrace_optval_t val = 0; if (arg != NULL && dt_optval_parse(arg, &val) != 0) return (dt_set_errno(dtp, EDT_BADOPTVAL)); dtp->dt_options[option] = val; return (0); }
/*ARGSUSED*/ static int dt_opt_preallocate(dtrace_hdl_t *dtp, const char *arg, uintptr_t option) { dtrace_optval_t size; void *p; if (arg == NULL || dt_optval_parse(arg, &size) != 0) return (dt_set_errno(dtp, EDT_BADOPTVAL)); if (size > SIZE_MAX) size = SIZE_MAX; if ((p = dt_zalloc(dtp, size)) == NULL) { do { size /= 2; } while ((p = dt_zalloc(dtp, size)) == NULL); } dt_free(dtp, p); return (0); }