/* * OpenVPN -- An application to securely tunnel IP networks * over a single TCP/UDP port, with support for SSL/TLS-based * session authentication and key exchange, * packet encryption, packet authentication, and * packet compression. * * Copyright (C) 2002-2018 OpenVPN Inc * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * * A printf-like function (that only recognizes a subset of standard printf * format operators) that prints arguments to an argv list instead * of a standard string. This is used to build up argv arrays for passing * to execve. */ #ifndef ARGV_H #define ARGV_H #include "buffer.h" struct argv { size_t capacity; size_t argc; char **argv; }; struct argv argv_new(void); void argv_reset(struct argv *a); const char *argv_str(const struct argv *a, struct gc_arena *gc, const unsigned int flags); struct argv argv_insert_head(const struct argv *a, const char *head); void argv_msg(const int msglev, const struct argv *a); void argv_msg_prefix(const int msglev, const struct argv *a, const char *prefix); void argv_parse_cmd(struct argv *a, const char *s); void argv_printf(struct argv *a, const char *format, ...) #ifdef __GNUC__ #if __USE_MINGW_ANSI_STDIO __attribute__ ((format(gnu_printf, 2, 3))) #else __attribute__ ((format(__printf__, 2, 3))) #endif #endif ; void argv_printf_cat(struct argv *a, const char *format, ...) #ifdef __GNUC__ #if __USE_MINGW_ANSI_STDIO __attribute__ ((format(gnu_printf, 2, 3))) #else __attribute__ ((format(__printf__, 2, 3))) #endif #endif ; #endif /* ifndef ARGV_H */