diff options
author | jbj <devnull@localhost> | 1999-11-26 16:19:30 +0000 |
---|---|---|
committer | jbj <devnull@localhost> | 1999-11-26 16:19:30 +0000 |
commit | c8406c80d2a9670df64f1ab7e38d90626cad906f (patch) | |
tree | 73cd94dccefe9e495fa59f775b6e931e4867e984 /rpmio/macro.c | |
parent | 2a423cf9398d597b1320e95e864909e292f9c82f (diff) | |
download | rpm-c8406c80d2a9670df64f1ab7e38d90626cad906f.tar.gz rpm-c8406c80d2a9670df64f1ab7e38d90626cad906f.tar.bz2 rpm-c8406c80d2a9670df64f1ab7e38d90626cad906f.zip |
lib/macro.c: Create rpmCleanPath().
build/misc.c: Delete cleanFileName().
CVS patchset: 3435
CVS date: 1999/11/26 16:19:30
Diffstat (limited to 'rpmio/macro.c')
-rw-r--r-- | rpmio/macro.c | 94 |
1 files changed, 52 insertions, 42 deletions
diff --git a/rpmio/macro.c b/rpmio/macro.c index bf8a5a412..0323f2873 100644 --- a/rpmio/macro.c +++ b/rpmio/macro.c @@ -132,7 +132,7 @@ sortMacroTable(MacroContext *mc) } void -dumpMacroTable(MacroContext *mc, FILE *f) +dumpMacroTable(MacroContext * mc, FILE * fp) { int i; int nempty = 0; @@ -140,10 +140,10 @@ dumpMacroTable(MacroContext *mc, FILE *f) if (mc == NULL) mc = &globalMacroContext; - if (f == NULL) - f = stderr; + if (fp == NULL) + fp = stderr; - fprintf(f, "========================\n"); + fprintf(fp, "========================\n"); for (i = 0; i < mc->firstFree; i++) { MacroEntry *me; if ((me = mc->macroTable[i]) == NULL) { @@ -151,16 +151,16 @@ dumpMacroTable(MacroContext *mc, FILE *f) nempty++; continue; } - fprintf(f, "%3d%c %s", me->level, + fprintf(fp, "%3d%c %s", me->level, (me->used > 0 ? '=' : ':'), me->name); if (me->opts && *me->opts) - fprintf(f, "(%s)", me->opts); + fprintf(fp, "(%s)", me->opts); if (me->body && *me->body) - fprintf(f, "\t%s", me->body); - fprintf(f, "\n"); + fprintf(fp, "\t%s", me->body); + fprintf(fp, "\n"); nactive++; } - fprintf(f, _("======================== active %d empty %d\n"), + fprintf(fp, _("======================== active %d empty %d\n"), nactive, nempty); } @@ -1462,32 +1462,14 @@ rpmExpandNumeric(const char *arg) return rc; } -/* Return concatenated and expanded path with multiple /'s removed */ -const char * -rpmGetPath(const char *path, ...) +const char *rpmCleanPath(char * path) { - char buf[BUFSIZ], *t, *te, *se; const char *s; - va_list ap; - - if (path == NULL) - return xstrdup(""); + char *se, *t, *te; - t = buf; - te = stpcpy(t, path); - *te = '\0'; - - va_start(ap, path); - while ((s = va_arg(ap, const char *)) != NULL) { - te = stpcpy(te, s); - *te = '\0'; - } - va_end(ap); - expandMacros(NULL, NULL, buf, sizeof(buf)); - - s = t = te = buf; + s = t = te = path; while (*s) { -/*fprintf(stderr, "*** got \"%.*s\"\trest \"%s\"\n", (t-buf), buf, s); */ +/*fprintf(stderr, "*** got \"%.*s\"\trest \"%s\"\n", (t-path), path, s); */ switch(*s) { case ':': /* handle url's */ if (s[1] == '/' && s[2] == '/') { @@ -1501,37 +1483,37 @@ rpmGetPath(const char *path, ...) ; if (se < t && *se == '/') { te = se; -/*fprintf(stderr, "*** next pdir \"%.*s\"\n", (te-buf), buf); */ +/*fprintf(stderr, "*** next pdir \"%.*s\"\n", (te-path), path); */ } while (s[1] == '/') s++; - while (t > buf && t[-1] == '/') + while (t > path && t[-1] == '/') t--; break; case '.': /* Leading .. is special */ - if (t == buf && s[1] == '.') { + if (t == path && s[1] == '.') { *t++ = *s++; break; } /* Single . is special */ - if (t == buf && s[1] == '\0') { + if (t == path && s[1] == '\0') { break; } /* Trim leading ./ , embedded ./ , trailing /. */ - if ((t == buf || t[-1] == '/') && (s[1] == '/' || s[1] == '\0')) { + if ((t == path || t[-1] == '/') && (s[1] == '/' || s[1] == '\0')) { /*fprintf(stderr, "*** Trim leading ./ , embedded ./ , trailing /.\n"); */ s++; continue; } /* Trim embedded /../ and trailing /.. */ - if (t > buf && t[-1] == '/' && s[1] == '.' && (s[2] == '/' || s[2] == '\0')) { + if (t > path && t[-1] == '/' && s[1] == '.' && (s[2] == '/' || s[2] == '\0')) { t = te; /* Move parent dir forward */ - if (te > buf) - for (--te; te > buf && *te != '/'; te--) + if (te > path) + for (--te; te > path && *te != '/'; te--) ; -/*fprintf(stderr, "*** prev pdir \"%.*s\"\n", (te-buf), buf); */ +/*fprintf(stderr, "*** prev pdir \"%.*s\"\n", (te-path), path); */ s++; s++; continue; @@ -1542,12 +1524,40 @@ rpmGetPath(const char *path, ...) } *t++ = *s++; } + /* Trim trailing / (but leave single / alone) */ - if (t > &buf[1] && t[-1] == '/') + if (t > &path[1] && t[-1] == '/') t--; *t = '\0'; - return xstrdup(buf); + return path; +} + +/* Return concatenated and expanded canonical path. */ +const char * +rpmGetPath(const char *path, ...) +{ + char buf[BUFSIZ]; + const char * s; + char * t, * te; + va_list ap; + + if (path == NULL) + return xstrdup(""); + + t = buf; + te = stpcpy(t, path); + *te = '\0'; + + va_start(ap, path); + while ((s = va_arg(ap, const char *)) != NULL) { + te = stpcpy(te, s); + *te = '\0'; + } + va_end(ap); + expandMacros(NULL, NULL, buf, sizeof(buf)); + + return xstrdup( rpmCleanPath(buf) ); } /* Merge 3 args into path, any or all of which may be a url. */ |