mirror of
https://github.com/moparisthebest/pacman
synced 2024-12-23 08:18:51 -05:00
472e51b975
This patch fixes FS#12148 ('unstable' regular file). I also changed the other archive_entry_set_mode usage in add.c to archive_entry_set_perm. Since I cannot find any relevant info in libarchive manual, I quote Tim Kientzle (the author of libarchive) here, and I say thank you for his help. *** Tim Kientzle wrote ************************************* This is the problem in libalpm/util.c: 323 if(S_ISREG(st->st_mode)) { 324 archive_entry_set_mode(entry, 0644); 325 } else if(S_ISDIR(st->st_mode)) { 326 archive_entry_set_mode(entry, 0755); 327 } Your example unstable.db.tar.gz is not empty. It has one entry in it, called "./". That entry is marked as a directory. But, when you call archive_entry_set_mode(), you are changing the file type! archive_read_extract() then creates the file /var/unstable as you requested. (archive_read_extract() will replace an empty directory with a file.) You should either set the mode value correctly: 323 if(S_ISREG(st->st_mode)) { 324 archive_entry_set_mode(entry, IFREG | 0644); 325 } else if(S_ISDIR(st->st_mode)) { 326 archive_entry_set_mode(entry, IFDIR | 0755); 327 } Or use archive_entry_set_perm(), which does not change the file type: 323 if(S_ISREG(st->st_mode)) { 324 archive_entry_set_perm(entry, 0644); 325 } else if(S_ISDIR(st->st_mode)) { 326 archive_entry_set_perm(entry, 0755); 327 } ************************************************************ Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu> Signed-off-by: Dan McGee <dan@archlinux.org> |
||
---|---|---|
.. | ||
po | ||
.gitignore | ||
add.c | ||
add.h | ||
alpm_list.c | ||
alpm_list.h | ||
alpm.c | ||
alpm.h | ||
backup.c | ||
backup.h | ||
be_files.c | ||
be_package.c | ||
cache.c | ||
cache.h | ||
conflict.c | ||
conflict.h | ||
db.c | ||
db.h | ||
delta.c | ||
delta.h | ||
deps.c | ||
deps.h | ||
dload.c | ||
dload.h | ||
error.c | ||
graph.h | ||
group.c | ||
group.h | ||
handle.c | ||
handle.h | ||
log.c | ||
log.h | ||
Makefile.am | ||
md5.c | ||
md5.h | ||
package.c | ||
package.h | ||
remove.c | ||
remove.h | ||
sync.c | ||
sync.h | ||
trans.c | ||
trans.h | ||
util.c | ||
util.h |