From: jbj Date: Sun, 17 Jun 2001 15:19:26 +0000 (+0000) Subject: - popt: add POPT_CONTEXT_ARG_OPTS for all opts to return 1 (#30912). X-Git-Tag: tznext/4.11.0.1.tizen20130304~7743 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c32276cdf5c28d7d701d7211e55f28ebc6f097d7;p=tools%2Flibrpm-tizen.git - popt: add POPT_CONTEXT_ARG_OPTS for all opts to return 1 (#30912). - fix: fsm reads/writes now return error on partial I/O. - fix: Ferror returned spurious error for gzdio/bzdio. CVS patchset: 4874 CVS date: 2001/06/17 15:19:26 --- diff --git a/CHANGES b/CHANGES index 654dcc7..0787c4b 100644 --- a/CHANGES +++ b/CHANGES @@ -114,6 +114,9 @@ %post -p "/sbin/ldconfig -n /usr/lib" incompatibilities. - popt: add POPT_ARGFLAG_SHOW_DEFAULT to display initial values(#32558). + - popt: add POPT_CONTEXT_ARG_OPTS for all opts to return 1 (#30912). + - fix: fsm reads/writes now return error on partial I/O. + - fix: Ferror returned spurious error for gzdio/bzdio. 4.0 -> 4.0.[12] - add doxygen and lclint annotations most everywhere. diff --git a/lib/fsm.c b/lib/fsm.c index b677ff4..6378ba5 100644 --- a/lib/fsm.c +++ b/lib/fsm.c @@ -1913,10 +1913,8 @@ int fsmStage(FSM_t fsm, fileStage stage) cur, (fsm->wrbuf == fsm->wrb ? "wrbuf" : "mmap"), (int)fsm->wrlen, (int)fsm->rdnb); if (fsm->rdnb != fsm->wrlen) fprintf(stderr, "*** short read, had %d, got %d\n", (int)fsm->rdnb, (int)fsm->wrlen); -#ifdef NOTYET - if (Ferror(fsm->rfd)) + if (fsm->rdnb != fsm->wrlen || Ferror(fsm->cfd)) rc = CPIOERR_READ_FAILED; -#endif if (fsm->rdnb > 0) fdSetCpioPos(fsm->cfd, fdGetCpioPos(fsm->cfd) + fsm->rdnb); break; @@ -1927,10 +1925,8 @@ if (fsm->rdnb != fsm->wrlen) fprintf(stderr, "*** short read, had %d, got %d\n", cur, (fsm->rdbuf == fsm->rdb ? "rdbuf" : "mmap"), (int)fsm->rdnb, (int)fsm->wrnb); if (fsm->rdnb != fsm->wrnb) fprintf(stderr, "*** short write, had %d, got %d\n", (int)fsm->rdnb, (int)fsm->wrnb); -#ifdef NOTYET - if (Ferror(fsm->wfd)) + if (fsm->rdnb != fsm->wrnb || Ferror(fsm->cfd)) rc = CPIOERR_WRITE_FAILED; -#endif if (fsm->wrnb > 0) fdSetCpioPos(fsm->cfd, fdGetCpioPos(fsm->cfd) + fsm->wrnb); break; @@ -1953,10 +1949,8 @@ if (fsm->rdnb != fsm->wrnb) fprintf(stderr, "*** short write, had %d, got %d\n", rpmMessage(RPMMESS_DEBUG, " %8s (rdbuf, %d, rfd)\trdnb %d\n", cur, (int)fsm->rdlen, (int)fsm->rdnb); if (fsm->rdnb != fsm->rdlen) fprintf(stderr, "*** short read, had %d, got %d\n", (int)fsm->rdnb, (int)fsm->rdlen); -#ifdef NOTYET - if (Ferror(fsm->rfd)) + if (fsm->rdnb != fsm->rdlen || Ferror(fsm->rfd)) rc = CPIOERR_READ_FAILED; -#endif break; case FSM_RCLOSE: if (fsm->rfd) { @@ -1984,10 +1978,8 @@ if (fsm->rdnb != fsm->rdlen) fprintf(stderr, "*** short read, had %d, got %d\n", rpmMessage(RPMMESS_DEBUG, " %8s (wrbuf, %d, wfd)\twrnb %d\n", cur, (int)fsm->rdnb, (int)fsm->wrnb); if (fsm->rdnb != fsm->wrnb) fprintf(stderr, "*** short write: had %d, got %d\n", (int)fsm->rdnb, (int)fsm->wrnb); -#ifdef NOTYET - if (Ferror(fsm->wfd)) + if (fsm->rdnb != fsm->wrnb || Ferror(fsm->wfd)) rc = CPIOERR_WRITE_FAILED; -#endif break; case FSM_WCLOSE: if (fsm->wfd) { diff --git a/popt/popt.c b/popt/popt.c index 851f6ab..a5672c4 100644 --- a/popt/popt.c +++ b/popt/popt.c @@ -675,10 +675,14 @@ int poptGetNextOpt(poptContext con) return POPT_ERROR_BADOPT; if (con->restLeftover || *origOptString != '-') { - if (con->leftovers != NULL) /* XXX can't happen */ - con->leftovers[con->numLeftovers++] = origOptString; if (con->flags & POPT_CONTEXT_POSIXMEHARDER) con->restLeftover = 1; + if (con->flags & POPT_CONTEXT_ARG_OPTS) { + con->os->nextArg = xstrdup(origOptString); + return 0; + } + if (con->leftovers != NULL) /* XXX can't happen */ + con->leftovers[con->numLeftovers++] = origOptString; continue; } @@ -793,10 +797,11 @@ int poptGetNextOpt(poptContext con) cleanOSE(con->os--); } if (con->os->next == con->os->argc) { - if (opt->argInfo & POPT_ARGFLAG_OPTIONAL) - con->os->nextArg = NULL; - else + if (!(opt->argInfo & POPT_ARGFLAG_OPTIONAL)) + /*@-compdef@*/ /* FIX: con->os->argv not defined */ return POPT_ERROR_NOARG; + /*@=compdef@*/ + con->os->nextArg = NULL; } else { /* diff --git a/popt/popt.h b/popt/popt.h index 844e673..a4c60e9 100644 --- a/popt/popt.h +++ b/popt/popt.h @@ -110,6 +110,7 @@ extern "C" { #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 */ +#define POPT_CONTEXT_ARG_OPTS (1 << 4) /*!< return args as options with value 0 */ /*@}*/ /** \ingroup popt diff --git a/popt/popthelp.c b/popt/popthelp.c index 5ce98e8..b63a15e 100644 --- a/popt/popthelp.c +++ b/popt/popthelp.c @@ -81,18 +81,22 @@ getArgDescrip(const struct poptOption * opt, static /*@only@*/ /*@null@*/ char * singleOptionDefaultValue(int lineLength, const struct poptOption * opt, - /*@null@*/ const char *translation_domain) + /*@-paramuse@*/ /* FIX: i18n macros disable with lclint */ + /*@null@*/ const char * translation_domain) + /*@=paramuse@*/ /*@*/ { const char * defstr = D_(translation_domain, "default"); - char * l = malloc(4*lineLength + 1); - char * le = l; + char * le = malloc(4*lineLength + 1); + char * l = le; - if (l == NULL) return l; /* XXX can't happen */ + if (l == NULL) return NULL; /* XXX can't happen */ + *le = '\0'; *le++ = '('; le = stpcpy(le, defstr); *le++ = ':'; *le++ = ' '; + if (opt->arg) /* XXX programmer error */ switch (opt->argInfo & POPT_ARG_MASK) { case POPT_ARG_VAL: case POPT_ARG_INT: @@ -128,7 +132,7 @@ static /*@only@*/ /*@null@*/ char * singleOptionDefaultValue(int lineLength, default: l = _free(l); return NULL; - break; + /*@notreached@*/ break; } *le++ = ')'; *le = '\0'; @@ -138,7 +142,7 @@ static /*@only@*/ /*@null@*/ char * singleOptionDefaultValue(int lineLength, static void singleOptionHelp(FILE * fp, int maxLeftCol, const struct poptOption * opt, - /*@null@*/ const char *translation_domain) + /*@null@*/ const char * translation_domain) /*@modifies *fp, fileSystem @*/ { int indentLength = maxLeftCol + 5; @@ -180,9 +184,13 @@ static void singleOptionHelp(FILE * fp, int maxLeftCol, if (opt->argInfo & POPT_ARGFLAG_SHOW_DEFAULT) { defs = singleOptionDefaultValue(lineLength, opt, translation_domain); if (defs) { - char * t = malloc(strlen(help) + strlen(defs) + sizeof(" ")); + char * t = malloc((help ? strlen(help) : 0) + + strlen(defs) + sizeof(" ")); if (t) { - (void) stpcpy( stpcpy( stpcpy(t, help), " "), defs); + char * te = t; + *te = '\0'; + if (help) te = stpcpy(te, help); + (void) stpcpy( stpcpy( te, " "), defs); defs = _free(defs); } defs = t; diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c index 16fdc8e..b758c47 100644 --- a/rpmio/rpmio.c +++ b/rpmio/rpmio.c @@ -2796,10 +2796,12 @@ int Ferror(FD_t fd) ec = ferror(fdGetFILE(fd)); /*@=voidabstract =nullpass@*/ } else if (fps->io == gzdio) { - ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0; + ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0; + i--; /* XXX fdio under gzdio always has fdno == -1 */ #if HAVE_BZLIB_H } else if (fps->io == bzdio) { ec = (fd->syserrno || fd->errcookie != NULL) ? -1 : 0; + i--; /* XXX fdio under bzdio always has fdno == -1 */ #endif } else { /* XXX need to check ufdio/gzdio/bzdio/fdio errors correctly. */