1 /* $NetBSD: argv.h,v 1.4 2023/12/23 20:30:46 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 typedef int (*ARGV_COMPAR_FN)(const void *, const void *); 26 27 extern ARGV *argv_alloc(ssize_t); 28 extern ARGV *argv_sort(ARGV *); /* backwards compatibility */ 29 extern ARGV *argv_qsort(ARGV *, ARGV_COMPAR_FN); 30 extern ARGV *argv_uniq(ARGV *, ARGV_COMPAR_FN); 31 extern void argv_add(ARGV *,...); 32 extern void argv_addn(ARGV *,...); 33 extern void argv_terminate(ARGV *); 34 extern void argv_truncate(ARGV *, ssize_t); 35 extern void argv_insert_one(ARGV *, ssize_t, const char *); 36 extern void argv_replace_one(ARGV *, ssize_t, const char *); 37 extern void argv_delete(ARGV *, ssize_t, ssize_t); 38 extern ARGV *argv_free(ARGV *); 39 40 extern ARGV *argv_split(const char *, const char *); 41 extern ARGV *argv_split_count(const char *, const char *, ssize_t); 42 extern ARGV *argv_split_append(ARGV *, const char *, const char *); 43 44 extern ARGV *argv_splitq(const char *, const char *, const char *); 45 extern ARGV *argv_splitq_count(const char *, const char *, const char *, ssize_t); 46 extern ARGV *argv_splitq_append(ARGV *, const char *, const char *, const char *); 47 48 extern ARGV *argv_split_at(const char *, int); 49 extern ARGV *argv_split_at_count(const char *, int, ssize_t); 50 extern ARGV *argv_split_at_append(ARGV *, const char *, int); 51 52 #define ARGV_FAKE_BEGIN(fake_argv, arg) { \ 53 ARGV fake_argv; \ 54 char *__fake_argv_args__[2]; \ 55 __fake_argv_args__[0] = (char *) (arg); \ 56 __fake_argv_args__[1] = 0; \ 57 fake_argv.argv = __fake_argv_args__; \ 58 fake_argv.argc = fake_argv.len = 1; 59 60 #define ARGV_FAKE_END } 61 62 #define ARGV_END ((char *) 0) 63 64 /* LICENSE 65 /* .ad 66 /* .fi 67 /* The Secure Mailer license must be distributed with this software. 68 /* AUTHOR(S) 69 /* Wietse Venema 70 /* IBM T.J. Watson Research 71 /* P.O. Box 704 72 /* Yorktown Heights, NY 10598, USA 73 /* 74 /* Wietse Venema 75 /* Google, Inc. 76 /* 111 8th Avenue 77 /* New York, NY 10011, USA 78 /*--*/ 79 80 #endif 81