140 for (cpp = argvp->
argv; cpp < argvp->argv + argvp->
argc; cpp++)
159 sane_len = (len < 2 ? 2 : len);
160 argvp->
argv = (
char **)
mymalloc((sane_len + 1) *
sizeof(
char *));
161 argvp->
len = sane_len;
167 static int argv_cmp(
const void *e1,
const void *e2)
169 const char *s1 = *(
const char **) e1;
170 const char *s2 = *(
const char **) e2;
172 return strcmp(s1, s2);
179 qsort(argvp->
argv, argvp->
argc,
sizeof(argvp->
argv[0]), argv_cmp);
185 static void argv_extend(
ARGV *argvp)
189 new_len = argvp->
len * 2;
190 argvp->
argv = (
char **)
191 myrealloc((
void *) argvp->
argv, (new_len + 1) *
sizeof(
char *));
192 argvp->
len = new_len;
205 #define ARGV_SPACE_LEFT(a) ((a)->len - (a)->argc - 1)
208 while ((arg = va_arg(ap,
char *)) != 0) {
229 while ((arg = va_arg(ap,
char *)) != 0) {
230 if ((len = va_arg(ap, ssize_t)) < 0)
231 msg_panic(
"argv_addn: bad string length %ld", (
long) len);
261 msg_panic(
"argv_truncate: bad length %ld", (
long) len);
263 if (len < argvp->argc) {
264 for (cpp = argvp->
argv + len; cpp < argvp->argv + argvp->
argc; cpp++)
280 if (where < 0 || where > argvp->
argc)
281 msg_panic(
"argv_insert_one bad position: %ld", (
long) where);
285 for (pos = argvp->
argc; pos >= where; pos--)
286 argvp->
argv[pos + 1] = argvp->
argv[pos];
300 if (where < 0 || where >= argvp->
argc)
301 msg_panic(
"argv_replace_one bad position: %ld", (
long) where);
303 temp = argvp->
argv[where];
317 if (first < 0 || how_many < 0 || first + how_many > argvp->
argc)
318 msg_panic(
"argv_delete bad range: (start=%ld count=%ld)",
319 (
long) first, (
long) how_many);
321 for (pos = first; pos < first + how_many; pos++)
323 for (pos = first; pos <= argvp->
argc - how_many; pos++)
324 argvp->
argv[pos] = argvp->
argv[pos + how_many];
325 argvp->
argc -= how_many;
char * mystrdup(const char *str)
ARGV * argv_free(ARGV *argvp)
NORETURN msg_panic(const char *fmt,...)
void argv_replace_one(ARGV *argvp, ssize_t where, const char *arg)
void * myrealloc(void *ptr, ssize_t len)
void argv_add(ARGV *argvp,...)
ARGV * argv_alloc(ssize_t len)
#define ARGV_SPACE_LEFT(a)
void argv_addn(ARGV *argvp,...)
void argv_truncate(ARGV *argvp, ssize_t len)
void argv_delete(ARGV *argvp, ssize_t first, ssize_t how_many)
char * mystrndup(const char *str, ssize_t len)
ARGV * argv_sort(ARGV *argvp)
void argv_insert_one(ARGV *argvp, ssize_t where, const char *arg)
void * mymalloc(ssize_t len)
void argv_terminate(ARGV *argvp)