- fix rpmvfs empty directory handling (#529645)

- fix bindings (#532784)
This commit is contained in:
Jindrich Novy 2009-12-15 14:57:01 +00:00
parent 7a9d75bfa0
commit dbcd49aae3
3 changed files with 524 additions and 23 deletions

View File

@ -1,7 +1,7 @@
diff -up mc-4.7.0-pre1/configure.ac.extensions mc-4.7.0-pre1/configure.ac
--- mc-4.7.0-pre1/configure.ac.extensions 2009-07-31 18:36:24.000000000 +0200
+++ mc-4.7.0-pre1/configure.ac 2009-08-05 12:51:08.000000000 +0200
@@ -67,7 +67,7 @@ AC_PROG_LN_S
diff -up mc-4.7.0-pre4/configure.ac.extensions mc-4.7.0-pre4/configure.ac
--- mc-4.7.0-pre4/configure.ac.extensions 2009-10-30 19:44:38.000000000 +0100
+++ mc-4.7.0-pre4/configure.ac 2009-12-10 20:41:43.000000000 +0100
@@ -69,7 +69,7 @@ AC_PROG_LN_S
AC_CHECK_TOOL(AR, ar, ar)
dnl Only list browsers here that can be run in background (i.e. with `&')
@ -10,10 +10,10 @@ diff -up mc-4.7.0-pre1/configure.ac.extensions mc-4.7.0-pre1/configure.ac
dnl
dnl Ovverriding mmap support. This has to be before AC_FUNC_MMAP is used.
diff -up mc-4.7.0-pre1/misc/mc.ext.in.extensions mc-4.7.0-pre1/misc/mc.ext.in
--- mc-4.7.0-pre1/misc/mc.ext.in.extensions 2009-06-23 20:55:11.000000000 +0200
+++ mc-4.7.0-pre1/misc/mc.ext.in 2009-08-05 13:01:48.000000000 +0200
@@ -221,8 +221,8 @@ regex/\.rpm$
diff -up mc-4.7.0-pre4/misc/mc.ext.in.extensions mc-4.7.0-pre4/misc/mc.ext.in
--- mc-4.7.0-pre4/misc/mc.ext.in.extensions 2009-10-29 20:02:37.000000000 +0100
+++ mc-4.7.0-pre4/misc/mc.ext.in 2009-12-10 20:46:47.000000000 +0100
@@ -226,8 +226,8 @@ regex/\.rpm$
# deb
regex/\.u?deb$
@ -24,7 +24,26 @@ diff -up mc-4.7.0-pre1/misc/mc.ext.in.extensions mc-4.7.0-pre1/misc/mc.ext.in
# dpkg
shell/.debd
@@ -397,11 +397,16 @@ regex/\.([wW][aA][wW]22)$
@@ -387,7 +387,7 @@ shell/.ico
Include=image
include/image
- Open=if [ "$DISPLAY" = "" ]; then zgv %f; else (gqview %f &); fi
+ Open=if [ "$DISPLAY" = "" ]; then zgv %f; else (eog %f &); fi
View=%view{ascii} identify %f
#View=%view{ascii} asciiview %f
@@ -395,7 +395,8 @@ include/image
### Sound files ###
regex/\.([wW][aA][vV]|[sS][nN][dD]|[vV][oO][cC]|[aA][uU]|[sS][mM][pP]|[aA][iI][fF][fF]|[sS][nN][dD])$
- Open=if [ "$DISPLAY" = "" ]; then play %f; else (xmms %f >/dev/null 2>&1 &); fi
+ Include=audio
+# Open=if [ "$DISPLAY" = "" ]; then play %f; else (xmms %f >/dev/null 2>&1 &); fi
regex/\.([mM][oO][dD]|[sS]3[mM]|[xX][mM]|[iI][tT]|[mM][tT][mM]|669|[sS][tT][mM]|[uU][lL][tT]|[fF][aA][rR])$
Open=mikmod %f
@@ -405,15 +406,22 @@ regex/\.([wW][aA][wW]22)$
Open=vplay -s 22 %f
regex/\.([mM][pP]3)$
@ -39,12 +58,19 @@ diff -up mc-4.7.0-pre1/misc/mc.ext.in.extensions mc-4.7.0-pre1/misc/mc.ext.in
regex/\.([oO][gG][gG|aA|vV|xX])$
- Open=if [ "$DISPLAY" = "" ]; then ogg123 %f; else (xmms %f >/dev/null 2>&1 &); fi
+ Open=ogg123 %f
+ Include=audio
+# Open=ogg123 %f
+# Open=if [ "$DISPLAY" = "" ]; then ogg123 %f; else (xmms %f >/dev/null 2>&1 &); fi
View=%view{ascii} ogginfo %s
regex/\.([sS][pP][xX]|[fF][lL][aA][cC])$
@@ -414,11 +419,15 @@ regex/\.([wW][mM][aA])$
- Open=if [ "$DISPLAY" = "" ]; then play %f; else (xmms %f >/dev/null 2>&1 &); fi
+ Include=audio
+# Open=if [ "$DISPLAY" = "" ]; then play %f; else (xmms %f >/dev/null 2>&1 &); fi
regex/\.([mM][iI][dD][iI]?|[rR][mM][iI][dD]?)$
Open=timidity %f
@@ -422,11 +430,15 @@ regex/\.([wW][mM][aA])$
Open=mplayer -vo null %f
View=%view{ascii} mplayer -quiet -slave -frames 0 -vo null -ao null -identify %f 2>/dev/null | tail +13 || file %f
@ -61,17 +87,31 @@ diff -up mc-4.7.0-pre1/misc/mc.ext.in.extensions mc-4.7.0-pre1/misc/mc.ext.in
### Video ###
@@ -432,6 +441,9 @@ regex/\.([aA][sS][fFxX])$
regex/\.([dD][iI][vV][xX])$
Include=video
@@ -471,12 +486,12 @@ include/video
+regex/\.([mM][kK][vV])$
+ Include=video
+
regex/\.([mM][oO][vV]|[qQ][tT])$
Include=video
# Postscript
type/^PostScript
- Open=(gv %f &)
+ Open=(xdg-open %f &)
View=%view{ascii} ps2ascii %f
@@ -496,22 +508,27 @@ shell/.abw
# PDF
type/^PDF
- Open=(xpdf %f &)
+ Open=(xdg-open %f &)
#Open=(acroread %f &)
#Open=(ghostview %f &)
View=%view{ascii} pdftotext %f -
@@ -486,7 +501,7 @@ type/^PDF
# html
regex/\.([hH][tT][mM][lL]?)$
- Open=(if test -n "@X11_WWW@" && test -n "$DISPLAY"; then (@X11_WWW@ file://%d/%p &) 1>&2; else links %f || lynx -force_html %f || ${PAGER:-more} %f; fi) 2>/dev/null
+ Open=(if test -n "$DISPLAY"; then (xdg-open file://%d/%p &) 1>&2; else links %f || lynx -force_html %f || ${PAGER:-more} %f; fi) 2>/dev/null
View=%view{ascii} links -dump %f 2>/dev/null || w3m -dump %f 2>/dev/null || lynx -dump -force_html %f
# StarOffice 5.2
@@ -504,22 +519,27 @@ shell/.abw
# Microsoft Word Document
regex/\.([Dd][oO][cCtT]|[Ww][rR][iI])$

455
mc-rpmvfs.patch Normal file
View File

@ -0,0 +1,455 @@
commit 698385bdd0bfb485bcc42a634f86a8cd0ffae564
Author: Andrew Borodin <aborodin@vmail.ru>
Date: Wed Nov 18 16:26:24 2009 +0300
Ticket #1732: cpio VFS skips empty directories in the root of archive
Initial step: some optimization and type accuracy.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
diff --git a/vfs/cpio.c b/vfs/cpio.c
index 5eeef95..8c24573 100644
--- a/vfs/cpio.c
+++ b/vfs/cpio.c
@@ -103,7 +103,6 @@ struct defer_inode {
static int cpio_position;
static int cpio_find_head(struct vfs_class *me, struct vfs_s_super *super);
-static int cpio_create_entry(struct vfs_class *me, struct vfs_s_super *super, struct stat *, char *name);
static ssize_t cpio_read_bin_head(struct vfs_class *me, struct vfs_s_super *super);
static ssize_t cpio_read_oldc_head(struct vfs_class *me, struct vfs_s_super *super);
static ssize_t cpio_read_crc_head(struct vfs_class *me, struct vfs_s_super *super);
@@ -234,8 +233,8 @@ static int cpio_find_head(struct vfs_class *me, struct vfs_s_super *super)
{
char buf[256];
int ptr = 0;
- int top;
- int tmp;
+ ssize_t top;
+ ssize_t tmp;
top = mc_read (super->u.arch.fd, buf, 256);
if (top > 0)
@@ -271,6 +270,140 @@ static int cpio_find_head(struct vfs_class *me, struct vfs_s_super *super)
#undef RETURN
#undef SEEKBACK
+static int
+cpio_create_entry (struct vfs_class *me, struct vfs_s_super *super,
+ struct stat *st, char *name)
+{
+ struct vfs_s_inode *inode = NULL;
+ struct vfs_s_inode *root = super->root;
+ struct vfs_s_entry *entry = NULL;
+ char *tn;
+
+ switch (st->st_mode & S_IFMT) { /* For case of HP/UX archives */
+ case S_IFCHR:
+ case S_IFBLK:
+#ifdef S_IFSOCK
+ case S_IFSOCK:
+#endif
+#ifdef S_IFIFO
+ case S_IFIFO:
+#endif
+#ifdef S_IFNAM
+ case S_IFNAM:
+#endif
+ if ((st->st_size != 0) && (st->st_rdev == 0x0001)) {
+ /* FIXME: representation of major/minor differs between */
+ /* different operating systems. */
+ st->st_rdev = (unsigned) st->st_size;
+ st->st_size = 0;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if ((st->st_nlink > 1)
+ && ((super->u.arch.type == CPIO_NEWC)
+ || (super->u.arch.type == CPIO_CRC))) { /* For case of hardlinked files */
+ struct defer_inode i, *l;
+ i.inumber = st->st_ino;
+ i.device = st->st_dev;
+ i.inode = NULL;
+
+ l = cpio_defer_find (super->u.arch.deferred, &i);
+ if (l != NULL) {
+ inode = l->inode;
+ if (inode->st.st_size != 0 && st->st_size != 0
+ && (inode->st.st_size != st->st_size)) {
+ message (D_ERROR, MSG_ERROR,
+ _("Inconsistent hardlinks of\n%s\nin cpio archive\n%s"),
+ name, super->name);
+ inode = NULL;
+ } else if (inode->st.st_size == 0)
+ inode->st.st_size = st->st_size;
+ }
+ }
+
+ /* remove trailing slashes */
+ for (tn = name + strlen (name) - 1; tn >= name && *tn == PATH_SEP; tn--)
+ *tn = '\0';
+
+ tn = strrchr (name, PATH_SEP);
+ if (tn == NULL)
+ tn = name;
+ else {
+ *tn = '\0';
+ root = vfs_s_find_inode (me, super, name, LINK_FOLLOW, FL_MKDIR);
+ *tn = PATH_SEP;
+ tn++;
+ }
+
+ entry = MEDATA->find_entry (me, root, tn, LINK_FOLLOW, FL_NONE); /* In case entry is already there */
+
+ if (entry != NULL) {
+ /* This shouldn't happen! (well, it can happen if there is a record for a
+ file and than a record for a directory it is in; cpio would die with
+ 'No such file or directory' is such case) */
+
+ if (!S_ISDIR (entry->ino->st.st_mode)) {
+ /* This can be considered archive inconsistency */
+ message (D_ERROR, MSG_ERROR,
+ _("%s contains duplicate entries! Skipping!"),
+ super->name);
+ } else {
+ entry->ino->st.st_mode = st->st_mode;
+ entry->ino->st.st_uid = st->st_uid;
+ entry->ino->st.st_gid = st->st_gid;
+ entry->ino->st.st_atime = st->st_atime;
+ entry->ino->st.st_mtime = st->st_mtime;
+ entry->ino->st.st_ctime = st->st_ctime;
+ }
+
+ g_free (name);
+ } else { /* !entry */
+ if (inode == NULL) {
+ inode = vfs_s_new_inode (me, super, st);
+ if ((st->st_nlink > 0)
+ && ((super->u.arch.type == CPIO_NEWC)
+ || (super->u.arch.type == CPIO_CRC))) {
+ /* For case of hardlinked files */
+ struct defer_inode *i;
+ i = g_new (struct defer_inode, 1);
+ i->inumber = st->st_ino;
+ i->device = st->st_dev;
+ i->inode = inode;
+ i->next = super->u.arch.deferred;
+ super->u.arch.deferred = i;
+ }
+ }
+
+ if (st->st_size != 0)
+ inode->data_offset = CPIO_POS (super);
+
+ entry = vfs_s_new_entry (me, tn, inode);
+ vfs_s_insert_entry (me, root, entry);
+
+ g_free (name);
+
+ if (!S_ISLNK (st->st_mode))
+ CPIO_SEEK_CUR (super, st->st_size);
+ else {
+ inode->linkname = g_malloc (st->st_size + 1);
+
+ if (mc_read (super->u.arch.fd, inode->linkname, st->st_size) < st->st_size) {
+ inode->linkname[0] = '\0';
+ return STATUS_EOF;
+ }
+
+ inode->linkname[st->st_size] = '\0'; /* Linkname stored without terminating \0 !!! */
+ CPIO_POS (super) += st->st_size;
+ cpio_skip_padding (super);
+ }
+ } /* !entry */
+
+ return STATUS_OK;
+}
+
#define HEAD_LENGTH (26)
static ssize_t cpio_read_bin_head(struct vfs_class *me, struct vfs_s_super *super)
{
@@ -278,7 +411,7 @@ static ssize_t cpio_read_bin_head(struct vfs_class *me, struct vfs_s_super *supe
struct old_cpio_header buf;
short shorts[HEAD_LENGTH >> 1];
} u;
- int len;
+ ssize_t len;
char *name;
struct stat st;
@@ -333,7 +466,7 @@ static ssize_t cpio_read_oldc_head(struct vfs_class *me, struct vfs_s_super *sup
struct stat st;
char buf[HEAD_LENGTH + 1];
} u;
- int len;
+ ssize_t len;
char *name;
if (mc_read (super->u.arch.fd, u.buf, HEAD_LENGTH) != HEAD_LENGTH)
@@ -385,25 +518,28 @@ static ssize_t cpio_read_oldc_head(struct vfs_class *me, struct vfs_s_super *sup
#undef HEAD_LENGTH
#define HEAD_LENGTH (110)
-static ssize_t cpio_read_crc_head(struct vfs_class *me, struct vfs_s_super *super)
+static ssize_t
+cpio_read_crc_head (struct vfs_class *me, struct vfs_s_super *super)
{
struct new_cpio_header hd;
union {
struct stat st;
char buf[HEAD_LENGTH + 1];
} u;
- int len;
+ ssize_t len;
char *name;
if (mc_read (super->u.arch.fd, u.buf, HEAD_LENGTH) != HEAD_LENGTH)
return STATUS_EOF;
+
CPIO_POS (super) += HEAD_LENGTH;
- u.buf[HEAD_LENGTH] = 0;
+ u.buf[HEAD_LENGTH] = '\0';
if (sscanf (u.buf, "%6ho%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx",
&hd.c_magic, &hd.c_ino, &hd.c_mode, &hd.c_uid, &hd.c_gid,
&hd.c_nlink, &hd.c_mtime, &hd.c_filesize,
- (unsigned long *)&hd.c_dev, (unsigned long *)&hd.c_devmin, (unsigned long *)&hd.c_rdev, (unsigned long *)&hd.c_rdevmin,
+ (unsigned long *)&hd.c_dev, (unsigned long *)&hd.c_devmin,
+ (unsigned long *)&hd.c_rdev, (unsigned long *)&hd.c_rdevmin,
&hd.c_namesize, &hd.c_chksum) < 14) {
message (D_ERROR, MSG_ERROR, _("Corrupted cpio header encountered in\n%s"),
super->name);
@@ -421,8 +557,9 @@ static ssize_t cpio_read_crc_head(struct vfs_class *me, struct vfs_s_super *supe
}
name = g_malloc(hd.c_namesize);
- if((len = mc_read (super->u.arch.fd, name, hd.c_namesize)) == -1 ||
- (unsigned long) len < hd.c_namesize) {
+ len = mc_read (super->u.arch.fd, name, hd.c_namesize);
+
+ if ((len == -1) || ((unsigned long) len < hd.c_namesize)) {
g_free (name);
return STATUS_EOF;
}
@@ -430,7 +567,7 @@ static ssize_t cpio_read_crc_head(struct vfs_class *me, struct vfs_s_super *supe
CPIO_POS(super) += len;
cpio_skip_padding(super);
- if(!strcmp("TRAILER!!!", name)) { /* We got to the last record */
+ if (strcmp ("TRAILER!!!", name) == 0) { /* We got to the last record */
g_free(name);
return STATUS_TRAIL;
}
@@ -448,128 +585,6 @@ static ssize_t cpio_read_crc_head(struct vfs_class *me, struct vfs_s_super *supe
return cpio_create_entry (me, super, &u.st, name);
}
-static int
-cpio_create_entry (struct vfs_class *me, struct vfs_s_super *super,
- struct stat *st, char *name)
-{
- struct vfs_s_inode *inode = NULL;
- struct vfs_s_inode *root = super->root;
- struct vfs_s_entry *entry = NULL;
- char *tn;
-
- switch (st->st_mode & S_IFMT) { /* For case of HP/UX archives */
- case S_IFCHR:
- case S_IFBLK:
-#ifdef S_IFSOCK
- case S_IFSOCK:
-#endif
-#ifdef S_IFIFO
- case S_IFIFO:
-#endif
-#ifdef S_IFNAM
- case S_IFNAM:
-#endif
- if ((st->st_size != 0) && (st->st_rdev == 0x0001)) {
- /* FIXME: representation of major/minor differs between */
- /* different operating systems. */
- st->st_rdev = (unsigned) st->st_size;
- st->st_size = 0;
- }
- break;
- default:
- break;
- }
-
- if ((st->st_nlink > 1) && (super->u.arch.type == CPIO_NEWC || super->u.arch.type == CPIO_CRC)) { /* For case of hardlinked files */
- struct defer_inode i, *l;
- i.inumber = st->st_ino;
- i.device = st->st_dev;
- i.inode = NULL;
- if ((l = cpio_defer_find (super->u.arch.deferred, &i)) != NULL) {
- inode = l->inode;
- if (inode->st.st_size && st->st_size
- && (inode->st.st_size != st->st_size)) {
- message (D_ERROR, MSG_ERROR,
- _
- ("Inconsistent hardlinks of\n%s\nin cpio archive\n%s"),
- name, super->name);
- inode = NULL;
- } else if (!inode->st.st_size)
- inode->st.st_size = st->st_size;
- }
- }
-
- for (tn = name + strlen (name) - 1; tn >= name && *tn == PATH_SEP; tn--)
- *tn = 0;
- if ((tn = strrchr (name, PATH_SEP))) {
- *tn = 0;
- root = vfs_s_find_inode (me, super, name, LINK_FOLLOW, FL_MKDIR);
- *tn = PATH_SEP;
- tn++;
- } else
- tn = name;
-
- entry = MEDATA->find_entry (me, root, tn, LINK_FOLLOW, FL_NONE); /* In case entry is already there */
-
- if (entry) { /* This shouldn't happen! (well, it can happen if there is a record for a
- file and than a record for a directory it is in; cpio would die with
- 'No such file or directory' is such case) */
-
- if (!S_ISDIR (entry->ino->st.st_mode)) { /* This can be considered archive inconsistency */
- message (D_ERROR, MSG_ERROR,
- _("%s contains duplicate entries! Skipping!"),
- super->name);
- } else {
- entry->ino->st.st_mode = st->st_mode;
- entry->ino->st.st_uid = st->st_uid;
- entry->ino->st.st_gid = st->st_gid;
- entry->ino->st.st_atime = st->st_atime;
- entry->ino->st.st_mtime = st->st_mtime;
- entry->ino->st.st_ctime = st->st_ctime;
- }
-
- } else { /* !entry */
-
- if (!inode) {
- inode = vfs_s_new_inode (me, super, st);
- if ((st->st_nlink > 0) && (super->u.arch.type == CPIO_NEWC || super->u.arch.type == CPIO_CRC)) { /* For case of hardlinked files */
- struct defer_inode *i;
- i = g_new (struct defer_inode, 1);
- i->inumber = st->st_ino;
- i->device = st->st_dev;
- i->inode = inode;
- i->next = super->u.arch.deferred;
- super->u.arch.deferred = i;
- }
- }
-
- if (st->st_size)
- inode->data_offset = CPIO_POS (super);
-
- entry = vfs_s_new_entry (me, tn, inode);
- vfs_s_insert_entry (me, root, entry);
-
- if (S_ISLNK (st->st_mode)) {
- inode->linkname = g_malloc (st->st_size + 1);
- if (mc_read (super->u.arch.fd, inode->linkname, st->st_size)
- < st->st_size) {
- inode->linkname[0] = 0;
- g_free (name);
- return STATUS_EOF;
- }
- inode->linkname[st->st_size] = 0; /* Linkname stored without terminating \0 !!! */
- CPIO_POS (super) += st->st_size;
- cpio_skip_padding (super);
- } else {
- CPIO_SEEK_CUR (super, st->st_size);
- }
-
- } /* !entry */
-
- g_free (name);
- return STATUS_OK;
-}
-
/* Need to CPIO_SEEK_CUR to skip the file at the end of add entry!!!! */
static int
diff --git a/vfs/direntry.c b/vfs/direntry.c
index f7a8bfb..80b0b12 100644
--- a/vfs/direntry.c
+++ b/vfs/direntry.c
@@ -400,12 +400,12 @@ vfs_s_find_inode (struct vfs_class *me, const struct vfs_s_super *super,
const char *path, int follow, int flags)
{
struct vfs_s_entry *ent;
- if (!(MEDATA->flags & VFS_S_REMOTE) && (!*path))
+
+ if (((MEDATA->flags & VFS_S_REMOTE) == 0) && (*path == '\0'))
return super->root;
+
ent = (MEDATA->find_entry) (me, super->root, path, follow, flags);
- if (!ent)
- return NULL;
- return ent->ino;
+ return (ent != NULL) ? ent->ino : NULL;
}
/* Ook, these were functions around directory entries / inodes */
@@ -488,9 +488,8 @@ vfs_s_get_path_mangle (struct vfs_class *me, char *inname,
for (super = MEDATA->supers; super != NULL; super = super->next) {
/* 0 == other, 1 == same, return it, 2 == other but stop scanning */
- int i;
- if ((i =
- MEDATA->archive_same (me, super, archive_name, op, cookie))) {
+ int i = MEDATA->archive_same (me, super, archive_name, op, cookie);
+ if (i != 0) {
if (i == 1)
goto return_success;
else
diff --git a/vfs/vfs.c b/vfs/vfs.c
index 7c1de54..f8eb7a1 100644
--- a/vfs/vfs.c
+++ b/vfs/vfs.c
@@ -1124,7 +1124,8 @@ static char *
mc_def_getlocalcopy (const char *filename)
{
char *tmp;
- int fdin, fdout, i;
+ int fdin, fdout;
+ ssize_t i;
char buffer[8192];
struct stat mystat;
commit f84917a188f6f88cdc0d0d0067beefc13d42f40a
Author: Andrew Borodin <aborodin@vmail.ru>
Date: Thu Nov 19 10:51:21 2009 +0300
Fixed skip of empty directories in the root of cpio archive.
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
diff --git a/vfs/cpio.c b/vfs/cpio.c
index 8c24573..0af9cda 100644
--- a/vfs/cpio.c
+++ b/vfs/cpio.c
@@ -331,7 +331,10 @@ cpio_create_entry (struct vfs_class *me, struct vfs_s_super *super,
tn = strrchr (name, PATH_SEP);
if (tn == NULL)
tn = name;
- else {
+ else if (tn == name + 1) {
+ /* started with "./" -- directory in the root of archive */
+ tn++;
+ } else {
*tn = '\0';
root = vfs_s_find_inode (me, super, name, LINK_FOLLOW, FL_MKDIR);
*tn = PATH_SEP;
@@ -341,7 +344,7 @@ cpio_create_entry (struct vfs_class *me, struct vfs_s_super *super,
entry = MEDATA->find_entry (me, root, tn, LINK_FOLLOW, FL_NONE); /* In case entry is already there */
if (entry != NULL) {
- /* This shouldn't happen! (well, it can happen if there is a record for a
+ /* This shouldn't happen! (well, it can happen if there is a record for a
file and than a record for a directory it is in; cpio would die with
'No such file or directory' is such case) */

12
mc.spec
View File

@ -1,7 +1,7 @@
Summary: User-friendly text console file manager and visual shell
Name: mc
Version: 4.7.0
Release: 0.7.pre4%{?dist}
Release: 0.8.pre4%{?dist}
Epoch: 1
License: GPLv2
Group: System Environment/Shells
@ -12,7 +12,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: glib2-devel e2fsprogs-devel slang-devel gpm-devel
Requires: dev >= 3.3-3
Patch2: mc-extensions.patch
Patch0: mc-extensions.patch
Patch1: mc-rpmvfs.patch
%description
Midnight Commander is a visual shell much like a file manager, only
@ -23,7 +24,8 @@ specific files.
%prep
%setup -q -n mc-%{version}-pre4
%patch2 -p1 -b .extensions
%patch0 -p1 -b .extensions
%patch1 -p1 -b .rpmvfs
%build
export CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $RPM_OPT_FLAGS"
@ -79,6 +81,10 @@ rm -rf $RPM_BUILD_ROOT
%dir %{_libexecdir}/mc
%changelog
* Tue Dec 15 2009 Jindrich Novy <jnovy@redhat.com> 4.7.0-0.8.pre4
- fix rpmvfs empty directory handling (#529645)
- fix bindings (#532784)
* Mon Nov 02 2009 Jindrich Novy <jnovy@redhat.com> 4.7.0-0.7.pre4
- update to 4.7.0-pre4