diff options
author | Stefan Metzmacher <metze@samba.org> | 2004-02-12 14:21:44 +0000 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2004-02-12 14:21:44 +0000 |
commit | 6647ff74306dd6985c32c75b177707b5c60b23b3 (patch) | |
tree | 0f3536681c51fd7cd8df162e19e84604008853a7 /source4 | |
parent | e46d297083c6e656774d94bb8153334836a27937 (diff) | |
download | samba-6647ff74306dd6985c32c75b177707b5c60b23b3.tar.gz samba-6647ff74306dd6985c32c75b177707b5c60b23b3.tar.bz2 samba-6647ff74306dd6985c32c75b177707b5c60b23b3.zip |
move -lpopt replacement code from source/popt/* to source/lib/popt/*
metze
(This used to be commit 9d1018557fdc51cada1ad082d85c0dc48e1b3072)
Diffstat (limited to 'source4')
-rw-r--r-- | source4/configure.in | 2 | ||||
-rw-r--r-- | source4/lib/popt/config.m4 | 6 | ||||
-rw-r--r-- | source4/popt/.cvsignore | 8 | ||||
-rw-r--r-- | source4/popt/CHANGES | 43 | ||||
-rw-r--r-- | source4/popt/COPYING | 22 | ||||
-rw-r--r-- | source4/popt/README | 18 | ||||
-rw-r--r-- | source4/popt/config.m4 | 40 | ||||
-rw-r--r-- | source4/popt/dummy.in | 0 | ||||
-rw-r--r-- | source4/popt/findme.c | 46 | ||||
-rw-r--r-- | source4/popt/findme.h | 10 | ||||
-rw-r--r-- | source4/popt/popt.c | 782 | ||||
-rw-r--r-- | source4/popt/popt.h | 130 | ||||
-rw-r--r-- | source4/popt/poptconfig.c | 142 | ||||
-rw-r--r-- | source4/popt/popthelp.c | 301 | ||||
-rw-r--r-- | source4/popt/poptint.h | 71 | ||||
-rw-r--r-- | source4/popt/poptparse.c | 102 | ||||
-rw-r--r-- | source4/popt/system.h | 53 |
17 files changed, 4 insertions, 1772 deletions
diff --git a/source4/configure.in b/source4/configure.in index 38cdd53c10..4bf5a052ed 100644 --- a/source4/configure.in +++ b/source4/configure.in @@ -1951,7 +1951,6 @@ fi AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT]) sinclude(nsswitch/config.m4) -sinclude(popt/config.m4) dnl exclude these modules AC_ARG_WITH(exclude-modules, @@ -1983,6 +1982,7 @@ AC_ARG_WITH(static-modules, done fi ]) +sinclude(lib/popt/config.m4) sinclude(lib/iconv.m4) sinclude(lib/basic.m4) sinclude(libcli/config.m4) diff --git a/source4/lib/popt/config.m4 b/source4/lib/popt/config.m4 index 0be7d308c7..6ac5d91079 100644 --- a/source4/lib/popt/config.m4 +++ b/source4/lib/popt/config.m4 @@ -25,9 +25,9 @@ fi AC_MSG_CHECKING(whether to use included popt) if test x"$INCLUDED_POPT" != x"no"; then - TMP_LIBPOPT_OBJS="popt/findme.o popt/popt.o popt/poptconfig.o \ - popt/popthelp.o popt/poptparse.o" - CPPFLAGS="$CPPFLAGS -I$srcdir/popt" + TMP_LIBPOPT_OBJS="lib/popt/findme.o lib/popt/popt.o lib/popt/poptconfig.o \ + lib/popt/popthelp.o lib/popt/poptparse.o" + CPPFLAGS="$CPPFLAGS -I$srcdir/lib/popt" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) diff --git a/source4/popt/.cvsignore b/source4/popt/.cvsignore deleted file mode 100644 index 86b08b58d2..0000000000 --- a/source4/popt/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -ID -Makefile -config.cache -config.h -config.log -config.status -rsync -zlib/dummy diff --git a/source4/popt/CHANGES b/source4/popt/CHANGES deleted file mode 100644 index b6ab2aa308..0000000000 --- a/source4/popt/CHANGES +++ /dev/null @@ -1,43 +0,0 @@ -1.3 -> - - heavy dose of const's - - poptParseArgvString() now NULL terminates the list - -1.2.3 -> 1.3 - - added support for single - - - misc bug fixes - - portability improvements - -1.2.2 -> 1.2.3 - - fixed memset() in help message generation (Dale Hawkins) - - added extern "C" stuff to popt.h for C++ compilers (Dale Hawkins) - - const'ified poptParseArgvString (Jeff Garzik) - -1.2.1 -> 1.2.2 - - fixed bug in chaind alias happens which seems to have only - affected --triggers in rpm - - added POPT_ARG_VAL - - popt.3 installed by default - -1.2 -> 1.2.1 - - added POPT_ARG_INTL_DOMAIN (Elliot Lee) - - updated Makefile's to be more GNUish (Elliot Lee) - -1.1 -> 1.2 - - added popt.3 man page (Robert Lynch) - - don't use mmap anymore (its lack of portability isn't worth the - trouble) - - added test script - - added support for exec - - removed support for *_POPT_ALIASES env variable -- it was a bad - idea - - reorganized into multiple source files - - added automatic help generation, POPT_AUTOHELP - - added table callbacks - - added table inclusion - - updated man page for new features - - added test scripts - -1.0 -> 1.1 - - moved to autoconf (Fred Fish) - - added STRERROR replacement (Norbert Warmuth) - - added const keywords (Bruce Perens) diff --git a/source4/popt/COPYING b/source4/popt/COPYING deleted file mode 100644 index b4c7ca876c..0000000000 --- a/source4/popt/COPYING +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 1998 Red Hat Software - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. diff --git a/source4/popt/README b/source4/popt/README deleted file mode 100644 index 7fccc836ff..0000000000 --- a/source4/popt/README +++ /dev/null @@ -1,18 +0,0 @@ -This is the popt command line option parsing library. While it is similiar -to getopt(3), it contains a number of enhancements, including: - - 1) popt is fully reentrant - 2) popt can parse arbitrary argv[] style arrays while - getopt(2) makes this quite difficult - 3) popt allows users to alias command line arguments - 4) popt provides convience functions for parsting strings - into argv[] style arrays - -popt is used by rpm, the Red Hat install program, and many other Red Hat -utilities, all of which provide excellent examples of how to use popt. -Complete documentation on popt is available in popt.ps (included in this -tarball), which is excerpted with permission from the book "Linux -Application Development" by Michael K. Johnson and Erik Troan (availble -from Addison Wesley in May, 1998). - -Comments on popt should be addressed to ewt@redhat.com. diff --git a/source4/popt/config.m4 b/source4/popt/config.m4 deleted file mode 100644 index 0be7d308c7..0000000000 --- a/source4/popt/config.m4 +++ /dev/null @@ -1,40 +0,0 @@ -################################################# -# Check to see if we should use the included popt - -INCLUDED_POPT=auto -AC_ARG_WITH(included-popt, -[ --with-included-popt use bundled popt library, not from system], -[ -case "$withval" in - yes) - INCLUDED_POPT=yes - ;; - no) - INCLUDED_POPT=no - ;; -esac ], -) -if test x"$INCLUDED_POPT" != x"yes"; then - AC_CHECK_HEADERS(popt.h) - AC_CHECK_LIB_EXT(popt, TMP_LIBPOPT_LIBS, poptGetContext, [], [], INCLUDED_POPT=no) - if test x"$ac_cv_header_popt_h" = x"no"; then - INCLUDED_POPT=yes - TMP_LIBPOPT_LIBS="" - fi -fi - -AC_MSG_CHECKING(whether to use included popt) -if test x"$INCLUDED_POPT" != x"no"; then - TMP_LIBPOPT_OBJS="popt/findme.o popt/popt.o popt/poptconfig.o \ - popt/popthelp.o popt/poptparse.o" - CPPFLAGS="$CPPFLAGS -I$srcdir/popt" - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) -fi - -SMB_SUBSYSTEM(LIBPOPT,[], - [${TMP_LIBPOPT_OBJS}], - [], - [], - [${TMP_LIBPOPT_LIBS}]) diff --git a/source4/popt/dummy.in b/source4/popt/dummy.in deleted file mode 100644 index e69de29bb2..0000000000 --- a/source4/popt/dummy.in +++ /dev/null diff --git a/source4/popt/findme.c b/source4/popt/findme.c deleted file mode 100644 index f2ad05bb3f..0000000000 --- a/source4/popt/findme.c +++ /dev/null @@ -1,46 +0,0 @@ -/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING - file accompanying popt source distributions, available from - ftp://ftp.redhat.com/pub/code/popt */ - -#include "system.h" -#include "findme.h" - -const char * findProgramPath(const char * argv0) { - char * path = getenv("PATH"); - char * pathbuf; - char * start, * chptr; - char * buf, *local = NULL; - - /* If there is a / in the argv[0], it has to be an absolute - path */ - if (strchr(argv0, '/')) - return xstrdup(argv0); - - if (!path) return NULL; - - local = start = pathbuf = malloc(strlen(path) + 1); - buf = malloc(strlen(path) + strlen(argv0) + 2); - strcpy(pathbuf, path); - - chptr = NULL; - do { - if ((chptr = strchr(start, ':'))) - *chptr = '\0'; - sprintf(buf, "%s/%s", start, argv0); - - if (!access(buf, X_OK)) { - if (local) free(local); - return buf; - } - - if (chptr) - start = chptr + 1; - else - start = NULL; - } while (start && *start); - - free(buf); - if (local) free(local); - - return NULL; -} diff --git a/source4/popt/findme.h b/source4/popt/findme.h deleted file mode 100644 index 5e93963d60..0000000000 --- a/source4/popt/findme.h +++ /dev/null @@ -1,10 +0,0 @@ -/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING - file accompanying popt source distributions, available from - ftp://ftp.redhat.com/pub/code/popt */ - -#ifndef H_FINDME -#define H_FINDME - -const char * findProgramPath(const char * argv0); - -#endif diff --git a/source4/popt/popt.c b/source4/popt/popt.c deleted file mode 100644 index 9fa8650312..0000000000 --- a/source4/popt/popt.c +++ /dev/null @@ -1,782 +0,0 @@ -/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING - file accompanying popt source distributions, available from - ftp://ftp.redhat.com/pub/code/popt */ - -#include "system.h" -#include "findme.h" -#include "poptint.h" - -#ifndef HAVE_STRERROR -static char * strerror(int errno) { - extern int sys_nerr; - extern char * sys_errlist[]; - - if ((0 <= errno) && (errno < sys_nerr)) - return sys_errlist[errno]; - else - return POPT_("unknown errno"); -} -#endif - -void poptSetExecPath(poptContext con, const char * path, int allowAbsolute) { - if (con->execPath) xfree(con->execPath); - con->execPath = xstrdup(path); - con->execAbsolute = allowAbsolute; -} - -static void invokeCallbacks(poptContext con, const struct poptOption * table, - int post) { - const struct poptOption * opt = table; - poptCallbackType cb; - - while (opt->longName || opt->shortName || opt->arg) { - if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) { - invokeCallbacks(con, opt->arg, post); - } else if (((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK) && - ((!post && (opt->argInfo & POPT_CBFLAG_PRE)) || - ( post && (opt->argInfo & POPT_CBFLAG_POST)))) { - cb = (poptCallbackType)opt->arg; - cb(con, post ? POPT_CALLBACK_REASON_POST : POPT_CALLBACK_REASON_PRE, - NULL, NULL, opt->descrip); - } - opt++; - } -} - -poptContext poptGetContext(const char * name, int argc, const char ** argv, - const struct poptOption * options, int flags) { - poptContext con = malloc(sizeof(*con)); - - memset(con, 0, sizeof(*con)); - - con->os = con->optionStack; - con->os->argc = argc; - con->os->argv = argv; - con->os->argb = NULL; - - if (!(flags & POPT_CONTEXT_KEEP_FIRST)) - con->os->next = 1; /* skip argv[0] */ - - con->leftovers = calloc( (argc + 1), sizeof(char *) ); - con->options = options; - con->aliases = NULL; - con->numAliases = 0; - con->flags = flags; - con->execs = NULL; - con->numExecs = 0; - con->finalArgvAlloced = argc * 2; - con->finalArgv = calloc( con->finalArgvAlloced, sizeof(*con->finalArgv) ); - con->execAbsolute = 1; - con->arg_strip = NULL; - - if (getenv("POSIXLY_CORRECT") || getenv("POSIX_ME_HARDER")) - con->flags |= POPT_CONTEXT_POSIXMEHARDER; - - if (name) - con->appName = strcpy(malloc(strlen(name) + 1), name); - - invokeCallbacks(con, con->options, 0); - - return con; -} - -static void cleanOSE(struct optionStackEntry *os) -{ - if (os->nextArg) { - xfree(os->nextArg); - os->nextArg = NULL; - } - if (os->argv) { - xfree(os->argv); - os->argv = NULL; - } - if (os->argb) { - PBM_FREE(os->argb); - os->argb = NULL; - } -} - -void poptResetContext(poptContext con) { - int i; - - while (con->os > con->optionStack) { - cleanOSE(con->os--); - } - if (con->os->argb) { - PBM_FREE(con->os->argb); - con->os->argb = NULL; - } - con->os->currAlias = NULL; - con->os->nextCharArg = NULL; - con->os->nextArg = NULL; - con->os->next = 1; /* skip argv[0] */ - - con->numLeftovers = 0; - con->nextLeftover = 0; - con->restLeftover = 0; - con->doExec = NULL; - - for (i = 0; i < con->finalArgvCount; i++) { - if (con->finalArgv[i]) { - xfree(con->finalArgv[i]); - con->finalArgv[i] = NULL; - } - } - - con->finalArgvCount = 0; - - if (con->arg_strip) { - PBM_FREE(con->arg_strip); - con->arg_strip = NULL; - } -} - -/* Only one of longName, shortName may be set at a time */ -static int handleExec(poptContext con, char * longName, char shortName) { - int i; - - i = con->numExecs - 1; - if (longName) { - while (i >= 0 && (!con->execs[i].longName || - strcmp(con->execs[i].longName, longName))) i--; - } else { - while (i >= 0 && - con->execs[i].shortName != shortName) i--; - } - - if (i < 0) return 0; - - if (con->flags & POPT_CONTEXT_NO_EXEC) - return 1; - - if (con->doExec == NULL) { - con->doExec = con->execs + i; - return 1; - } - - /* We already have an exec to do; remember this option for next - time 'round */ - if ((con->finalArgvCount + 1) >= (con->finalArgvAlloced)) { - con->finalArgvAlloced += 10; - con->finalArgv = realloc(con->finalArgv, - sizeof(*con->finalArgv) * con->finalArgvAlloced); - } - - i = con->finalArgvCount++; - { char *s = malloc((longName ? strlen(longName) : 0) + 3); - if (longName) - sprintf(s, "--%s", longName); - else - sprintf(s, "-%c", shortName); - con->finalArgv[i] = s; - } - - return 1; -} - -/* Only one of longName, shortName may be set at a time */ -static int handleAlias(poptContext con, const char * longName, char shortName, - /*@keep@*/ const char * nextCharArg) { - int i; - - if (con->os->currAlias && con->os->currAlias->longName && longName && - !strcmp(con->os->currAlias->longName, longName)) - return 0; - if (con->os->currAlias && shortName && - shortName == con->os->currAlias->shortName) - return 0; - - i = con->numAliases - 1; - if (longName) { - while (i >= 0 && (!con->aliases[i].longName || - strcmp(con->aliases[i].longName, longName))) i--; - } else { - while (i >= 0 && - con->aliases[i].shortName != shortName) i--; - } - - if (i < 0) return 0; - - if ((con->os - con->optionStack + 1) == POPT_OPTION_DEPTH) - return POPT_ERROR_OPTSTOODEEP; - - if (nextCharArg && *nextCharArg) - con->os->nextCharArg = nextCharArg; - - con->os++; - con->os->next = 0; - con->os->stuffed = 0; - con->os->nextArg = NULL; - con->os->nextCharArg = NULL; - con->os->currAlias = con->aliases + i; - poptDupArgv(con->os->currAlias->argc, con->os->currAlias->argv, - &con->os->argc, &con->os->argv); - con->os->argb = NULL; - - return 1; -} - -static void execCommand(poptContext con) { - const char ** argv; - int pos = 0; - const char * script = con->doExec->script; - - argv = malloc(sizeof(*argv) * - (6 + con->numLeftovers + con->finalArgvCount)); - - if (!con->execAbsolute && strchr(script, '/')) return; - - if (!strchr(script, '/') && con->execPath) { - char *s = malloc(strlen(con->execPath) + strlen(script) + 2); - sprintf(s, "%s/%s", con->execPath, script); - argv[pos] = s; - } else { - argv[pos] = script; - } - pos++; - - argv[pos] = findProgramPath(con->os->argv[0]); - if (argv[pos]) pos++; - argv[pos++] = ";"; - - memcpy(argv + pos, con->finalArgv, sizeof(*argv) * con->finalArgvCount); - pos += con->finalArgvCount; - - if (con->numLeftovers) { - argv[pos++] = "--"; - memcpy(argv + pos, con->leftovers, sizeof(*argv) * con->numLeftovers); - pos += con->numLeftovers; - } - - argv[pos++] = NULL; - -#ifdef __hpux - setresuid(getuid(), getuid(),-1); -#else -/* - * XXX " ... on BSD systems setuid() should be preferred over setreuid()" - * XXX sez' Timur Bakeyev <mc@bat.ru> - * XXX from Norbert Warmuth <nwarmuth@privat.circular.de> - */ -#if defined(HAVE_SETUID) - setuid(getuid()); -#elif defined (HAVE_SETREUID) - setreuid(getuid(), getuid()); /*hlauer: not portable to hpux9.01 */ -#else - ; /* Can't drop privileges */ -#endif -#endif - - execvp(argv[0], (char *const *)argv); -} - -/*@observer@*/ static const struct poptOption * -findOption(const struct poptOption * table, const char * longName, - char shortName, - /*@out@*/ poptCallbackType * callback, /*@out@*/ const void ** callbackData, - int singleDash) -{ - const struct poptOption * opt = table; - const struct poptOption * opt2; - const struct poptOption * cb = NULL; - - /* This happens when a single - is given */ - if (singleDash && !shortName && !*longName) - shortName = '-'; - - while (opt->longName || opt->shortName || opt->arg) { - if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) { - opt2 = findOption(opt->arg, longName, shortName, callback, - callbackData, singleDash); - if (opt2) { - if (*callback && !*callbackData) - *callbackData = opt->descrip; - return opt2; - } - } else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_CALLBACK) { - cb = opt; - } else if (longName && opt->longName && - (!singleDash || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) && - !strcmp(longName, opt->longName)) { - break; - } else if (shortName && shortName == opt->shortName) { - break; - } - opt++; - } - - if (!opt->longName && !opt->shortName) return NULL; - *callbackData = NULL; - *callback = NULL; - if (cb) { - *callback = (poptCallbackType)cb->arg; - if (!(cb->argInfo & POPT_CBFLAG_INC_DATA)) - *callbackData = cb->descrip; - } - - return opt; -} - -static const char *findNextArg(poptContext con, unsigned argx, int delete) -{ - struct optionStackEntry * os = con->os; - const char * arg; - - do { - int i; - arg = NULL; - while (os->next == os->argc && os > con->optionStack) os--; - if (os->next == os->argc && os == con->optionStack) break; - for (i = os->next; i < os->argc; i++) { - if (os->argb && PBM_ISSET(i, os->argb)) continue; - if (*os->argv[i] == '-') continue; - if (--argx > 0) continue; - arg = os->argv[i]; - if (delete) { - if (os->argb == NULL) os->argb = PBM_ALLOC(os->argc); - PBM_SET(i, os->argb); - } - break; - } - if (os > con->optionStack) os--; - } while (arg == NULL); - return arg; -} - -static /*@only@*/ const char * expandNextArg(poptContext con, const char * s) -{ - const char *a; - size_t alen; - char *t, *te; - size_t tn = strlen(s) + 1; - char c; - - te = t = malloc(tn);; - while ((c = *s++) != '\0') { - switch (c) { -#if 0 /* XXX can't do this */ - case '\\': /* escape */ - c = *s++; - break; -#endif - case '!': - if (!(s[0] == '#' && s[1] == ':' && s[2] == '+')) - break; - if ((a = findNextArg(con, 1, 1)) == NULL) - break; - s += 3; - - alen = strlen(a); - tn += alen; - *te = '\0'; - t = realloc(t, tn); - te = t + strlen(t); - strncpy(te, a, alen); te += alen; - continue; - /*@notreached@*/ break; - default: - break; - } - *te++ = c; - } - *te = '\0'; - t = realloc(t, strlen(t)+1); /* XXX memory leak, hard to plug */ - return t; -} - -static void poptStripArg(poptContext con, int which) -{ - if(con->arg_strip == NULL) { - con->arg_strip = PBM_ALLOC(con->optionStack[0].argc); - } - PBM_SET(which, con->arg_strip); -} - -/* returns 'val' element, -1 on last item, POPT_ERROR_* on error */ -int poptGetNextOpt(poptContext con) -{ - const struct poptOption * opt = NULL; - int done = 0; - - /* looks a bit tricky to get rid of alloca properly in this fn */ -#if HAVE_ALLOCA_H -#define ALLOCA(x) alloca(x) -#else -#define ALLOCA(x) malloc(x) -#endif - - - while (!done) { - const char * origOptString = NULL; - poptCallbackType cb = NULL; - const void * cbData = NULL; - const char * longArg = NULL; - int canstrip = 0; - - while (!con->os->nextCharArg && con->os->next == con->os->argc - && con->os > con->optionStack) { - cleanOSE(con->os--); - } - if (!con->os->nextCharArg && con->os->next == con->os->argc) { - invokeCallbacks(con, con->options, 1); - if (con->doExec) execCommand(con); - return -1; - } - - /* Process next long option */ - if (!con->os->nextCharArg) { - char * localOptString, * optString; - int thisopt; - - if (con->os->argb && PBM_ISSET(con->os->next, con->os->argb)) { - con->os->next++; - continue; - } - thisopt=con->os->next; - origOptString = con->os->argv[con->os->next++]; - - if (con->restLeftover || *origOptString != '-') { - con->leftovers[con->numLeftovers++] = origOptString; - if (con->flags & POPT_CONTEXT_POSIXMEHARDER) - con->restLeftover = 1; - continue; - } - - /* Make a copy we can hack at */ - localOptString = optString = - strcpy(ALLOCA(strlen(origOptString) + 1), - origOptString); - - if (!optString[0]) - return POPT_ERROR_BADOPT; - - if (optString[1] == '-' && !optString[2]) { - con->restLeftover = 1; - continue; - } else { - char *oe; - int singleDash; - - optString++; - if (*optString == '-') - singleDash = 0, optString++; - else - singleDash = 1; - - /* XXX aliases with arg substitution need "--alias=arg" */ - if (handleAlias(con, optString, '\0', NULL)) - continue; - if (handleExec(con, optString, '\0')) - continue; - - /* Check for "--long=arg" option. */ - for (oe = optString; *oe && *oe != '='; oe++) - ; - if (*oe == '=') { - *oe++ = '\0'; - /* XXX longArg is mapped back to persistent storage. */ - longArg = origOptString + (oe - localOptString); - } - - opt = findOption(con->options, optString, '\0', &cb, &cbData, - singleDash); - if (!opt && !singleDash) - return POPT_ERROR_BADOPT; - } - - if (!opt) { - con->os->nextCharArg = origOptString + 1; - } else { - if(con->os == con->optionStack && - opt->argInfo & POPT_ARGFLAG_STRIP) { - canstrip = 1; - poptStripArg(con, thisopt); - } - } - } - - /* Process next short option */ - if (con->os->nextCharArg) { - origOptString = con->os->nextCharArg; - - con->os->nextCharArg = NULL; - - if (handleAlias(con, NULL, *origOptString, - origOptString + 1)) { - origOptString++; - continue; - } - if (handleExec(con, NULL, *origOptString)) - continue; - - opt = findOption(con->options, NULL, *origOptString, &cb, - &cbData, 0); - if (!opt) - return POPT_ERROR_BADOPT; - - origOptString++; - if (*origOptString) - con->os->nextCharArg = origOptString; - } - - if (opt->arg && (opt->argInfo & POPT_ARG_MASK) == POPT_ARG_NONE) { - *((int *)opt->arg) = 1; - } else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_VAL) { - if (opt->arg) - *((int *) opt->arg) = opt->val; - } else if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_NONE) { - if (con->os->nextArg) { - xfree(con->os->nextArg); - con->os->nextArg = NULL; - } - if (longArg) { - con->os->nextArg = expandNextArg(con, longArg); - } else if (con->os->nextCharArg) { - con->os->nextArg = expandNextArg(con, con->os->nextCharArg); - con->os->nextCharArg = NULL; - } else { - while (con->os->next == con->os->argc && - con->os > con->optionStack) { - cleanOSE(con->os--); - } - if (con->os->next == con->os->argc) - return POPT_ERROR_NOARG; - - /* make sure this isn't part of a short arg or the - result of an alias expansion */ - if(con->os == con->optionStack && - opt->argInfo & POPT_ARGFLAG_STRIP && - canstrip) { - poptStripArg(con, con->os->next); - } - - con->os->nextArg = expandNextArg(con, con->os->argv[con->os->next++]); - } - - if (opt->arg) { - long aLong; - char *end; - - switch (opt->argInfo & POPT_ARG_MASK) { - case POPT_ARG_STRING: - /* XXX memory leak, hard to plug */ - *((const char **) opt->arg) = xstrdup(con->os->nextArg); - break; - - case POPT_ARG_INT: - case POPT_ARG_LONG: - aLong = strtol(con->os->nextArg, &end, 0); - if (!(end && *end == '\0')) - return POPT_ERROR_BADNUMBER; - - if (aLong == LONG_MIN || aLong == LONG_MAX) - return POPT_ERROR_OVERFLOW; - if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_LONG) { - *((long *) opt->arg) = aLong; - } else { - if (aLong > INT_MAX || aLong < INT_MIN) - return POPT_ERROR_OVERFLOW; - *((int *) opt->arg) = aLong; - } - break; - - default: - fprintf(stdout, POPT_("option type (%d) not implemented in popt\n"), - opt->argInfo & POPT_ARG_MASK); - exit(EXIT_FAILURE); - } - } - } - - if (cb) - cb(con, POPT_CALLBACK_REASON_OPTION, opt, con->os->nextArg, cbData); - else if (opt->val && ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_VAL)) - done = 1; - - if ((con->finalArgvCount + 2) >= (con->finalArgvAlloced)) { - con->finalArgvAlloced += 10; - con->finalArgv = realloc(con->finalArgv, - sizeof(*con->finalArgv) * con->finalArgvAlloced); - } - - { char *s = malloc((opt->longName ? strlen(opt->longName) : 0) + 3); - if (opt->longName) - sprintf(s, "--%s", opt->longName); - else - sprintf(s, "-%c", opt->shortName); - con->finalArgv[con->finalArgvCount++] = s; - } - - if (opt->arg && (opt->argInfo & POPT_ARG_MASK) != POPT_ARG_NONE - && (opt->argInfo & POPT_ARG_MASK) != POPT_ARG_VAL) { - con->finalArgv[con->finalArgvCount++] = xstrdup(con->os->nextArg); - } - } - - return opt->val; -} - -const char * poptGetOptArg(poptContext con) { - const char * ret = con->os->nextArg; - con->os->nextArg = NULL; - return ret; -} - -const char * poptGetArg(poptContext con) { - if (con->numLeftovers == con->nextLeftover) return NULL; - return con->leftovers[con->nextLeftover++]; -} - -const char * poptPeekArg(poptContext con) { - if (con->numLeftovers == con->nextLeftover) return NULL; - return con->leftovers[con->nextLeftover]; -} - -const char ** poptGetArgs(poptContext con) { - if (con->numLeftovers == con->nextLeftover) return NULL; - - /* some apps like [like RPM ;-) ] need this NULL terminated */ - con->leftovers[con->numLeftovers] = NULL; - - return (con->leftovers + con->nextLeftover); -} - -void poptFreeContext(poptContext con) { - int i; - - poptResetContext(con); - if (con->os->argb) free(con->os->argb); - - for (i = 0; i < con->numAliases; i++) { - if (con->aliases[i].longName) xfree(con->aliases[i].longName); - free(con->aliases[i].argv); - } - - for (i = 0; i < con->numExecs; i++) { - if (con->execs[i].longName) xfree(con->execs[i].longName); - xfree(con->execs[i].script); - } - if (con->execs) xfree(con->execs); - - free(con->leftovers); - free(con->finalArgv); - if (con->appName) xfree(con->appName); - if (con->aliases) free(con->aliases); - if (con->otherHelp) xfree(con->otherHelp); - if (con->execPath) xfree(con->execPath); - if (con->arg_strip) PBM_FREE(con->arg_strip); - - free(con); -} - -int poptAddAlias(poptContext con, struct poptAlias newAlias, - /*@unused@*/ int flags) -{ - int aliasNum = con->numAliases++; - struct poptAlias * alias; - - /* SunOS won't realloc(NULL, ...) */ - if (!con->aliases) - con->aliases = malloc(sizeof(newAlias) * con->numAliases); - else - con->aliases = realloc(con->aliases, - sizeof(newAlias) * con->numAliases); - alias = con->aliases + aliasNum; - - alias->longName = (newAlias.longName) - ? strcpy(malloc(strlen(newAlias.longName) + 1), newAlias.longName) - : NULL; - alias->shortName = newAlias.shortName; - alias->argc = newAlias.argc; - alias->argv = newAlias.argv; - - return 0; -} - -const char * poptBadOption(poptContext con, int flags) { - struct optionStackEntry * os; - - if (flags & POPT_BADOPTION_NOALIAS) - os = con->optionStack; - else - os = con->os; - - return os->argv[os->next - 1]; -} - -#define POPT_ERROR_NOARG -10 -#define POPT_ERROR_BADOPT -11 -#define POPT_ERROR_OPTSTOODEEP -13 -#define POPT_ERROR_BADQUOTE -15 /* only from poptParseArgString() */ -#define POPT_ERROR_ERRNO -16 /* only from poptParseArgString() */ - -const char *poptStrerror(const int error) { - switch (error) { - case POPT_ERROR_NOARG: - return POPT_("missing argument"); - case POPT_ERROR_BADOPT: - return POPT_("unknown option"); - case POPT_ERROR_OPTSTOODEEP: - return POPT_("aliases nested too deeply"); - case POPT_ERROR_BADQUOTE: - return POPT_("error in paramter quoting"); - case POPT_ERROR_BADNUMBER: - return POPT_("invalid numeric value"); - case POPT_ERROR_OVERFLOW: - return POPT_("number too large or too small"); - case POPT_ERROR_ERRNO: - return strerror(errno); - default: - return POPT_("unknown error"); - } -} - -int poptStuffArgs(poptContext con, const char ** argv) { - int argc; - - if ((con->os - con->optionStack) == POPT_OPTION_DEPTH) - return POPT_ERROR_OPTSTOODEEP; - - for (argc = 0; argv[argc]; argc++) - ; - - con->os++; - con->os->next = 0; - con->os->nextArg = NULL; - con->os->nextCharArg = NULL; - con->os->currAlias = NULL; - poptDupArgv(argc, argv, &con->os->argc, &con->os->argv); - con->os->argb = NULL; - con->os->stuffed = 1; - - return 0; -} - -const char * poptGetInvocationName(poptContext con) { - return con->os->argv[0]; -} - -int poptStrippedArgv(poptContext con, int argc, char **argv) -{ - int i,j=1, numargs=argc; - - for(i=1; i<argc; i++) { - if(PBM_ISSET(i, con->arg_strip)) { - numargs--; - } - } - - for(i=1; i<argc; i++) { - if(PBM_ISSET(i, con->arg_strip)) { - continue; - } else { - if(j<numargs) { - argv[j++]=argv[i]; - } else { - argv[j++]='\0'; - } - } - } - - return(numargs); -} diff --git a/source4/popt/popt.h b/source4/popt/popt.h deleted file mode 100644 index c33cedaec9..0000000000 --- a/source4/popt/popt.h +++ /dev/null @@ -1,130 +0,0 @@ -/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING - file accompanying popt source distributions, available from - ftp://ftp.redhat.com/pub/code/popt */ - -#ifndef H_POPT -#define H_POPT - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdio.h> /* for FILE * */ - -#define POPT_OPTION_DEPTH 10 - -#define POPT_ARG_NONE 0 -#define POPT_ARG_STRING 1 -#define POPT_ARG_INT 2 -#define POPT_ARG_LONG 3 -#define POPT_ARG_INCLUDE_TABLE 4 /* arg points to table */ -#define POPT_ARG_CALLBACK 5 /* table-wide callback... must be - set first in table; arg points - to callback, descrip points to - callback data to pass */ -#define POPT_ARG_INTL_DOMAIN 6 /* set the translation domain - for this table and any - included tables; arg points - to the domain string */ -#define POPT_ARG_VAL 7 /* arg should take value val */ -#define POPT_ARG_MASK 0x0000FFFF -#define POPT_ARGFLAG_ONEDASH 0x80000000 /* allow -longoption */ -#define POPT_ARGFLAG_DOC_HIDDEN 0x40000000 /* don't show in help/usage */ -#define POPT_ARGFLAG_STRIP 0x20000000 /* strip this arg from argv (only applies to long args) */ -#define POPT_CBFLAG_PRE 0x80000000 /* call the callback before parse */ -#define POPT_CBFLAG_POST 0x40000000 /* call the callback after parse */ -#define POPT_CBFLAG_INC_DATA 0x20000000 /* use data from the include line, - not the subtable */ - -#define POPT_ERROR_NOARG -10 -#define POPT_ERROR_BADOPT -11 -#define POPT_ERROR_OPTSTOODEEP -13 -#define POPT_ERROR_BADQUOTE -15 /* only from poptParseArgString() */ -#define POPT_ERROR_ERRNO -16 /* only from poptParseArgString() */ -#define POPT_ERROR_BADNUMBER -17 -#define POPT_ERROR_OVERFLOW -18 - -/* poptBadOption() flags */ -#define POPT_BADOPTION_NOALIAS (1 << 0) /* don't go into an alias */ - -/* poptGetContext() flags */ -#define POPT_CONTEXT_NO_EXEC (1 << 0) /* ignore exec expansions */ -#define POPT_CONTEXT_KEEP_FIRST (1 << 1) /* pay attention to argv[0] */ -#define POPT_CONTEXT_POSIXMEHARDER (1 << 2) /* options can't follow args */ - -struct poptOption { - /*@observer@*/ /*@null@*/ const char * longName; /* may be NULL */ - char shortName; /* may be '\0' */ - int argInfo; - /*@shared@*/ /*@null@*/ void * arg; /* depends on argInfo */ - int val; /* 0 means don't return, just update flag */ - /*@shared@*/ /*@null@*/ const char * descrip; /* description for autohelp -- may be NULL */ - /*@shared@*/ /*@null@*/ const char * argDescrip; /* argument description for autohelp */ -}; - -struct poptAlias { - /*@owned@*/ /*@null@*/ const char * longName; /* may be NULL */ - char shortName; /* may be '\0' */ - int argc; - /*@owned@*/ const char ** argv; /* must be free()able */ -}; - -extern struct poptOption poptHelpOptions[]; -#define POPT_AUTOHELP { NULL, '\0', POPT_ARG_INCLUDE_TABLE, poptHelpOptions, \ - 0, "Help options", NULL }, - -typedef struct poptContext_s * poptContext; -#ifndef __cplusplus -typedef struct poptOption * poptOption; -#endif - -enum poptCallbackReason { POPT_CALLBACK_REASON_PRE, - POPT_CALLBACK_REASON_POST, - POPT_CALLBACK_REASON_OPTION }; -typedef void (*poptCallbackType)(poptContext con, - enum poptCallbackReason reason, - const struct poptOption * opt, - const char * arg, const void * data); - -/*@only@*/ poptContext poptGetContext(/*@keep@*/ const char * name, - int argc, /*@keep@*/ const char ** argv, - /*@keep@*/ const struct poptOption * options, int flags); -void poptResetContext(poptContext con); - -/* returns 'val' element, -1 on last item, POPT_ERROR_* on error */ -int poptGetNextOpt(poptContext con); -/* returns NULL if no argument is available */ -/*@observer@*/ /*@null@*/ const char * poptGetOptArg(poptContext con); -/* returns NULL if no more options are available */ -/*@observer@*/ /*@null@*/ const char * poptGetArg(poptContext con); -/*@observer@*/ /*@null@*/ const char * poptPeekArg(poptContext con); -/*@observer@*/ /*@null@*/ const char ** poptGetArgs(poptContext con); -/* returns the option which caused the most recent error */ -/*@observer@*/ const char * poptBadOption(poptContext con, int flags); -void poptFreeContext( /*@only@*/ poptContext con); -int poptStuffArgs(poptContext con, /*@keep@*/ const char ** argv); -int poptAddAlias(poptContext con, struct poptAlias alias, int flags); -int poptReadConfigFile(poptContext con, const char * fn); -/* like above, but reads /etc/popt and $HOME/.popt along with environment - vars */ -int poptReadDefaultConfig(poptContext con, int useEnv); -/* argv should be freed -- this allows ', ", and \ quoting, but ' is treated - the same as " and both may include \ quotes */ -int poptDupArgv(int argc, const char **argv, - /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr); -int poptParseArgvString(const char * s, - /*@out@*/ int * argcPtr, /*@out@*/ const char *** argvPtr); -/*@observer@*/ const char *poptStrerror(const int error); -void poptSetExecPath(poptContext con, const char * path, int allowAbsolute); -void poptPrintHelp(poptContext con, FILE * f, int flags); -void poptPrintUsage(poptContext con, FILE * f, int flags); -void poptSetOtherOptionHelp(poptContext con, const char * text); -/*@observer@*/ const char * poptGetInvocationName(poptContext con); -/* shuffles argv pointers to remove stripped args, returns new argc */ -int poptStrippedArgv(poptContext con, int argc, char **argv); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source4/popt/poptconfig.c b/source4/popt/poptconfig.c deleted file mode 100644 index eb76941363..0000000000 --- a/source4/popt/poptconfig.c +++ /dev/null @@ -1,142 +0,0 @@ -/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING - file accompanying popt source distributions, available from - ftp://ftp.redhat.com/pub/code/popt */ - -#include "system.h" -#include "poptint.h" - -static void configLine(poptContext con, char * line) { - int nameLength = strlen(con->appName); - char * opt; - struct poptAlias alias; - char * entryType; - char * longName = NULL; - char shortName = '\0'; - - if (strncmp(line, con->appName, nameLength)) return; - line += nameLength; - if (!*line || !isspace(*line)) return; - while (*line && isspace(*line)) line++; - entryType = line; - - while (!*line || !isspace(*line)) line++; - *line++ = '\0'; - while (*line && isspace(*line)) line++; - if (!*line) return; - opt = line; - - while (!*line || !isspace(*line)) line++; - *line++ = '\0'; - while (*line && isspace(*line)) line++; - if (!*line) return; - - if (opt[0] == '-' && opt[1] == '-') - longName = opt + 2; - else if (opt[0] == '-' && !opt[2]) - shortName = opt[1]; - - if (!strcmp(entryType, "alias")) { - if (poptParseArgvString(line, &alias.argc, &alias.argv)) return; - alias.longName = longName, alias.shortName = shortName; - poptAddAlias(con, alias, 0); - } else if (!strcmp(entryType, "exec")) { - con->execs = realloc(con->execs, - sizeof(*con->execs) * (con->numExecs + 1)); - if (longName) - con->execs[con->numExecs].longName = xstrdup(longName); - else - con->execs[con->numExecs].longName = NULL; - - con->execs[con->numExecs].shortName = shortName; - con->execs[con->numExecs].script = xstrdup(line); - - con->numExecs++; - } -} - -int poptReadConfigFile(poptContext con, const char * fn) { - char * file=NULL, * chptr, * end; - char * buf=NULL, * dst; - int fd, rc; - int fileLength; - - fd = open(fn, O_RDONLY); - if (fd < 0) { - if (errno == ENOENT) - return 0; - else - return POPT_ERROR_ERRNO; - } - - fileLength = lseek(fd, 0, SEEK_END); - (void) lseek(fd, 0, 0); - - file = malloc(fileLength + 1); - if (read(fd, file, fileLength) != fileLength) { - rc = errno; - close(fd); - errno = rc; - if (file) free(file); - return POPT_ERROR_ERRNO; - } - close(fd); - - dst = buf = malloc(fileLength + 1); - - chptr = file; - end = (file + fileLength); - while (chptr < end) { - switch (*chptr) { - case '\n': - *dst = '\0'; - dst = buf; - while (*dst && isspace(*dst)) dst++; - if (*dst && *dst != '#') { - configLine(con, dst); - } - chptr++; - break; - case '\\': - *dst++ = *chptr++; - if (chptr < end) { - if (*chptr == '\n') - dst--, chptr++; - /* \ at the end of a line does not insert a \n */ - else - *dst++ = *chptr++; - } - break; - default: - *dst++ = *chptr++; - break; - } - } - - free(file); - free(buf); - - return 0; -} - -int poptReadDefaultConfig(poptContext con, /*@unused@*/ int useEnv) { - char * fn, * home; - int rc; - - if (!con->appName) return 0; - - rc = poptReadConfigFile(con, "/etc/popt"); - if (rc) return rc; - if (getuid() != geteuid()) return 0; - - if ((home = getenv("HOME"))) { - fn = malloc(strlen(home) + 20); - strcpy(fn, home); - strcat(fn, "/.popt"); - rc = poptReadConfigFile(con, fn); - free(fn); - if (rc) return rc; - } - - return 0; -} - diff --git a/source4/popt/popthelp.c b/source4/popt/popthelp.c deleted file mode 100644 index 6b790a63e7..0000000000 --- a/source4/popt/popthelp.c +++ /dev/null @@ -1,301 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ - -/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING - file accompanying popt source distributions, available from - ftp://ftp.redhat.com/pub/code/popt */ - -#include "system.h" -#include "poptint.h" - -static void displayArgs(poptContext con, - /*@unused@*/ enum poptCallbackReason foo, - struct poptOption * key, - /*@unused@*/ const char * arg, /*@unused@*/ void * data) { - if (key->shortName== '?') - poptPrintHelp(con, stdout, 0); - else - poptPrintUsage(con, stdout, 0); - exit(0); -} - -struct poptOption poptHelpOptions[] = { - { NULL, '\0', POPT_ARG_CALLBACK, (void *)&displayArgs, '\0', NULL, NULL }, - { "help", '?', 0, NULL, '?', N_("Show this help message"), NULL }, - { "usage", '\0', 0, NULL, 'u', N_("Display brief usage message"), NULL }, - { NULL, '\0', 0, NULL, 0, NULL, NULL } -} ; - - -/*@observer@*/ /*@null@*/ static const char * -getTableTranslationDomain(const struct poptOption *table) -{ - const struct poptOption *opt; - - for(opt = table; - opt->longName || opt->shortName || opt->arg; - opt++) { - if(opt->argInfo == POPT_ARG_INTL_DOMAIN) - return opt->arg; - } - - return NULL; -} - -/*@observer@*/ /*@null@*/ static const char * -getArgDescrip(const struct poptOption * opt, const char *translation_domain) -{ - if (!(opt->argInfo & POPT_ARG_MASK)) return NULL; - - if (opt == (poptHelpOptions + 1) || opt == (poptHelpOptions + 2)) - if (opt->argDescrip) return POPT_(opt->argDescrip); - - if (opt->argDescrip) return D_(translation_domain, opt->argDescrip); - return POPT_("ARG"); -} - -static void singleOptionHelp(FILE * f, int maxLeftCol, - const struct poptOption * opt, - const char *translation_domain) { - int indentLength = maxLeftCol + 5; - int lineLength = 79 - indentLength; - const char * help = D_(translation_domain, opt->descrip); - int helpLength; - const char * ch; - char format[10]; - char * left; - const char * argDescrip = getArgDescrip(opt, translation_domain); - - left = malloc(maxLeftCol + 1); - *left = '\0'; - - if (opt->longName && opt->shortName) - sprintf(left, "-%c, --%s", opt->shortName, opt->longName); - else if (opt->shortName) - sprintf(left, "-%c", opt->shortName); - else if (opt->longName) - sprintf(left, "--%s", opt->longName); - if (!*left) return ; - if (argDescrip) { - strcat(left, "="); - strcat(left, argDescrip); - } - - if (help) - fprintf(f," %-*s ", maxLeftCol, left); - else { - fprintf(f," %s\n", left); - goto out; - } - - helpLength = strlen(help); - while (helpLength > lineLength) { - ch = help + lineLength - 1; - while (ch > help && !isspace(*ch)) ch--; - if (ch == help) break; /* give up */ - while (ch > (help + 1) && isspace(*ch)) ch--; - ch++; - - sprintf(format, "%%.%ds\n%%%ds", (int) (ch - help), indentLength); - fprintf(f, format, help, " "); - help = ch; - while (isspace(*help) && *help) help++; - helpLength = strlen(help); - } - - if (helpLength) fprintf(f, "%s\n", help); - -out: - free(left); -} - -static int maxArgWidth(const struct poptOption * opt, - const char * translation_domain) { - int max = 0; - int this; - const char * s; - - while (opt->longName || opt->shortName || opt->arg) { - if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) { - this = maxArgWidth(opt->arg, translation_domain); - if (this > max) max = this; - } else if (!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) { - this = opt->shortName ? 2 : 0; - if (opt->longName) { - if (this) this += 2; - this += strlen(opt->longName) + 2; - } - - s = getArgDescrip(opt, translation_domain); - if (s) - this += strlen(s) + 1; - if (this > max) max = this; - } - - opt++; - } - - return max; -} - -static void singleTableHelp(FILE * f, const struct poptOption * table, - int left, - const char *translation_domain) { - const struct poptOption * opt; - const char *sub_transdom; - - opt = table; - while (opt->longName || opt->shortName || opt->arg) { - if ((opt->longName || opt->shortName) && - !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) - singleOptionHelp(f, left, opt, translation_domain); - opt++; - } - - opt = table; - while (opt->longName || opt->shortName || opt->arg) { - if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) { - sub_transdom = getTableTranslationDomain(opt->arg); - if(!sub_transdom) - sub_transdom = translation_domain; - - if (opt->descrip) - fprintf(f, "\n%s\n", D_(sub_transdom, opt->descrip)); - - singleTableHelp(f, opt->arg, left, sub_transdom); - } - opt++; - } -} - -static int showHelpIntro(poptContext con, FILE * f) { - int len = 6; - const char * fn; - - fprintf(f, POPT_("Usage:")); - if (!(con->flags & POPT_CONTEXT_KEEP_FIRST)) { - fn = con->optionStack->argv[0]; - if (strchr(fn, '/')) fn = strchr(fn, '/') + 1; - fprintf(f, " %s", fn); - len += strlen(fn) + 1; - } - - return len; -} - -void poptPrintHelp(poptContext con, FILE * f, /*@unused@*/ int flags) { - int leftColWidth; - - showHelpIntro(con, f); - if (con->otherHelp) - fprintf(f, " %s\n", con->otherHelp); - else - fprintf(f, " %s\n", POPT_("[OPTION...]")); - - leftColWidth = maxArgWidth(con->options, NULL); - singleTableHelp(f, con->options, leftColWidth, NULL); -} - -static int singleOptionUsage(FILE * f, int cursor, - const struct poptOption * opt, - const char *translation_domain) { - int len = 3; - char shortStr[2] = { '\0', '\0' }; - const char * item = shortStr; - const char * argDescrip = getArgDescrip(opt, translation_domain); - - if (opt->shortName) { - if (!(opt->argInfo & POPT_ARG_MASK)) - return cursor; /* we did these already */ - len++; - *shortStr = opt->shortName; - shortStr[1] = '\0'; - } else if (opt->longName) { - len += 1 + strlen(opt->longName); - item = opt->longName; - } - - if (len == 3) return cursor; - - if (argDescrip) - len += strlen(argDescrip) + 1; - - if ((cursor + len) > 79) { - fprintf(f, "\n "); - cursor = 7; - } - - fprintf(f, " [-%s%s%s%s]", opt->shortName ? "" : "-", item, - argDescrip ? (opt->shortName ? " " : "=") : "", - argDescrip ? argDescrip : ""); - - return cursor + len + 1; -} - -static int singleTableUsage(FILE * f, int cursor, const struct poptOption * table, - const char *translation_domain) { - const struct poptOption * opt; - - opt = table; - while (opt->longName || opt->shortName || opt->arg) { - if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INTL_DOMAIN) - translation_domain = (const char *)opt->arg; - else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) - cursor = singleTableUsage(f, cursor, opt->arg, - translation_domain); - else if ((opt->longName || opt->shortName) && - !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) - cursor = singleOptionUsage(f, cursor, opt, translation_domain); - - opt++; - } - - return cursor; -} - -static int showShortOptions(const struct poptOption * opt, FILE * f, - char * str) { - char s[300]; /* this is larger then the ascii set, so - it should do just fine */ - - s[0] = '\0'; - if (str == NULL) { - memset(s, 0, sizeof(s)); - str = s; - } - - while (opt->longName || opt->shortName || opt->arg) { - if (opt->shortName && !(opt->argInfo & POPT_ARG_MASK)) - str[strlen(str)] = opt->shortName; - else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) - showShortOptions(opt->arg, f, str); - - opt++; - } - - if (s != str || !*s) - return 0; - - fprintf(f, " [-%s]", s); - return strlen(s) + 4; -} - -void poptPrintUsage(poptContext con, FILE * f, /*@unused@*/ int flags) { - int cursor; - - cursor = showHelpIntro(con, f); - cursor += showShortOptions(con->options, f, NULL); - singleTableUsage(f, cursor, con->options, NULL); - - if (con->otherHelp) { - cursor += strlen(con->otherHelp) + 1; - if (cursor > 79) fprintf(f, "\n "); - fprintf(f, " %s", con->otherHelp); - } - - fprintf(f, "\n"); -} - -void poptSetOtherOptionHelp(poptContext con, const char * text) { - if (con->otherHelp) xfree(con->otherHelp); - con->otherHelp = xstrdup(text); -} diff --git a/source4/popt/poptint.h b/source4/popt/poptint.h deleted file mode 100644 index 1847ffafe6..0000000000 --- a/source4/popt/poptint.h +++ /dev/null @@ -1,71 +0,0 @@ -/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING - file accompanying popt source distributions, available from - ftp://ftp.redhat.com/pub/code/popt */ - -#ifndef H_POPTINT -#define H_POPTINT - -/* Bit mask macros. */ -typedef unsigned int __pbm_bits; -#define __PBM_NBITS (8 * sizeof (__pbm_bits)) -#define __PBM_IX(d) ((d) / __PBM_NBITS) -#define __PBM_MASK(d) ((__pbm_bits) 1 << ((d) % __PBM_NBITS)) -typedef struct { - __pbm_bits bits[1]; -} pbm_set; -#define __PBM_BITS(set) ((set)->bits) - -#define PBM_ALLOC(d) calloc(__PBM_IX (d) + 1, sizeof(__pbm_bits)) -#define PBM_FREE(s) free(s); -#define PBM_SET(d, s) (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d)) -#define PBM_CLR(d, s) (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d)) -#define PBM_ISSET(d, s) ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0) - -struct optionStackEntry { - int argc; - /*@only@*/ const char ** argv; - /*@only@*/ pbm_set * argb; - int next; - /*@only@*/ const char * nextArg; - /*@keep@*/ const char * nextCharArg; - /*@dependent@*/ struct poptAlias * currAlias; - int stuffed; -}; - -struct execEntry { - const char * longName; - char shortName; - const char * script; -}; - -struct poptContext_s { - struct optionStackEntry optionStack[POPT_OPTION_DEPTH]; - /*@dependent@*/ struct optionStackEntry * os; - /*@owned@*/ const char ** leftovers; - int numLeftovers; - int nextLeftover; - /*@keep@*/ const struct poptOption * options; - int restLeftover; - /*@only@*/ const char * appName; - /*@only@*/ struct poptAlias * aliases; - int numAliases; - int flags; - struct execEntry * execs; - int numExecs; - /*@only@*/ const char ** finalArgv; - int finalArgvCount; - int finalArgvAlloced; - /*@dependent@*/ struct execEntry * doExec; - /*@only@*/ const char * execPath; - int execAbsolute; - /*@only@*/ const char * otherHelp; - pbm_set * arg_strip; -}; - -#define xfree(_a) free((void *)_a) - -#define POPT_(foo) (foo) -#define D_(dom, str) (str) -#define N_(foo) (foo) - -#endif diff --git a/source4/popt/poptparse.c b/source4/popt/poptparse.c deleted file mode 100644 index 8f00769be9..0000000000 --- a/source4/popt/poptparse.c +++ /dev/null @@ -1,102 +0,0 @@ -/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING - file accompanying popt source distributions, available from - ftp://ftp.redhat.com/pub/code/popt */ - -#include "system.h" - -#define POPT_ARGV_ARRAY_GROW_DELTA 5 - -int poptDupArgv(int argc, const char **argv, - int * argcPtr, const char *** argvPtr) -{ - size_t nb = (argc + 1) * sizeof(*argv); - const char ** argv2; - char * dst; - int i; - - for (i = 0; i < argc; i++) { - if (argv[i] == NULL) - return POPT_ERROR_NOARG; - nb += strlen(argv[i]) + 1; - } - - dst = malloc(nb); - argv2 = (void *) dst; - dst += (argc + 1) * sizeof(*argv); - - for (i = 0; i < argc; i++) { - argv2[i] = dst; - dst += strlen(strcpy(dst, argv[i])) + 1; - } - argv2[argc] = NULL; - - *argvPtr = argv2; - *argcPtr = argc; - return 0; -} - -int poptParseArgvString(const char * s, int * argcPtr, const char *** argvPtr) -{ - const char * src; - char quote = '\0'; - int argvAlloced = POPT_ARGV_ARRAY_GROW_DELTA; - const char ** argv = malloc(sizeof(*argv) * argvAlloced); - int argc = 0; - int buflen = strlen(s) + 1; - char *buf0 = calloc(buflen, 1); - char *buf = buf0; - - argv[argc] = buf; - - for (src = s; *src; src++) { - if (quote == *src) { - quote = '\0'; - } else if (quote) { - if (*src == '\\') { - src++; - if (!*src) { - free(argv); - free(buf0); - return POPT_ERROR_BADQUOTE; - } - if (*src != quote) *buf++ = '\\'; - } - *buf++ = *src; - } else if (isspace(*src)) { - if (*argv[argc]) { - buf++, argc++; - if (argc == argvAlloced) { - argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA; - argv = realloc(argv, sizeof(*argv) * argvAlloced); - } - argv[argc] = buf; - } - } else switch (*src) { - case '"': - case '\'': - quote = *src; - break; - case '\\': - src++; - if (!*src) { - free(argv); - free(buf0); - return POPT_ERROR_BADQUOTE; - } - /*@fallthrough@*/ - default: - *buf++ = *src; - break; - } - } - - if (strlen(argv[argc])) { - argc++, buf++; - } - - (void) poptDupArgv(argc, argv, argcPtr, argvPtr); - - free(argv); - free(buf0); - return 0; -} diff --git a/source4/popt/system.h b/source4/popt/system.h deleted file mode 100644 index 059c045817..0000000000 --- a/source4/popt/system.h +++ /dev/null @@ -1,53 +0,0 @@ -#include "config.h" - -#include <ctype.h> -#include <errno.h> -#include <fcntl.h> -#include <limits.h> - -#if HAVE_MCHECK_H -#include <mcheck.h> -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#if HAVE_UNISTD_H -#include <unistd.h> -#endif - -#ifdef __NeXT -/* access macros are not declared in non posix mode in unistd.h - - don't try to use posix on NeXTstep 3.3 ! */ -#include <libc.h> -#endif - -/* AIX requires this to be the first thing in the file. */ -#ifndef __GNUC__ -# if HAVE_ALLOCA_H -# include <alloca.h> -# else -# ifdef _AIX -#pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -#elif defined(__GNUC__) && defined(__STRICT_ANSI__) -#define alloca __builtin_alloca -#endif - -/*@only@*/ char * xstrdup (const char *str); - -#if HAVE_MCHECK_H && defined(__GNUC__) -#define vmefail() (fprintf(stderr, "virtual memory exhausted.\n"), exit(EXIT_FAILURE), NULL) -#define xstrdup(_str) (strcpy((malloc(strlen(_str)+1) ? : vmefail()), (_str))) -#else -#define xstrdup(_str) strdup(_str) -#endif /* HAVE_MCHECK_H && defined(__GNUC__) */ - - -#include "popt.h" |