diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c index 4d68255..1b7ab95 100644 --- a/lib/libalpm/util.c +++ b/lib/libalpm/util.c @@ -291,7 +291,7 @@ int _alpm_lckrm() */ int _alpm_unpack(const char *archive, const char *prefix, const char *fn) { - int ret = 1; + int ret = 0; mode_t oldmask; struct archive *_archive; struct archive_entry *entry; @@ -319,7 +319,7 @@ int _alpm_unpack(const char *archive, const char *prefix, const char *fn) st = archive_entry_stat(entry); entryname = archive_entry_pathname(entry); - + if(S_ISREG(st->st_mode)) { archive_entry_set_mode(entry, 0644); } else if(S_ISDIR(st->st_mode)) { @@ -327,7 +327,7 @@ int _alpm_unpack(const char *archive, const char *prefix, const char *fn) } /* If a specific file was requested skip entries that don't match. */ - if (fn && strcmp(fn, entryname)) { + if(!strcmp("./", entryname) || (fn && strcmp(fn, entryname))) { _alpm_log(PM_LOG_DEBUG, "skipping: %s\n", entryname); if (archive_read_data_skip(_archive) != ARCHIVE_OK) { ret = 1; @@ -337,7 +337,6 @@ int _alpm_unpack(const char *archive, const char *prefix, const char *fn) } /* Extract the archive entry. */ - ret = 0; snprintf(expath, PATH_MAX, "%s/%s", prefix, entryname); archive_entry_set_pathname(entry, expath);