1 /* $NetBSD: argv.h,v 1.3 2022/10/08 16:12:50 christos Exp $ */ 2 3 #ifndef _ARGV_H_INCLUDED_ 4 #define _ARGV_H_INCLUDED_ 5 6 /*++ 7 /* NAME 8 /* argv 3h 9 /* SUMMARY 10 /* string array utilities 11 /* SYNOPSIS 12 /* #include "argv.h" 13 /* DESCRIPTION 14 /* .nf 15 16 /* 17 * External interface. 18 */ 19 typedef struct ARGV { 20 ssize_t len; /* number of array elements */ 21 ssize_t argc; /* array elements in use */ 22 char **argv; /* string array */ 23 } ARGV; 24 25 extern ARGV *argv_alloc(ssize_t); 26 extern ARGV *argv_sort(ARGV *); 27 extern void argv_add(ARGV *,...); 28 extern void argv_addn(ARGV *,...); 29 extern void argv_terminate(ARGV *); 30 extern void argv_truncate(ARGV *, ssize_t); 31 extern void argv_insert_one(ARGV *, ssize_t, const char *); 32 extern void argv_replace_one(ARGV *, ssize_t, const char *); 33 extern void argv_delete(ARGV *, ssize_t, ssize_t); 34 extern ARGV *argv_free(ARGV *); 35 36 extern ARGV *argv_split(const char *, const char *); 37 extern ARGV *argv_split_count(const char *, const char *, ssize_t); 38 extern ARGV *argv_split_append(ARGV *, const char *, const char *); 39 40 extern ARGV *argv_splitq(const char *, const char *, const char *); 41 extern ARGV *argv_splitq_count(const char *, const char *, const char *, ssize_t); 42 extern ARGV *argv_splitq_append(ARGV *, const char *, const char *, const char *); 43 44 extern ARGV *argv_split_at(const char *, int); 45 extern ARGV *argv_split_at_count(const char *, int, ssize_t); 46 extern ARGV *argv_split_at_append(ARGV *, const char *, int); 47 48 #define ARGV_FAKE_BEGIN(fake_argv, arg) { \ 49 ARGV fake_argv; \ 50 char *__fake_argv_args__[2]; \ 51 __fake_argv_args__[0] = (char *) (arg); \ 52 __fake_argv_args__[1] = 0; \ 53 fake_argv.argv = __fake_argv_args__; \ 54 fake_argv.argc = fake_argv.len = 1; 55 56 #define ARGV_FAKE_END } 57 58 #define ARGV_END ((char *) 0) 59 60 /* LICENSE 61 /* .ad 62 /* .fi 63 /* The Secure Mailer license must be distributed with this software. 64 /* AUTHOR(S) 65 /* Wietse Venema 66 /* IBM T.J. Watson Research 67 /* P.O. Box 704 68 /* Yorktown Heights, NY 10598, USA 69 /*--*/ 70 71 #endif 72