1 /* $NetBSD: argv.h,v 1.1.1.2 2013/01/02 18:59:11 tron 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 void argv_add(ARGV *,...); 27 extern void argv_addn(ARGV *,...); 28 extern void argv_terminate(ARGV *); 29 extern void argv_truncate(ARGV *, ssize_t); 30 extern void argv_insert_one(ARGV *, ssize_t, const char *); 31 extern void argv_replace_one(ARGV *, ssize_t, const char *); 32 extern ARGV *argv_free(ARGV *); 33 34 extern ARGV *argv_split(const char *, const char *); 35 extern ARGV *argv_split_count(const char *, const char *, ssize_t); 36 extern ARGV *argv_split_append(ARGV *, const char *, const char *); 37 38 #define ARGV_FAKE_BEGIN(fake_argv, arg) { \ 39 ARGV fake_argv; \ 40 char *__fake_argv_args__[2]; \ 41 __fake_argv_args__[0] = (char *) (arg); \ 42 __fake_argv_args__[1] = 0; \ 43 fake_argv.argv = __fake_argv_args__; \ 44 fake_argv.argc = fake_argv.len = 1; 45 46 #define ARGV_FAKE_END } 47 48 #define ARGV_END ((char *) 0) 49 50 /* LICENSE 51 /* .ad 52 /* .fi 53 /* The Secure Mailer license must be distributed with this software. 54 /* AUTHOR(S) 55 /* Wietse Venema 56 /* IBM T.J. Watson Research 57 /* P.O. Box 704 58 /* Yorktown Heights, NY 10598, USA 59 /*--*/ 60 61 #endif 62