xref: /netbsd-src/external/ibm-public/postfix/dist/src/util/argv.h (revision c48c605c14fd8622b523d1d6a3f0c0bad133ea89)
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