diff options
53 files changed, 444 insertions, 429 deletions
diff --git a/libexec_init_command.c b/LIBEXEC_COMMAND_INIT.c index c49af27..e211995 100644 --- a/libexec_init_command.c +++ b/LIBEXEC_COMMAND_INIT.c @@ -1,19 +1,6 @@ /* See LICENSE file for copyright and license details. */ #include "common.h" -#ifndef TEST - - -void -libexec_init_command(struct libexec_command *cmd) -{ - if (!cmd) - return; - - *cmd = LIBEXEC_COMMAND_INIT; -} - - -#else +#ifdef TEST int @@ -22,7 +9,7 @@ main(void) struct libexec_command cmd; memset(&cmd, 127, sizeof(cmd)); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; ASSERT_EQ_INT(cmd.library_version, LIBEXEC_VERSION); ASSERT_EQ_ENUM(cmd.exec_how, LIBEXEC_ALLOW_NAME); @@ -34,8 +21,6 @@ main(void) ASSERT_EQ_UINT(cmd.nplumings, 0); ASSERT_IS_NULL(cmd.environ); - libexec_init_command(NULL); - return 0; } @@ -33,7 +33,6 @@ OBJ =\ libexec_get_documents.o\ libexec_getenv.o\ libexec_getenv_last.o\ - libexec_init_command.o\ libexec_input_data_copy.o\ libexec_input_data_gift.o\ libexec_input_text_copy.o\ @@ -105,8 +104,8 @@ HDR =\ common.h LOBJ = $(OBJ:.o=.lo) -TOBJ = $(OBJ:.o=.to) -TEST = $(OBJ:.o=.test) +TOBJ = $(OBJ:.o=.to) LIBEXEC_COMMAND_INIT.to +TEST = $(TOBJ:.to=.test) all: libexec.a libexec.$(LIBEXT) $(TEST) @@ -12,7 +12,11 @@ #include <string.h> #include <unistd.h> -#if !defined(__linux__) + +#if defined(__linux__) +# define STRUCT_OPEN_HOW struct open_how +#else +# define STRUCT_OPEN_HOW void int libexec_openat2(struct libexec_command *cmd, int fd, int dirfd, const char *file, void *how, size_t size); #endif @@ -6,14 +6,16 @@ #if defined(__linux__) # include <linux/openat2.h> #endif +#include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdarg.h> #include <stddef.h> #include <stdint.h> +#include <string.h> -/* For internal use only { */ +/* For internal use only (may be removed in the future) { */ #if defined(__GNUC__) # define LIBEXEC_PURE__ __attribute__((__pure__)) # define LIBEXEC_CONST__ __attribute__((__const__)) @@ -25,50 +27,228 @@ # define LIBEXEC_PRINTF__(FMTIDX) # define LIBEXEC_VPRINTF__(FMTIDX) #endif +#define LIBEXEC_VA_IMPL__(LAST, FUNC, ...)\ + int ret;\ + va_list args;\ + va_start(args, LAST);\ + ret = FUNC(__VA_ARGS__, args);\ + va_end(args);\ + return ret /* } */ +/** + * Used to specify which version of the library + * the application is compiled against, so that + * the library knowns the layout of structures + * that may be modified in future versions + * + * This is currently used for: + * - `struct libexec_command` + */ #define LIBEXEC_VERSION 0U +/** + * Specifies how an element should be inserted + * into a list + * + * This is currently used for: + * - `libexec_putenv` + * - `libexec_putenvf` + * - `libexec_vputenvf` + * - `libexec_setenv` + * - `libexec_setenvf` + * - `libexec_vsetenvf` + */ enum libexec_insert_mode { + /** + * Append to list, but if the an element with the same + * key is used, replace the first occurrence of it + */ LIBEXEC_REPLACE, /* replace existing definition if any */ - LIBEXEC_NOREPLACE, /* do nothing if definition already exists */ - LIBEXEC_NOCLOBBER, /* fail if definition already exists an differs */ - LIBEXEC_APPEND, /* add, to end of list, even if definition already exists, but also keep old */ - LIBEXEC_PREPEND /* add, to beginning of list, even if definition already exists, but also keep old */ - /* Either LIBEXEC_APPEND or LIBEXEC_PREPEND is required to put something missing '=' in the environment */ -#define LIBEXEC_INSERT_MODE__COUNT__ 5 + + /** + * Append to list except if the an element with the same + * key is used, then do nothing + */ + LIBEXEC_NOREPLACE, + + /** + * Append to list except if the an element with the same + * key is used, then do nothing but indicate fail + */ + LIBEXEC_NOCLOBBER, + + /** + * Add to the end of the list regardless of whether + * there already is an element with the same key in he list + * + * If used in `libexec_putenv`, `libexec_putenvf`, or + * `libexec_vputenvf`, that function will accept the + * new element even if it doesn't use a key–value + * construction + */ + LIBEXEC_APPEND, + + /** + * Add to the beginning of the list regardless of whether + * there already is an element with the same key in he list + * + * If used in `libexec_putenv`, `libexec_putenvf`, or + * `libexec_vputenvf`, that function will accept the + * new element even if it doesn't use a key–value + * construction + */ + LIBEXEC_PREPEND + +#define LIBEXEC_INSERT_MODE__COUNT__ 5 /* For internal use only (may be removed in the future) */ }; + +/** + * Modification to command's set of file descriptors + */ enum libexec_pluming_type { + /** + * Perform an openat(3) call, and change the + * number of the new file descriptor to a + * desired number + */ LIBEXEC_PLUMING_OPENAT, + + /** + * Perform an openat2(2) call, and change the + * number of the new file descriptor to a + * desired number + */ LIBEXEC_PLUMING_OPENAT2, + + /** + * Close a specific file descriptor + */ LIBEXEC_PLUMING_CLOSE, + + /** + * Perform an dup2(3) call to duplicate + * a file descriptor + */ LIBEXEC_PLUMING_DUP2, + + /** + * Pass text from the application's memory + * into the child process via a pipe, whose + * read-end will have a selected number; + * the write-end will not be exposed to the + * child process + */ LIBEXEC_PLUMING_DOCUMENT, + + /** + * Expose a file descriptor from the application + * using a selected file descriptor number + * + * Note that unless a file descriptor from the + * application is explicitly close it will + * still be exposed to the child process; this + * merely changes the file descriptor number + */ LIBEXEC_PLUMING_PIPE -#define LIBEXEC_PLUMING_TYPE__COUNT__ 6 + +#define LIBEXEC_PLUMING_TYPE__COUNT__ 6 /* For internal use only (may be removed in the future) */ }; + +/** + * Specifies how two commands shall be connected + * + * The value should be `LIBEXEC_PIPE`, `LIBEXEC_SOCK_STREAM`, + * `LIBEXEC_SOCK_SEQPACKET`, `LIBEXEC_SOCK_DGRAM, or + * `LIBEXEC_DIRECT_PIPE`, optionally OR'ed with + * `LIBEXEC_PIPE_CIRCULARLY` + */ enum libexec_pipe { + /** + * Use a normal pipe(7) to connect the two commands + */ LIBEXEC_PIPE = 0, + + /** + * Use a unix(7) socketpair(3) with the type `SOCK_STREAM` + */ LIBEXEC_SOCK_STREAM = 1, + + /** + * Use a unix(7) socketpair(3) with the type `SOCK_SEQPACKET` + */ LIBEXEC_SOCK_SEQPACKET = 2, + + /** + * Use a unix(7) socketpair(3) with the type `SOCK_DGRAM` + */ LIBEXEC_SOCK_DGRAM = 3, + + /** + * Use a pipe(7) created with `O_DIRECT` (see pipe2(2)) + * to connect the two commands + */ LIBEXEC_DIRECT_PIPE = 4, + + /** + * Pipe the standard output of the last command to + * the standard input of the first command, in addition + * to piping the standard output of each command to + * the standard input of the next command + */ LIBEXEC_PIPE_CIRCULARLY = 0x8000 -#define LIBEXEC_PIPE__COUNT__ 5 + +#define LIBEXEC_PIPE__COUNT__ 5 /* For internal use only (may be removed in the future) */ }; + +/** + * Specifies which exec(3) function should be used + */ enum libexec_locate_method { + /** + * p-class exec(3) function shall be used, + * that is, the executable may either be + * a relative or absolute path, but it may + * also be the name of a program that can + * be found in PATH. PATH is used, if and + * only if, the specified executable contains + * a slash + */ LIBEXEC_ALLOW_NAME, + + /** + * non-p-class exec(3) function shall be used, + * that is, the executable must be a relative + * or absolute path + */ LIBEXEC_REQUIRE_PATH, + + /** + * f-class exec(3) function shall be used, + * that is, a file descriptor to the executable + * is used + */ LIBEXEC_EXEC_FD, + + /** + * at-class exec(3) function shall be used, + * that is, a function like execveat(2), + * where the executable is specified via + * a directory file descriptor (or `AT_FDCWD`) + * paired with a pathname, and AT_-flags, + * is used + */ LIBEXEC_EXEC_AT -#define LIBEXEC_LOCATE_METHOD__COUNT__ 4 + +#define LIBEXEC_LOCATE_METHOD__COUNT__ 4 /* For internal use only (may be removed in the future) */ }; + enum libexec_run_instruction { LIBEXEC_RUN_END, /* required to mark end if arguments for libexec_run */ LIBEXEC_RUN_END_CIRCULAR_PIPE, /* alternative to LIBEXEC_RUN_END */ @@ -101,7 +281,7 @@ enum libexec_run_instruction { LIBEXEC_RUN_SET_ATFORK, /* ditto */ LIBEXEC_RUN_SET_MUTEX, /* ditto */ LIBEXEC_RUN_SET_INTERRUPT_CALLBACK /* ditto */ -#define LIBEXEC_RUN_INSTRUCTION__COUNT__ 31 +#define LIBEXEC_RUN_INSTRUCTION__COUNT__ 31 /* For internal use only (may be removed in the future) */ }; #define LIBEXEC_RUN_END() LIBEXEC_RUN_END #define LIBEXEC_RUN_END_CIRCULAR_PIPE(TYPE) LIBEXEC_RUN_END_CIRCULAR_PIPE, TYPE @@ -177,8 +357,6 @@ struct libexec_pluming { } target; }; -#define LIBEXEC_COMMAND_INIT\ - ((struct libexec_command){LIBEXEC_VERSION, LIBEXEC_ALLOW_NAME, -1, NULL, NULL, 0, NULL, 0, NULL}) struct libexec_command { unsigned library_version; enum libexec_locate_method exec_how; @@ -209,24 +387,38 @@ struct libexec_result { }; -void libexec_init_command(struct libexec_command *cmd); +#define LIBEXEC_COMMAND_INIT\ + ((struct libexec_command){LIBEXEC_VERSION, LIBEXEC_ALLOW_NAME, -1, NULL, NULL, 0, NULL, 0, NULL}) + void libexec_destroy_command(struct libexec_command *cmd); void libexec_destroy_pluming(struct libexec_pluming *pluming); int libexec_destroy_document(struct libexec_document *doc); void libexec_destroy_result(struct libexec_result *result); int libexec_vconstruct_command(struct libexec_command *cmd, const char *fmt, va_list args); -int libexec_construct_command(struct libexec_command *cmd, const char *fmt, ...); +inline int libexec_construct_command(struct libexec_command *cmd, const char *fmt, ...) +{ LIBEXEC_VA_IMPL__(fmt, libexec_vconstruct_command, cmd, fmt); } int libexec_put_argumentsn(struct libexec_command *cmd, const char *const *args, size_t nargs); -int libexec_put_arguments(struct libexec_command *cmd, const char *const *args); +inline int libexec_put_arguments(struct libexec_command *cmd, const char *const *args) +{ + size_t n = 0; + if (!args) { + errno = EINVAL; + return -1; + } + while (args[n]) + n += 1; + return libexec_put_argumentsn(cmd, args, n); +} int libexec_set_executable(struct libexec_command *cmd, const char *executable /* NULL = use first argument in command */); void libexec_set_require_path(struct libexec_command *cmd, int require); int libexec_set_exec_fd(struct libexec_command *cmd, int fd); int libexec_set_exec_path(struct libexec_command *cmd, int dirfd, const char *path /* NULL = use first argument in command */); int libexec_add_pluming(struct libexec_command *cmd, const struct libexec_pluming *pluming); -int libexec_open(struct libexec_command *cmd, int fd, const char *file, int flags, mode_t mode); int libexec_openat(struct libexec_command *cmd, int fd, int dirfd, const char *file, int flags, mode_t mode); +inline int libexec_open(struct libexec_command *cmd, int fd, const char *file, int flags, mode_t mode) +{ return libexec_openat(cmd, fd, AT_FDCWD, file, flags, mode); } #if defined(__linux__) int libexec_openat2(struct libexec_command *cmd, int fd, int dirfd, const char *file, struct open_how *how, size_t size); #endif @@ -235,8 +427,22 @@ int libexec_close(struct libexec_command *cmd, int fd); int libexec_renumber_fd(struct libexec_command *cmd, int fd, int old_fd); int libexec_input_data_copy(struct libexec_command *cmd, int fd, const char *data, size_t len); int libexec_input_data_gift(struct libexec_command *cmd, int fd, char *data, size_t len); -int libexec_input_text_copy(struct libexec_command *cmd, int fd, const char *text); -int libexec_input_text_gift(struct libexec_command *cmd, int fd, char *text); +inline int libexec_input_text_copy(struct libexec_command *cmd, int fd, const char *text) +{ + if (!text) { + errno = EINVAL; + return -1; + } + return libexec_input_data_copy(cmd, fd, text, strlen(text)); +} +inline int libexec_input_text_gift(struct libexec_command *cmd, int fd, char *text) +{ + if (!text) { + errno = EINVAL; + return -1; + } + return libexec_input_data_gift(cmd, fd, text, strlen(text)); +} int libexec_add_output_fd(struct libexec_command *cmd, int fd, int wr_fd); int libexec_add_output_document(struct libexec_command *cmd, int fd, struct libexec_document *doc /* .fd will be set */, int flags); @@ -516,7 +722,9 @@ LIBEXEC_VPRINTF__(3) int libexec_vputenvf(struct libexec_command *, enum libexec * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(3) int libexec_putenvf(struct libexec_command *, enum libexec_insert_mode, const char *, ...); +LIBEXEC_PRINTF__(3) inline int +libexec_putenvf(struct libexec_command *cmd, enum libexec_insert_mode how, const char *fmt, ...) +{ LIBEXEC_VA_IMPL__(fmt, libexec_vputenvf, cmd, how, fmt); } /** * Put an environment variable into a command's environment @@ -633,7 +841,9 @@ LIBEXEC_VPRINTF__(4) int libexec_vsetenvf(struct libexec_command *, enum libexec * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(4) int libexec_setenvf(struct libexec_command *, enum libexec_insert_mode, const char *, const char *, ...); +LIBEXEC_PRINTF__(4) inline int +libexec_setenvf(struct libexec_command *cmd, enum libexec_insert_mode how, const char *name, const char *value_fmt, ...) +{ LIBEXEC_VA_IMPL__(value_fmt, libexec_vsetenvf, cmd, how, name, value_fmt); } /** @@ -657,7 +867,9 @@ LIBEXEC_PRINTF__(4) int libexec_setenvf(struct libexec_command *, enum libexec_i * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_putenv_replace(struct libexec_command *, const char *); +inline int +libexec_putenv_replace(struct libexec_command *cmd, const char *string) +{ return libexec_putenv(cmd, LIBEXEC_REPLACE, string); } /** * Put an environment variable into a command's environment, @@ -685,7 +897,9 @@ int libexec_putenv_replace(struct libexec_command *, const char *); * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(2) int libexec_vputenvf_replace(struct libexec_command *, const char *, va_list); +LIBEXEC_VPRINTF__(2) inline int +libexec_vputenvf_replace(struct libexec_command *cmd, const char *fmt, va_list args) +{ return libexec_vputenvf(cmd, LIBEXEC_REPLACE, fmt, args); } /** * Put an environment variable into a command's environment, @@ -713,7 +927,9 @@ LIBEXEC_VPRINTF__(2) int libexec_vputenvf_replace(struct libexec_command *, cons * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(2) int libexec_putenvf_replace(struct libexec_command *, const char *, ...); +LIBEXEC_PRINTF__(2) inline int +libexec_putenvf_replace(struct libexec_command *cmd, const char *fmt, ...) +{ LIBEXEC_VA_IMPL__(fmt, libexec_vputenvf_replace, cmd, fmt); } /** * Put an environment variable into a command's environment, @@ -737,7 +953,9 @@ LIBEXEC_PRINTF__(2) int libexec_putenvf_replace(struct libexec_command *, const * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_setenv_replace(struct libexec_command *, const char *, const char *); +inline int +libexec_setenv_replace(struct libexec_command *cmd, const char *name, const char *value) +{ return libexec_setenv(cmd, LIBEXEC_REPLACE, name, value); } /** * Put an environment variable into a command's environment, @@ -764,7 +982,9 @@ int libexec_setenv_replace(struct libexec_command *, const char *, const char *) * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_replace(struct libexec_command *, const char *, const char *, va_list); +LIBEXEC_VPRINTF__(3) inline int +libexec_vsetenvf_replace(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) +{ return libexec_vsetenvf(cmd, LIBEXEC_REPLACE, name, value_fmt, args); } /** * Put an environment variable into a command's environment, @@ -791,7 +1011,9 @@ LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_replace(struct libexec_command *, cons * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(3) int libexec_setenvf_replace(struct libexec_command *, const char *, const char *, ...); +LIBEXEC_PRINTF__(3) inline int +libexec_setenvf_replace(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) +{ LIBEXEC_VA_IMPL__(value_fmt, libexec_vsetenvf_replace, cmd, name, value_fmt); } /** @@ -818,7 +1040,9 @@ LIBEXEC_PRINTF__(3) int libexec_setenvf_replace(struct libexec_command *, const * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_putenv_noreplace(struct libexec_command *, const char *); +inline int +libexec_putenv_noreplace(struct libexec_command *cmd, const char *string) +{ return libexec_putenv(cmd, LIBEXEC_NOREPLACE, string); } /** * Put an environment variable into a command's environment @@ -849,7 +1073,9 @@ int libexec_putenv_noreplace(struct libexec_command *, const char *); * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(2) int libexec_vputenvf_noreplace(struct libexec_command *, const char *, va_list); +LIBEXEC_VPRINTF__(2) inline int +libexec_vputenvf_noreplace(struct libexec_command *cmd, const char *fmt, va_list args) +{ return libexec_vputenvf(cmd, LIBEXEC_NOREPLACE, fmt, args); } /** * Put an environment variable into a command's environment @@ -880,7 +1106,9 @@ LIBEXEC_VPRINTF__(2) int libexec_vputenvf_noreplace(struct libexec_command *, co * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(2) int libexec_putenvf_noreplace(struct libexec_command *, const char *, ...); +LIBEXEC_PRINTF__(2) inline int +libexec_putenvf_noreplace(struct libexec_command *cmd, const char *fmt, ...) +{ LIBEXEC_VA_IMPL__(fmt, libexec_vputenvf_noreplace, cmd, fmt); } /** * Put an environment variable into a command's environment @@ -907,7 +1135,9 @@ LIBEXEC_PRINTF__(2) int libexec_putenvf_noreplace(struct libexec_command *, cons * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_setenv_noreplace(struct libexec_command *, const char *, const char *); +inline int +libexec_setenv_noreplace(struct libexec_command *cmd, const char *name, const char *value) +{ return libexec_setenv(cmd, LIBEXEC_NOREPLACE, name, value); } /** * Put an environment variable into a command's environment @@ -937,7 +1167,9 @@ int libexec_setenv_noreplace(struct libexec_command *, const char *, const char * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_noreplace(struct libexec_command *, const char *, const char *, va_list); +LIBEXEC_VPRINTF__(3) inline int +libexec_vsetenvf_noreplace(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) +{ return libexec_vsetenvf(cmd, LIBEXEC_NOREPLACE, name, value_fmt, args); } /** * Put an environment variable into a command's environment @@ -967,7 +1199,9 @@ LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_noreplace(struct libexec_command *, co * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(3) int libexec_setenvf_noreplace(struct libexec_command *, const char *, const char *, ...); +LIBEXEC_PRINTF__(3) inline int +libexec_setenvf_noreplace(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) +{ LIBEXEC_VA_IMPL__(value_fmt, libexec_vsetenvf_noreplace, cmd, name, value_fmt); } /** @@ -994,7 +1228,9 @@ LIBEXEC_PRINTF__(3) int libexec_setenvf_noreplace(struct libexec_command *, cons * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_putenv_noclobber(struct libexec_command *, const char *); +inline int +libexec_putenv_noclobber(struct libexec_command *cmd, const char *string) +{ return libexec_putenv(cmd, LIBEXEC_NOCLOBBER, string); } /** * Put an environment variable into a command's environment @@ -1025,7 +1261,9 @@ int libexec_putenv_noclobber(struct libexec_command *, const char *); * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(2) int libexec_vputenvf_noclobber(struct libexec_command *, const char *, va_list); +LIBEXEC_VPRINTF__(2) inline int +libexec_vputenvf_noclobber(struct libexec_command *cmd, const char *fmt, va_list args) +{ return libexec_vputenvf(cmd, LIBEXEC_NOCLOBBER, fmt, args); } /** * Put an environment variable into a command's environment @@ -1056,7 +1294,9 @@ LIBEXEC_VPRINTF__(2) int libexec_vputenvf_noclobber(struct libexec_command *, co * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(2) int libexec_putenvf_noclobber(struct libexec_command *, const char *, ...); +LIBEXEC_PRINTF__(2) inline int +libexec_putenvf_noclobber(struct libexec_command *cmd, const char *fmt, ...) +{ LIBEXEC_VA_IMPL__(fmt, libexec_vputenvf_noclobber, cmd, fmt); } /** * Put an environment variable into a command's environment @@ -1083,7 +1323,9 @@ LIBEXEC_PRINTF__(2) int libexec_putenvf_noclobber(struct libexec_command *, cons * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_setenv_noclobber(struct libexec_command *, const char *, const char *); +inline int +libexec_setenv_noclobber(struct libexec_command *cmd, const char *name, const char *value) +{ return libexec_setenv(cmd, LIBEXEC_NOCLOBBER, name, value); } /** * Put an environment variable into a command's environment @@ -1113,7 +1355,9 @@ int libexec_setenv_noclobber(struct libexec_command *, const char *, const char * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_noclobber(struct libexec_command *, const char *, const char *, va_list); +LIBEXEC_VPRINTF__(3) inline int +libexec_vsetenvf_noclobber(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) +{ return libexec_vsetenvf(cmd, LIBEXEC_NOCLOBBER, name, value_fmt, args); } /** * Put an environment variable into a command's environment @@ -1143,7 +1387,9 @@ LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_noclobber(struct libexec_command *, co * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(3) int libexec_setenvf_noclobber(struct libexec_command *, const char *, const char *, ...); +LIBEXEC_PRINTF__(3) inline int +libexec_setenvf_noclobber(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) +{ LIBEXEC_VA_IMPL__(value_fmt, libexec_vsetenvf_noclobber, cmd, name, value_fmt); } /** @@ -1167,7 +1413,9 @@ LIBEXEC_PRINTF__(3) int libexec_setenvf_noclobber(struct libexec_command *, cons * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_putenv_append(struct libexec_command *, const char *); +inline int +libexec_putenv_append(struct libexec_command *cmd, const char *string) +{ return libexec_putenv(cmd, LIBEXEC_APPEND, string); } /** * Put an environment variable into a command's environment, @@ -1194,7 +1442,9 @@ int libexec_putenv_append(struct libexec_command *, const char *); * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(2) int libexec_vputenvf_append(struct libexec_command *, const char *, va_list); +LIBEXEC_VPRINTF__(2) inline int +libexec_vputenvf_append(struct libexec_command *cmd, const char *fmt, va_list args) +{ return libexec_vputenvf(cmd, LIBEXEC_APPEND, fmt, args); } /** * Put an environment variable into a command's environment, @@ -1221,7 +1471,9 @@ LIBEXEC_VPRINTF__(2) int libexec_vputenvf_append(struct libexec_command *, const * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(2) int libexec_putenvf_append(struct libexec_command *, const char *, ...); +LIBEXEC_PRINTF__(2) inline int +libexec_putenvf_append(struct libexec_command *cmd, const char *fmt, ...) +{ LIBEXEC_VA_IMPL__(fmt, libexec_vputenvf_append, cmd, fmt); } /** * Put an environment variable into a command's environment, @@ -1245,7 +1497,9 @@ LIBEXEC_PRINTF__(2) int libexec_putenvf_append(struct libexec_command *, const c * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_setenv_append(struct libexec_command *, const char *, const char *); +inline int +libexec_setenv_append(struct libexec_command *cmd, const char *name, const char *value) +{ return libexec_setenv(cmd, LIBEXEC_APPEND, name, value); } /** * Put an environment variable into a command's environment, @@ -1272,7 +1526,9 @@ int libexec_setenv_append(struct libexec_command *, const char *, const char *); * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_append(struct libexec_command *, const char *, const char *, va_list); +LIBEXEC_VPRINTF__(3) inline int +libexec_vsetenvf_append(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) +{ return libexec_vsetenvf(cmd, LIBEXEC_APPEND, name, value_fmt, args); } /** * Put an environment variable into a command's environment, @@ -1299,7 +1555,9 @@ LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_append(struct libexec_command *, const * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(3) int libexec_setenvf_append(struct libexec_command *, const char *, const char *, ...); +LIBEXEC_PRINTF__(3) inline int +libexec_setenvf_append(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) +{ LIBEXEC_VA_IMPL__(value_fmt, libexec_vsetenvf_append, cmd, name, value_fmt); } /** @@ -1323,7 +1581,9 @@ LIBEXEC_PRINTF__(3) int libexec_setenvf_append(struct libexec_command *, const c * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_putenv_prepend(struct libexec_command *, const char *); +inline int +libexec_putenv_prepend(struct libexec_command *cmd, const char *string) +{ return libexec_putenv(cmd, LIBEXEC_PREPEND, string); } /** * Put an environment variable into a command's environment, @@ -1350,7 +1610,9 @@ int libexec_putenv_prepend(struct libexec_command *, const char *); * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(2) int libexec_vputenvf_prepend(struct libexec_command *, const char *, va_list); +LIBEXEC_VPRINTF__(2) inline int +libexec_vputenvf_prepend(struct libexec_command *cmd, const char *fmt, va_list args) +{ return libexec_vputenvf(cmd, LIBEXEC_PREPEND, fmt, args); } /** * Put an environment variable into a command's environment, @@ -1377,7 +1639,9 @@ LIBEXEC_VPRINTF__(2) int libexec_vputenvf_prepend(struct libexec_command *, cons * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(2) int libexec_putenvf_prepend(struct libexec_command *, const char *, ...); +LIBEXEC_PRINTF__(2) inline int +libexec_putenvf_prepend(struct libexec_command *cmd, const char *fmt, ...) +{ LIBEXEC_VA_IMPL__(fmt, libexec_vputenvf_prepend, cmd, fmt); } /** * Put an environment variable into a command's environment, @@ -1401,7 +1665,9 @@ LIBEXEC_PRINTF__(2) int libexec_putenvf_prepend(struct libexec_command *, const * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory to modify the command's environment */ -int libexec_setenv_prepend(struct libexec_command *, const char *, const char *); +inline int +libexec_setenv_prepend(struct libexec_command *cmd, const char *name, const char *value) +{ return libexec_setenv(cmd, LIBEXEC_PREPEND, name, value); } /** * Put an environment variable into a command's environment, @@ -1428,7 +1694,9 @@ int libexec_setenv_prepend(struct libexec_command *, const char *, const char *) * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_prepend(struct libexec_command *, const char *, const char *, va_list); +LIBEXEC_VPRINTF__(3) inline int +libexec_vsetenvf_prepend(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) +{ return libexec_vsetenvf(cmd, LIBEXEC_PREPEND, name, value_fmt, args); } /** * Put an environment variable into a command's environment, @@ -1455,7 +1723,9 @@ LIBEXEC_VPRINTF__(3) int libexec_vsetenvf_prepend(struct libexec_command *, cons * @throws EILSEQ According to printf(3) * @throws EOVERFLOW According to printf(3) */ -LIBEXEC_PRINTF__(3) int libexec_setenvf_prepend(struct libexec_command *, const char *, const char *, ...); +LIBEXEC_PRINTF__(3) inline int +libexec_setenvf_prepend(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) +{ LIBEXEC_VA_IMPL__(value_fmt, libexec_vsetenvf_prepend, cmd, name, value_fmt); } /** @@ -1490,7 +1760,7 @@ LIBEXEC_PRINTF__(3) int libexec_setenvf_prepend(struct libexec_command *, const * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory */ -int libexec_pipe_commandsvn(enum libexec_pipe how, struct libexec_command *const *cmds, size_t n); +int libexec_pipe_commandsvn(enum libexec_pipe, struct libexec_command *const *, size_t); /** * Put a series of commands in a pipeline, piping each's @@ -1523,7 +1793,18 @@ int libexec_pipe_commandsvn(enum libexec_pipe how, struct libexec_command *const * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory */ -int libexec_pipe_commandsv(enum libexec_pipe how, struct libexec_command *const *cmds); +inline int +libexec_pipe_commandsv(enum libexec_pipe how, struct libexec_command *const *cmds) +{ + size_t n = 0; + if (!cmds) { + errno = EINVAL; + return -1; + } + while (cmds[n]) + n++; + return libexec_pipe_commandsvn(how, cmds, n); +} /** * Put a series of commands in a pipeline, piping each's @@ -1556,7 +1837,7 @@ int libexec_pipe_commandsv(enum libexec_pipe how, struct libexec_command *const * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory */ -int libexec_vpipe_commands(enum libexec_pipe how, va_list args); +int libexec_vpipe_commands(enum libexec_pipe, va_list); /** * Put a series of commands in a pipeline, piping each's @@ -1589,7 +1870,9 @@ int libexec_vpipe_commands(enum libexec_pipe how, va_list args); * @throws EINVAL Invalid argument input * @throws ENOMEM Failed to allocate enough memory */ -int libexec_pipe_commands(enum libexec_pipe how, ...); +inline int +libexec_pipe_commands(enum libexec_pipe how, ...) +{ LIBEXEC_VA_IMPL__(how, libexec_vpipe_commands, how); } int libexec_get_documents(struct libexec_command *cmd, struct libexec_document **docsp, size_t *ndocsp, int flags); @@ -1627,7 +1910,8 @@ int libexec_run_pipeline(int (*on_alien_epoll)(int alien_epoll, uint32_t events, LIBEXEC_RUN_PIPELINE_NO_OUTPUT int libexec_vrun(struct libexec_result *out, va_list args); -int libexec_run(struct libexec_result *out, ...); +inline int libexec_run(struct libexec_result *out, ...) +{ LIBEXEC_VA_IMPL__(out, libexec_vrun, out); } #endif diff --git a/libexec_clear_environ.c b/libexec_clear_environ.c index 9f09561..df0c7ce 100644 --- a/libexec_clear_environ.c +++ b/libexec_clear_environ.c @@ -38,7 +38,7 @@ check_clear_from_default(void) struct libexec_command cmd, ref; char **old_env; - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); ASSERT_IS_NULL(cmd.environ); diff --git a/libexec_construct_command.c b/libexec_construct_command.c index 36b18f9..6fc91dc 100644 --- a/libexec_construct_command.c +++ b/libexec_construct_command.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_construct_command(struct libexec_command *cmd, const char *fmt, ...) -{ - int ret; - va_list args; - va_start(args, fmt); - ret = libexec_vconstruct_command(cmd, fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_construct_command(struct libexec_command *, const char *, ...); #else diff --git a/libexec_getenv.c b/libexec_getenv.c index 5099b28..cc93341 100644 --- a/libexec_getenv.c +++ b/libexec_getenv.c @@ -37,7 +37,7 @@ main(void) struct libexec_command cmd, ref; char **env; - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); env = environ; diff --git a/libexec_getenv_last.c b/libexec_getenv_last.c index 1de318e..f19465a 100644 --- a/libexec_getenv_last.c +++ b/libexec_getenv_last.c @@ -38,7 +38,7 @@ main(void) struct libexec_command cmd, ref; char **env; - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); env = environ; diff --git a/libexec_input_text_copy.c b/libexec_input_text_copy.c index da12bfd..cabf809 100644 --- a/libexec_input_text_copy.c +++ b/libexec_input_text_copy.c @@ -3,15 +3,7 @@ #ifndef TEST -int -libexec_input_text_copy(struct libexec_command *cmd, int fd, const char *text) -{ - if (!text) { - errno = EINVAL; - return -1; - } - return libexec_input_data_copy(cmd, fd, text, strlen(text)); -} +extern inline int libexec_input_text_copy(struct libexec_command *, int, const char *); #else diff --git a/libexec_input_text_gift.c b/libexec_input_text_gift.c index 94b09c3..05dc5ef 100644 --- a/libexec_input_text_gift.c +++ b/libexec_input_text_gift.c @@ -3,15 +3,7 @@ #ifndef TEST -int -libexec_input_text_gift(struct libexec_command *cmd, int fd, char *text) -{ - if (!text) { - errno = EINVAL; - return -1; - } - return libexec_input_data_gift(cmd, fd, text, strlen(text)); -} +extern inline int libexec_input_text_gift(struct libexec_command *, int, char *); #else diff --git a/libexec_open.c b/libexec_open.c index 7aa2698..77d05ed 100644 --- a/libexec_open.c +++ b/libexec_open.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_open(struct libexec_command *cmd, int fd, const char *file, int flags, mode_t mode) -{ - return libexec_openat(cmd, fd, AT_FDCWD, file, flags, mode); -} +extern inline int libexec_open(struct libexec_command *, int, const char *, int, mode_t); #else diff --git a/libexec_openat2.c b/libexec_openat2.c index ff97bff..417a7e5 100644 --- a/libexec_openat2.c +++ b/libexec_openat2.c @@ -4,7 +4,7 @@ int -libexec_openat2(struct libexec_command *cmd, int fd, int dirfd, const char *file, struct open_how *how, size_t size) +libexec_openat2(struct libexec_command *cmd, int fd, int dirfd, const char *file, STRUCT_OPEN_HOW *how, size_t size) { #if defined(__linux__) diff --git a/libexec_pipe_commands.c b/libexec_pipe_commands.c index 580bf86..2dfd3bb 100644 --- a/libexec_pipe_commands.c +++ b/libexec_pipe_commands.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_pipe_commands(enum libexec_pipe how, ...) -{ - int ret; - va_list args; - va_start(args, how); - ret = libexec_vpipe_commands(how, args); - va_end(args); - return ret; -} +extern inline int libexec_pipe_commands(enum libexec_pipe, ...); #else diff --git a/libexec_pipe_commandsv.c b/libexec_pipe_commandsv.c index ee96b7d..c1df257 100644 --- a/libexec_pipe_commandsv.c +++ b/libexec_pipe_commandsv.c @@ -3,18 +3,7 @@ #ifndef TEST -int -libexec_pipe_commandsv(enum libexec_pipe how, struct libexec_command *const *cmds) -{ - size_t n = 0; - if (!cmds) { - errno = EINVAL; - return -1; - } - while (cmds[n]) - n++; - return libexec_pipe_commandsvn(how, cmds, n); -} +extern inline int libexec_pipe_commandsv(enum libexec_pipe, struct libexec_command *const *); #else diff --git a/libexec_pipe_commandsvn.c b/libexec_pipe_commandsvn.c index d6aa1d5..8b0dbe2 100644 --- a/libexec_pipe_commandsvn.c +++ b/libexec_pipe_commandsvn.c @@ -59,6 +59,9 @@ pipe_two_commands(enum libexec_pipe how, struct libexec_command *left, struct li } right->plumings[right->nplumings - 1].type = LIBEXEC_PLUMING_PIPE; + /* TOOD should `fds[0]` be closed from `left`, and `fds[1]` close from `right` + * (isn't this a problem in general with LIBEXEC_PLUMING_PIPE) */ + /* pluming shall be at the front */ tmp = left->plumings[left->nplumings - 1]; memcpy(&left->plumings[1], &left->plumings[0], (left->nplumings - 1) * sizeof(*left->plumings)); diff --git a/libexec_put_arguments.c b/libexec_put_arguments.c index 45f7f1a..54af507 100644 --- a/libexec_put_arguments.c +++ b/libexec_put_arguments.c @@ -3,18 +3,7 @@ #ifndef TEST -int -libexec_put_arguments(struct libexec_command *cmd, const char *const *args) -{ - size_t n = 0; - if (!args) { - errno = EINVAL; - return -1; - } - while (args[n]) - n += 1; - return libexec_put_argumentsn(cmd, args, n); -} +extern inline int libexec_put_arguments(struct libexec_command *, const char *const *); #else diff --git a/libexec_putenv.c b/libexec_putenv.c index 366f5fb..c72a153 100644 --- a/libexec_putenv.c +++ b/libexec_putenv.c @@ -79,12 +79,9 @@ libexec_putenv(struct libexec_command *cmd, enum libexec_insert_mode how, const } if (how == LIBEXEC_NOREPLACE || !strcmp(env[i], string)) { - if (!cmd->environ) { - if (libexec_copy_environ(cmd, NULL)) { - free(copy); + if (!cmd->environ) + if (libexec_copy_environ(cmd, NULL)) return -1; - } - } return 0; } if (how == LIBEXEC_NOCLOBBER) @@ -124,7 +121,7 @@ main(void) struct libexec_command cmd, ref; - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; diff --git a/libexec_putenv_append.c b/libexec_putenv_append.c index bb45e1c..028b54d 100644 --- a/libexec_putenv_append.c +++ b/libexec_putenv_append.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_putenv_append(struct libexec_command *cmd, const char *string) -{ - return libexec_putenv(cmd, LIBEXEC_APPEND, string); -} +extern inline int libexec_putenv_append(struct libexec_command *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenv_append(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); ASSERT_ZERO(libexec_clear_environ(&cmd)); @@ -121,7 +117,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenv_noclobber.c b/libexec_putenv_noclobber.c index e9cf3ed..1c21a55 100644 --- a/libexec_putenv_noclobber.c +++ b/libexec_putenv_noclobber.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_putenv_noclobber(struct libexec_command *cmd, const char *string) -{ - return libexec_putenv(cmd, LIBEXEC_NOCLOBBER, string); -} +extern inline int libexec_putenv_noclobber(struct libexec_command *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenv_noclobber(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -97,7 +93,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenv_noreplace.c b/libexec_putenv_noreplace.c index b33708a..e85db00 100644 --- a/libexec_putenv_noreplace.c +++ b/libexec_putenv_noreplace.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_putenv_noreplace(struct libexec_command *cmd, const char *string) -{ - return libexec_putenv(cmd, LIBEXEC_NOREPLACE, string); -} +extern inline int libexec_putenv_noreplace(struct libexec_command *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenv_noreplace(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -95,7 +91,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenv_prepend.c b/libexec_putenv_prepend.c index 840978d..1ea6801 100644 --- a/libexec_putenv_prepend.c +++ b/libexec_putenv_prepend.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_putenv_prepend(struct libexec_command *cmd, const char *string) -{ - return libexec_putenv(cmd, LIBEXEC_PREPEND, string); -} +extern inline int libexec_putenv_prepend(struct libexec_command *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenv_prepend(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); ASSERT_ZERO(libexec_clear_environ(&cmd)); @@ -121,7 +117,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenv_replace.c b/libexec_putenv_replace.c index c62ad01..8f46451 100644 --- a/libexec_putenv_replace.c +++ b/libexec_putenv_replace.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_putenv_replace(struct libexec_command *cmd, const char *string) -{ - return libexec_putenv(cmd, LIBEXEC_REPLACE, string); -} +extern inline int libexec_putenv_replace(struct libexec_command *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenv_replace(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -95,7 +91,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenvf.c b/libexec_putenvf.c index 7729fc4..73cd4d2 100644 --- a/libexec_putenvf.c +++ b/libexec_putenvf.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_putenvf(struct libexec_command *cmd, enum libexec_insert_mode how, const char *fmt, ...) -{ - int ret; - va_list args; - va_start(args, fmt); - ret = libexec_vputenvf(cmd, how, fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_putenvf(struct libexec_command *, enum libexec_insert_mode, const char *, ...); #else @@ -30,7 +21,7 @@ main(void) struct libexec_command cmd, ref; - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; diff --git a/libexec_putenvf_append.c b/libexec_putenvf_append.c index 8ceb806..bdfa7fc 100644 --- a/libexec_putenvf_append.c +++ b/libexec_putenvf_append.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_putenvf_append(struct libexec_command *cmd, const char *fmt, ...) -{ - int ret; - va_list args; - va_start(args, fmt); - ret = libexec_vputenvf_append(cmd, fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_putenvf_append(struct libexec_command *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenvf_append(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); ASSERT_ZERO(libexec_clear_environ(&cmd)); @@ -126,7 +117,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenvf_noclobber.c b/libexec_putenvf_noclobber.c index 988e381..9ab1509 100644 --- a/libexec_putenvf_noclobber.c +++ b/libexec_putenvf_noclobber.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_putenvf_noclobber(struct libexec_command *cmd, const char *fmt, ...) -{ - int ret; - va_list args; - va_start(args, fmt); - ret = libexec_vputenvf_noclobber(cmd, fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_putenvf_noclobber(struct libexec_command *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenvf_noclobber(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -102,7 +93,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenvf_noreplace.c b/libexec_putenvf_noreplace.c index bcde8a2..f1b4140 100644 --- a/libexec_putenvf_noreplace.c +++ b/libexec_putenvf_noreplace.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_putenvf_noreplace(struct libexec_command *cmd, const char *fmt, ...) -{ - int ret; - va_list args; - va_start(args, fmt); - ret = libexec_vputenvf_noreplace(cmd, fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_putenvf_noreplace(struct libexec_command *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenvf_noreplace(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -100,7 +91,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenvf_prepend.c b/libexec_putenvf_prepend.c index 2e51a72..0bccbfe 100644 --- a/libexec_putenvf_prepend.c +++ b/libexec_putenvf_prepend.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_putenvf_prepend(struct libexec_command *cmd, const char *fmt, ...) -{ - int ret; - va_list args; - va_start(args, fmt); - ret = libexec_vputenvf_prepend(cmd, fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_putenvf_prepend(struct libexec_command *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenvf_prepend(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); ASSERT_ZERO(libexec_clear_environ(&cmd)); @@ -126,7 +117,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_putenvf_replace.c b/libexec_putenvf_replace.c index 7cfd773..1ee0f52 100644 --- a/libexec_putenvf_replace.c +++ b/libexec_putenvf_replace.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_putenvf_replace(struct libexec_command *cmd, const char *fmt, ...) -{ - int ret; - va_list args; - va_start(args, fmt); - ret = libexec_vputenvf_replace(cmd, fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_putenvf_replace(struct libexec_command *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_putenvf_replace(NULL, "X=Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -100,7 +91,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_run.c b/libexec_run.c index ca1f629..939365d 100644 --- a/libexec_run.c +++ b/libexec_run.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_run(struct libexec_result *out, ...) -{ - int ret; - va_list args; - va_start(args, out); - ret = libexec_vrun(out, args); - va_end(args); - return ret; -} +extern inline int libexec_run(struct libexec_result *, ...); #else diff --git a/libexec_setenv.c b/libexec_setenv.c index 47bc8e9..9d0dc77 100644 --- a/libexec_setenv.c +++ b/libexec_setenv.c @@ -36,7 +36,7 @@ main(void) struct libexec_command cmd, ref; int i; - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; diff --git a/libexec_setenv_append.c b/libexec_setenv_append.c index a35207d..eb90c0a 100644 --- a/libexec_setenv_append.c +++ b/libexec_setenv_append.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_setenv_append(struct libexec_command *cmd, const char *name, const char *value) -{ - return libexec_setenv(cmd, LIBEXEC_APPEND, name, value); -} +extern inline int libexec_setenv_append(struct libexec_command *, const char *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenv_append(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -118,7 +114,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenv_noclobber.c b/libexec_setenv_noclobber.c index 6478a9e..2e9c1e7 100644 --- a/libexec_setenv_noclobber.c +++ b/libexec_setenv_noclobber.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_setenv_noclobber(struct libexec_command *cmd, const char *name, const char *value) -{ - return libexec_setenv(cmd, LIBEXEC_NOCLOBBER, name, value); -} +extern inline int libexec_setenv_noclobber(struct libexec_command *, const char *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenv_noclobber(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -102,7 +98,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenv_noreplace.c b/libexec_setenv_noreplace.c index 26339e8..35aef28 100644 --- a/libexec_setenv_noreplace.c +++ b/libexec_setenv_noreplace.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_setenv_noreplace(struct libexec_command *cmd, const char *name, const char *value) -{ - return libexec_setenv(cmd, LIBEXEC_NOREPLACE, name, value); -} +extern inline int libexec_setenv_noreplace(struct libexec_command *, const char *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenv_noreplace(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -100,7 +96,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenv_prepend.c b/libexec_setenv_prepend.c index 9c7a02b..b661abd 100644 --- a/libexec_setenv_prepend.c +++ b/libexec_setenv_prepend.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_setenv_prepend(struct libexec_command *cmd, const char *name, const char *value) -{ - return libexec_setenv(cmd, LIBEXEC_PREPEND, name, value); -} +extern inline int libexec_setenv_prepend(struct libexec_command *, const char *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenv_prepend(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -118,7 +114,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenv_replace.c b/libexec_setenv_replace.c index f8191c1..edbdde3 100644 --- a/libexec_setenv_replace.c +++ b/libexec_setenv_replace.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_setenv_replace(struct libexec_command *cmd, const char *name, const char *value) -{ - return libexec_setenv(cmd, LIBEXEC_REPLACE, name, value); -} +extern inline int libexec_setenv_replace(struct libexec_command *, const char *, const char *); #else @@ -23,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenv_replace(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -100,7 +96,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenvf.c b/libexec_setenvf.c index 7589dca..d7af3f8 100644 --- a/libexec_setenvf.c +++ b/libexec_setenvf.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_setenvf(struct libexec_command *cmd, enum libexec_insert_mode how, const char *name, const char *value_fmt, ...) -{ - int ret; - va_list args; - va_start(args, value_fmt); - ret = libexec_vsetenvf(cmd, how, name, value_fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_setenvf(struct libexec_command *, enum libexec_insert_mode, const char *, const char *, ...); #else @@ -30,7 +21,7 @@ main(void) struct libexec_command cmd, ref; - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; diff --git a/libexec_setenvf_append.c b/libexec_setenvf_append.c index b0b6a4e..9c89a0e 100644 --- a/libexec_setenvf_append.c +++ b/libexec_setenvf_append.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_setenvf_append(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) -{ - int ret; - va_list args; - va_start(args, value_fmt); - ret = libexec_vsetenvf_append(cmd, name, value_fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_setenvf_append(struct libexec_command *, const char *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenvf_append(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -123,7 +114,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenvf_noclobber.c b/libexec_setenvf_noclobber.c index f40b367..d851239 100644 --- a/libexec_setenvf_noclobber.c +++ b/libexec_setenvf_noclobber.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_setenvf_noclobber(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) -{ - int ret; - va_list args; - va_start(args, value_fmt); - ret = libexec_vsetenvf_noclobber(cmd, name, value_fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_setenvf_noclobber(struct libexec_command *, const char *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenvf_noclobber(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -107,7 +98,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenvf_noreplace.c b/libexec_setenvf_noreplace.c index 9480c7f..0385fff 100644 --- a/libexec_setenvf_noreplace.c +++ b/libexec_setenvf_noreplace.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_setenvf_noreplace(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) -{ - int ret; - va_list args; - va_start(args, value_fmt); - ret = libexec_vsetenvf_noreplace(cmd, name, value_fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_setenvf_noreplace(struct libexec_command *, const char *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenvf_noreplace(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -105,7 +96,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenvf_prepend.c b/libexec_setenvf_prepend.c index 3a8a197..a77acf1 100644 --- a/libexec_setenvf_prepend.c +++ b/libexec_setenvf_prepend.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_setenvf_prepend(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) -{ - int ret; - va_list args; - va_start(args, value_fmt); - ret = libexec_vsetenvf_prepend(cmd, name, value_fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_setenvf_prepend(struct libexec_command *, const char *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenvf_prepend(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -123,7 +114,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_setenvf_replace.c b/libexec_setenvf_replace.c index 9be28db..e1a38aa 100644 --- a/libexec_setenvf_replace.c +++ b/libexec_setenvf_replace.c @@ -3,16 +3,7 @@ #ifndef TEST -int -libexec_setenvf_replace(struct libexec_command *cmd, const char *name, const char *value_fmt, ...) -{ - int ret; - va_list args; - va_start(args, value_fmt); - ret = libexec_vsetenvf_replace(cmd, name, value_fmt, args); - va_end(args); - return ret; -} +extern inline int libexec_setenvf_replace(struct libexec_command *, const char *, const char *, ...); #else @@ -28,7 +19,7 @@ main(void) ASSERT_EQ_INT(libexec_setenvf_replace(NULL, "X", "Y"), -1); ASSERT_EQ_INT(errno, EINVAL); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; memcpy(&ref, &cmd, sizeof(cmd)); errno = 0; @@ -105,7 +96,7 @@ main(void) libexec_destroy_command(&cmd); - libexec_init_command(&cmd); + cmd = LIBEXEC_COMMAND_INIT; env = environ; environ = calloc(2, sizeof(*environ)); ASSERT_NOT_NULL(environ); diff --git a/libexec_unsetenv.c b/libexec_unsetenv.c index 48ec645..f6a71e2 100644 --- a/libexec_unsetenv.c +++ b/libexec_unsetenv.c @@ -31,7 +31,7 @@ libexec_unsetenv(struct libexec_command *cmd, const char *name) return -1; env = cmd->environ; } - free(env); + free(env[i]); memmove(&env[i], &env[i + 1], (n - i - 1) * sizeof(*env)); n--; } else { diff --git a/libexec_vputenvf_append.c b/libexec_vputenvf_append.c index ca0d564..2ce4699 100644 --- a/libexec_vputenvf_append.c +++ b/libexec_vputenvf_append.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vputenvf_append(struct libexec_command *cmd, const char *fmt, va_list args) -{ - return libexec_vputenvf(cmd, LIBEXEC_APPEND, fmt, args); -} +extern inline int libexec_vputenvf_append(struct libexec_command *, const char *, va_list); #else diff --git a/libexec_vputenvf_noclobber.c b/libexec_vputenvf_noclobber.c index 61a1e74..77ba2cd 100644 --- a/libexec_vputenvf_noclobber.c +++ b/libexec_vputenvf_noclobber.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vputenvf_noclobber(struct libexec_command *cmd, const char *fmt, va_list args) -{ - return libexec_vputenvf(cmd, LIBEXEC_NOCLOBBER, fmt, args); -} +extern inline int libexec_vputenvf_noclobber(struct libexec_command *, const char *, va_list); #else diff --git a/libexec_vputenvf_noreplace.c b/libexec_vputenvf_noreplace.c index 6998742..8c858dd 100644 --- a/libexec_vputenvf_noreplace.c +++ b/libexec_vputenvf_noreplace.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vputenvf_noreplace(struct libexec_command *cmd, const char *fmt, va_list args) -{ - return libexec_vputenvf(cmd, LIBEXEC_NOREPLACE, fmt, args); -} +extern inline int libexec_vputenvf_noreplace(struct libexec_command *, const char *, va_list); #else diff --git a/libexec_vputenvf_prepend.c b/libexec_vputenvf_prepend.c index e1b9614..b235962 100644 --- a/libexec_vputenvf_prepend.c +++ b/libexec_vputenvf_prepend.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vputenvf_prepend(struct libexec_command *cmd, const char *fmt, va_list args) -{ - return libexec_vputenvf(cmd, LIBEXEC_PREPEND, fmt, args); -} +extern inline int libexec_vputenvf_prepend(struct libexec_command *, const char *, va_list); #else diff --git a/libexec_vputenvf_replace.c b/libexec_vputenvf_replace.c index 10c22d2..8cc8524 100644 --- a/libexec_vputenvf_replace.c +++ b/libexec_vputenvf_replace.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vputenvf_replace(struct libexec_command *cmd, const char *fmt, va_list args) -{ - return libexec_vputenvf(cmd, LIBEXEC_REPLACE, fmt, args); -} +extern inline int libexec_vputenvf_replace(struct libexec_command *, const char *, va_list); #else diff --git a/libexec_vrun.c b/libexec_vrun.c index 99822c2..00a5f82 100644 --- a/libexec_vrun.c +++ b/libexec_vrun.c @@ -50,7 +50,7 @@ new_command: CMD = malloc(sizeof(CMD)); if (!CMD) goto fail; - libexec_init_command(CMD); + *CMD = LIBEXEC_COMMAND_INIT; fmt = va_arg(args, const char *); if (libexec_vconstruct_command(CMD, fmt, args)) goto fail; diff --git a/libexec_vsetenvf_append.c b/libexec_vsetenvf_append.c index c00f8b6..fd8ef36 100644 --- a/libexec_vsetenvf_append.c +++ b/libexec_vsetenvf_append.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vsetenvf_append(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) -{ - return libexec_vsetenvf(cmd, LIBEXEC_APPEND, name, value_fmt, args); -} +extern inline int libexec_vsetenvf_append(struct libexec_command *, const char *, const char *, va_list); #else diff --git a/libexec_vsetenvf_noclobber.c b/libexec_vsetenvf_noclobber.c index 5164e8b..0c85856 100644 --- a/libexec_vsetenvf_noclobber.c +++ b/libexec_vsetenvf_noclobber.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vsetenvf_noclobber(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) -{ - return libexec_vsetenvf(cmd, LIBEXEC_NOCLOBBER, name, value_fmt, args); -} +extern inline int libexec_vsetenvf_noclobber(struct libexec_command *, const char *, const char *, va_list); #else diff --git a/libexec_vsetenvf_noreplace.c b/libexec_vsetenvf_noreplace.c index 1fb1476..6910bf3 100644 --- a/libexec_vsetenvf_noreplace.c +++ b/libexec_vsetenvf_noreplace.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vsetenvf_noreplace(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) -{ - return libexec_vsetenvf(cmd, LIBEXEC_NOREPLACE, name, value_fmt, args); -} +extern inline int libexec_vsetenvf_noreplace(struct libexec_command *, const char *, const char *, va_list); #else diff --git a/libexec_vsetenvf_prepend.c b/libexec_vsetenvf_prepend.c index 63daaae..ad09ce2 100644 --- a/libexec_vsetenvf_prepend.c +++ b/libexec_vsetenvf_prepend.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vsetenvf_prepend(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) -{ - return libexec_vsetenvf(cmd, LIBEXEC_PREPEND, name, value_fmt, args); -} +extern inline int libexec_vsetenvf_prepend(struct libexec_command *, const char *, const char *, va_list); #else diff --git a/libexec_vsetenvf_replace.c b/libexec_vsetenvf_replace.c index d1e8788..6cbd04b 100644 --- a/libexec_vsetenvf_replace.c +++ b/libexec_vsetenvf_replace.c @@ -3,11 +3,7 @@ #ifndef TEST -int -libexec_vsetenvf_replace(struct libexec_command *cmd, const char *name, const char *value_fmt, va_list args) -{ - return libexec_vsetenvf(cmd, LIBEXEC_REPLACE, name, value_fmt, args); -} +extern inline int libexec_vsetenvf_replace(struct libexec_command *, const char *, const char *, va_list); #else |