Check {fsm,psm} for orphans.
CVS patchset: 5381 CVS date: 2002/04/08 20:09:40
This commit is contained in:
parent
b5f320dfac
commit
5c1ca96c96
17
lib/fsm.c
17
lib/fsm.c
|
@ -833,7 +833,9 @@ static int writeFile(/*@special@*/ FSM_t fsm, int writeData)
|
|||
rdbuf = fsm->rdbuf;
|
||||
fsm->rdbuf = (char *) mapped;
|
||||
fsm->rdlen = nmapped = st->st_size;
|
||||
#if defined(MADV_DONTNEED)
|
||||
xx = madvise(mapped, nmapped, MADV_DONTNEED);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -861,6 +863,9 @@ static int writeFile(/*@special@*/ FSM_t fsm, int writeData)
|
|||
#if HAVE_MMAP
|
||||
if (mapped != (void *)-1) {
|
||||
xx = msync(mapped, nmapped, MS_ASYNC);
|
||||
#if defined(MADV_DONTNEED)
|
||||
xx = madvise(mapped, nmapped, MADV_DONTNEED);
|
||||
#endif
|
||||
/*@-noeffect@*/ xx = munmap(mapped, nmapped) /*@=noeffect@*/;
|
||||
fsm->rdbuf = rdbuf;
|
||||
}
|
||||
|
@ -1249,6 +1254,12 @@ static int fsmStat(FSM_t fsm)
|
|||
}
|
||||
#endif
|
||||
|
||||
#define IS_DEV_LOG(_x) \
|
||||
((_x) != NULL && strlen(_x) >= (sizeof("/dev/log")-1) && \
|
||||
!strncmp((_x), "/dev/log", sizeof("/dev/log")-1) && \
|
||||
((_x)[sizeof("/dev/log")-1] == '\0' || \
|
||||
(_x)[sizeof("/dev/log")-1] == ';'))
|
||||
|
||||
/*@-compmempass@*/
|
||||
int fsmStage(FSM_t fsm, fileStage stage)
|
||||
{
|
||||
|
@ -1656,7 +1667,7 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break;
|
|||
rc = fsmStage(fsm, FSM_MKNOD);
|
||||
} else {
|
||||
/* XXX Special case /dev/log, which shouldn't be packaged anyways */
|
||||
if (strncmp(fsm->path, "/dev/log;", sizeof("/dev/log;")-1))
|
||||
if (!IS_DEV_LOG(fsm->path))
|
||||
rc = CPIOERR_UNKNOWN_FILETYPE;
|
||||
}
|
||||
if (!S_ISDIR(st->st_mode) && st->st_nlink > 1) {
|
||||
|
@ -1780,9 +1791,7 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break;
|
|||
}
|
||||
|
||||
/* XXX Special case /dev/log, which shouldn't be packaged anyways */
|
||||
if (!S_ISSOCK(st->st_mode)
|
||||
&& strncmp(fsm->path, "/dev/log;", sizeof("/dev/log;")-1))
|
||||
{
|
||||
if (!S_ISSOCK(st->st_mode) && !IS_DEV_LOG(fsm->path)) {
|
||||
/* Rename temporary to final file name. */
|
||||
if (!S_ISDIR(st->st_mode) &&
|
||||
(fsm->subdir || fsm->suffix || fsm->nsuffix))
|
||||
|
|
13
lib/psm.c
13
lib/psm.c
|
@ -1539,6 +1539,13 @@ assert(psm->mi == NULL);
|
|||
(psm->failedFile != NULL ? psm->failedFile : ""),
|
||||
cpioStrerror(rc));
|
||||
rc = RPMRC_FAIL;
|
||||
|
||||
/* XXX notify callback on error. */
|
||||
psm->what = RPMCALLBACK_UNPACK_ERROR;
|
||||
psm->amount = 0;
|
||||
psm->total = 0;
|
||||
xx = psmStage(psm, PSM_NOTIFY);
|
||||
|
||||
break;
|
||||
}
|
||||
psm->what = RPMCALLBACK_INST_PROGRESS;
|
||||
|
@ -1728,6 +1735,12 @@ assert(psm->mi == NULL);
|
|||
else
|
||||
rpmError(RPMERR_CPIO, _("%s failed: %s\n"),
|
||||
psm->stepName, cpioStrerror(rc));
|
||||
|
||||
/* XXX notify callback on error. */
|
||||
psm->what = RPMCALLBACK_CPIO_ERROR;
|
||||
psm->amount = 0;
|
||||
psm->total = 0;
|
||||
xx = psmStage(psm, PSM_NOTIFY);
|
||||
}
|
||||
|
||||
if (fi->h && (psm->goal == PSM_PKGERASE || psm->goal == PSM_PKGSAVE))
|
||||
|
|
Loading…
Reference in New Issue