* The alpm_rmrf function is available from the api, which does the
same as this function did, with a small sanity check.

* It was worth to establish alpm_rmrf for _alpm_rmrf for pacman frontend
as a wrapper to be able to use it in the future or for other frontend, so the
function declaration was deleted in the frontend, and the new alpm_rmrf
wrapper function was established for future usage with SYMEXPORT modifier.

Signed-off-by: Laszlo Papp <[email protected]>
---

What about this approach ?

 lib/libalpm/alpm.h |    2 ++
 lib/libalpm/util.c |   14 +++++++++++++-
 src/pacman/sync.c  |    2 +-
 src/pacman/util.c  |   43 -------------------------------------------
 src/pacman/util.h  |    1 -
 5 files changed, 16 insertions(+), 46 deletions(-)

diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index c433b73..3e24fd3 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -467,6 +467,8 @@ const char *alpm_fileconflict_get_ctarget(pmfileconflict_t 
*conflict);
 /* checksums */
 char *alpm_compute_md5sum(const char *name);

+int alpm_rmrf(char *path);
+
 /*
  * Errors
  */
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index d910809..1340da9 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -79,6 +79,18 @@ char* strsep(char** str, const char* delims)
 }
 #endif

+
+/** does the same thing as 'rm -rf'
+ * @param path name of the file to delete
+ */
+int SYMEXPORT alpm_rmrf(char *path)
+{
+       ALPM_LOG_FUNC;
+
+  ASSERT(path != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
+       return(_alpm_rmrf(path));
+}
+
 int _alpm_makepath(const char *path)
 {
        return(_alpm_makepath_mode(path, 0755));
@@ -315,7 +327,7 @@ int _alpm_unpack(const char *archive, const char *prefix, 
alpm_list_t *list, int

                st = archive_entry_stat(entry);
                entryname = archive_entry_pathname(entry);
-
+
                if(S_ISREG(st->st_mode)) {
                        archive_entry_set_perm(entry, 0644);
                } else if(S_ISDIR(st->st_mode)) {
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index a2ef616..0164ca9 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -90,7 +90,7 @@ static int sync_cleandb(const char *dbpath, int keep_used) {
                                continue;
                        }

-                       if(rmrf(path)) {
+                       if(alpm_rmrf(path)) {
                                pm_fprintf(stderr, PM_LOG_ERROR,
                                        _("could not remove repository 
directory\n"));
                                closedir(dir);
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 1143bef..9adc0e5 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -99,49 +99,6 @@ int getcols(void)
        return 0;
 }

-/* does the same thing as 'rm -rf' */
-int rmrf(const char *path)
-{
-       int errflag = 0;
-       struct dirent *dp;
-       DIR *dirp;
-
-       if(!unlink(path)) {
-               return(0);
-       } else {
-               if(errno == ENOENT) {
-                       return(0);
-               } else if(errno == EPERM) {
-                       /* fallthrough */
-               } else if(errno == EISDIR) {
-                       /* fallthrough */
-               } else if(errno == ENOTDIR) {
-                       return(1);
-               } else {
-                       /* not a directory */
-                       return(1);
-               }
-
-               if((dirp = opendir(path)) == (DIR *)-1) {
-                       return(1);
-               }
-               for(dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {
-                       if(dp->d_ino) {
-                               char name[PATH_MAX];
-                               sprintf(name, "%s/%s", path, dp->d_name);
-                               if(strcmp(dp->d_name, "..") && 
strcmp(dp->d_name, ".")) {
-                                       errflag += rmrf(name);
-                               }
-                       }
-               }
-               closedir(dirp);
-               if(rmdir(path)) {
-                       errflag++;
-               }
-               return(errflag);
-       }
-}
-
 /** Parse the basename of a program from a path.
 * Grabbed from the uClibc source.
 * @param path path to parse basename from
diff --git a/src/pacman/util.h b/src/pacman/util.h
index 7a8c39d..30e5996 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -41,7 +41,6 @@ int trans_init(pmtransflag_t flags);
 int trans_release(void);
 int needs_root(void);
 int getcols(void);
-int rmrf(const char *path);
 char *mbasename(const char *path);
 char *mdirname(const char *path);
 void indentprint(const char *str, int indent);
--
1.6.5


Reply via email to