From c1bcd633010cce22919dbc5c347fa401971d39a8 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Fri, 23 Nov 2007 09:58:02 +0200 Subject: Move rpmioMkpath from rpmio.h to rpmfileutil.h --- rpmio/rpmfileutil.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ rpmio/rpmfileutil.h | 10 ++++++++++ rpmio/rpmio.c | 52 ---------------------------------------------------- rpmio/rpmio.h | 10 ---------- 4 files changed, 59 insertions(+), 62 deletions(-) (limited to 'rpmio') diff --git a/rpmio/rpmfileutil.c b/rpmio/rpmfileutil.c index 30047dadc..fc131d4f8 100644 --- a/rpmio/rpmfileutil.c +++ b/rpmio/rpmfileutil.c @@ -319,3 +319,52 @@ errxit: return 1; } +int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid) +{ + char * d, * de; + int created = 0; + int rc; + + if (path == NULL) + return -1; + d = alloca(strlen(path)+2); + de = stpcpy(d, path); + de[1] = '\0'; + for (de = d; *de != '\0'; de++) { + struct stat st; + char savec; + + while (*de && *de != '/') de++; + savec = de[1]; + de[1] = '\0'; + + rc = Stat(d, &st); + if (rc) { + switch(errno) { + default: + return errno; + break; + case ENOENT: + break; + } + rc = Mkdir(d, mode); + if (rc) + return errno; + created = 1; + if (!(uid == (uid_t) -1 && gid == (gid_t) -1)) { + rc = chown(d, uid, gid); + if (rc) + return errno; + } + } else if (!S_ISDIR(st.st_mode)) { + return ENOTDIR; + } + de[1] = savec; + } + rc = 0; + if (created) + rpmlog(RPMLOG_DEBUG, "created directory(s) %s mode 0%o\n", + path, mode); + return rc; +} + diff --git a/rpmio/rpmfileutil.h b/rpmio/rpmfileutil.h index 0022e5d03..a917868c5 100644 --- a/rpmio/rpmfileutil.h +++ b/rpmio/rpmfileutil.h @@ -31,4 +31,14 @@ int rpmDoDigest(pgpHashAlgo algo, const char * fn,int asAscii, */ int rpmMkTempFile(const char * prefix, const char ** fnptr, FD_t * fdptr); +/** + * Insure that directories in path exist, creating as needed. + * @param path directory path + * @param mode directory mode (if created) + * @param uid directory uid (if created), or -1 to skip + * @param gid directory uid (if created), or -1 to skip + * @return 0 on success, errno (or -1) on error + */ +int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid); + #endif /* _RPMFILEUTIL_H */ diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c index 839f669ca..29d8c7bc3 100644 --- a/rpmio/rpmio.c +++ b/rpmio/rpmio.c @@ -1686,58 +1686,6 @@ int Fcntl(FD_t fd, int op, void *lip) return fcntl(Fileno(fd), op, lip); } -/* =============================================================== */ -/* Helper routines that may be generally useful. - */ -int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid) -{ - char * d, * de; - int created = 0; - int rc; - - if (path == NULL) - return -1; - d = alloca(strlen(path)+2); - de = stpcpy(d, path); - de[1] = '\0'; - for (de = d; *de != '\0'; de++) { - struct stat st; - char savec; - - while (*de && *de != '/') de++; - savec = de[1]; - de[1] = '\0'; - - rc = Stat(d, &st); - if (rc) { - switch(errno) { - default: - return errno; - break; - case ENOENT: - break; - } - rc = Mkdir(d, mode); - if (rc) - return errno; - created = 1; - if (!(uid == (uid_t) -1 && gid == (gid_t) -1)) { - rc = chown(d, uid, gid); - if (rc) - return errno; - } - } else if (!S_ISDIR(st.st_mode)) { - return ENOTDIR; - } - de[1] = savec; - } - rc = 0; - if (created) - rpmlog(RPMLOG_DEBUG, "created directory(s) %s mode 0%o\n", - path, mode); - return rc; -} - int rpmioSlurp(const char * fn, byte ** bp, ssize_t * blenp) { static ssize_t blenmax = (32 * BUFSIZ); diff --git a/rpmio/rpmio.h b/rpmio/rpmio.h index 55f709d35..d56d46ece 100644 --- a/rpmio/rpmio.h +++ b/rpmio/rpmio.h @@ -235,16 +235,6 @@ int fdWritable(FD_t fd, int secs); */ int fdReadable(FD_t fd, int secs); -/** - * Insure that directories in path exist, creating as needed. - * @param path directory path - * @param mode directory mode (if created) - * @param uid directory uid (if created), or -1 to skip - * @param gid directory uid (if created), or -1 to skip - * @return 0 on success, errno (or -1) on error - */ -int rpmioMkpath(const char * path, mode_t mode, uid_t uid, gid_t gid); - /** * FTP and HTTP error codes. */ -- cgit v1.2.3