From 803528c258d2c14b820a9b2fb5bf2eba9a486133 Mon Sep 17 00:00:00 2001 From: jbj Date: Sun, 23 Mar 2003 00:36:13 +0000 Subject: [PATCH] Make peace with automake-1.7.3. Recheck thread safety markes with fsm synchronous threads. CVS patchset: 6714 CVS date: 2003/03/23 00:36:13 --- autogen.sh | 4 +- beecrypt/autogen.sh | 4 +- elfutils/lib/Makefile.am | 29 ++++++++---- elfutils/libasm/Makefile.am | 2 +- elfutils/libdw/Makefile.am | 2 +- elfutils/libdwarf/Makefile.am | 2 +- elfutils/libebl/Makefile.am | 2 +- elfutils/libelf/Makefile.am | 2 +- elfutils/tests/Makefile.am | 108 ++++++++++++++++++++++++++---------------- expat/autogen.sh | 4 +- file/autogen.sh | 4 +- lib/cpio.c | 2 + lib/cpio.h | 4 +- lib/fsm.c | 77 ++++++++++++++++++------------ 14 files changed, 153 insertions(+), 93 deletions(-) diff --git a/autogen.sh b/autogen.sh index b103cc0..cbdc986 100755 --- a/autogen.sh +++ b/autogen.sh @@ -5,12 +5,12 @@ export LDFLAGS LTV="libtoolize (GNU libtool) 1.4.3" ACV="autoconf (GNU Autoconf) 2.57" -AMV="automake (GNU automake) 1.6.3" +AMV="automake (GNU automake) 1.7.3" USAGE=" This script documents the versions of the tools I'm using to build rpm: libtool-1.4.3 autoconf-2.57 - automake-1.6.3 + automake-1.7.3 Simply edit this script to change the libtool/autoconf/automake versions checked if you need to, as rpm should build (and has built) with all recent versions of libtool/autoconf/automake. diff --git a/beecrypt/autogen.sh b/beecrypt/autogen.sh index 0a7254f..b35834f 100755 --- a/beecrypt/autogen.sh +++ b/beecrypt/autogen.sh @@ -5,12 +5,12 @@ export LDFLAGS LTV="libtoolize (GNU libtool) 1.4.3" ACV="autoconf (GNU Autoconf) 2.57" -AMV="automake (GNU automake) 1.6.3" +AMV="automake (GNU automake) 1.7.3" USAGE=" This script documents the versions of the tools I'm using to build rpm: libtool-1.4.3 autoconf-2.57 - automake-1.6.3 + automake-1.7.3 Simply edit this script to change the libtool/autoconf/automake versions checked if you need to, as rpm should build (and has built) with all recent versions of libtool/autoconf/automake. diff --git a/elfutils/lib/Makefile.am b/elfutils/lib/Makefile.am index a41d15d..54dad01 100644 --- a/elfutils/lib/Makefile.am +++ b/elfutils/lib/Makefile.am @@ -1,12 +1,25 @@ ## Process this file with automake to create Makefile.in - -AUTOMAKE_OPTIONS = 1.4 gnits - -noinst_LTLIBRARIES = libbu.la - +## Configure input file for elfutils. +## +## Copyright (C) 1996-2001, 2002 Red Hat, Inc. +## +## This program is Open Source software; you can redistribute it and/or +## modify it under the terms of the Open Software License version 1.0 as +## published by the Open Source Initiative. +## +## You should have received a copy of the Open Software License along +## with this program; if not, you may obtain a copy of the Open Software +## License version 1.0 from http://www.opensource.org/licenses/osl.php or +## by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +## 3001 King Ranch Road, Ukiah, CA 95482. +## +DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H +AM_CFLAGS = -Wall # -Werror INCLUDES = -I$(srcdir)/../libelf -I.. -libbu_la_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c +noinst_LIBRARIES = libeu.a + +libeu_a_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c crc32.c -noinst_HEADERS = fixedsizehash.h system.h \ - dynamicsizehash.h dynamicsizehash.c +noinst_HEADERS = fixedsizehash.h system.h dynamicsizehash.h +EXTRA_DIST = dynamicsizehash.c diff --git a/elfutils/libasm/Makefile.am b/elfutils/libasm/Makefile.am index b96884a..08c1810 100644 --- a/elfutils/libasm/Makefile.am +++ b/elfutils/libasm/Makefile.am @@ -14,7 +14,7 @@ ## 3001 King Ranch Road, Ukiah, CA 95482. ## DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -AM_CFLAGS = -Wall -Werror +AM_CFLAGS = -Wall # -Werror INCLUDES = -I. -I$(srcdir) -I.. -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl \ -I$(top_srcdir)/lib GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include) diff --git a/elfutils/libdw/Makefile.am b/elfutils/libdw/Makefile.am index 043e692..366739e 100644 --- a/elfutils/libdw/Makefile.am +++ b/elfutils/libdw/Makefile.am @@ -17,7 +17,7 @@ ## Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -AM_CFLAGS = -Wall -Werror -Wshadow +AM_CFLAGS = -Wall -Wshadow # -Werror INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I.. -I$(srcdir)/../lib LINT = splint diff --git a/elfutils/libdwarf/Makefile.am b/elfutils/libdwarf/Makefile.am index d53efbe..ee26ef8 100644 --- a/elfutils/libdwarf/Makefile.am +++ b/elfutils/libdwarf/Makefile.am @@ -14,7 +14,7 @@ ## 3001 King Ranch Road, Ukiah, CA 95482. ## DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DDWARF_DEBUG -AM_CFLAGS = -Wall -Werror +AM_CFLAGS = -Wall # -Werror INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I.. -I$(srcdir)/../lib VERSION = 1 diff --git a/elfutils/libebl/Makefile.am b/elfutils/libebl/Makefile.am index b705bab..2b67ff5 100644 --- a/elfutils/libebl/Makefile.am +++ b/elfutils/libebl/Makefile.am @@ -14,7 +14,7 @@ ## 3001 King Ranch Road, Ukiah, CA 95482. ## DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -Wall -AM_CFLAGS = -Wall -Werror -DOBJDIR=\"$(shell pwd)\" +AM_CFLAGS = -Wall -DOBJDIR=\"$(shell pwd)\" # -Werror LINT = splint diff --git a/elfutils/libelf/Makefile.am b/elfutils/libelf/Makefile.am index 4da8345..9458ddb 100644 --- a/elfutils/libelf/Makefile.am +++ b/elfutils/libelf/Makefile.am @@ -14,7 +14,7 @@ ## 3001 King Ranch Road, Ukiah, CA 95482. ## DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -AM_CFLAGS = -Wall -Werror +AM_CFLAGS = -Wall # -Werror INCLUDES = -I$(srcdir) -I$(top_srcdir)/lib -I.. GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include) VERSION = 1 diff --git a/elfutils/tests/Makefile.am b/elfutils/tests/Makefile.am index 47555e8..0d45304 100644 --- a/elfutils/tests/Makefile.am +++ b/elfutils/tests/Makefile.am @@ -1,9 +1,22 @@ ## Process this file with automake to create Makefile.in - -AUTOMAKE_OPTIONS = 1.4 gnits +## Configure input file for elfutils. +## +## Copyright (C) 1996-2001, 2002 Red Hat, Inc. +## +## This program is Open Source software; you can redistribute it and/or +## modify it under the terms of the Open Software License version 1.0 as +## published by the Open Source Initiative. +## +## You should have received a copy of the Open Software License along +## with this program; if not, you may obtain a copy of the Open Software +## License version 1.0 from http://www.opensource.org/licenses/osl.php or +## by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +## 3001 King Ranch Road, Ukiah, CA 95482. +## DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE -AM_CFLAGS = -Wall -Werror +AM_CFLAGS = -Wall # -Werror INCLUDES = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdwarf \ + -I$(top_srcdir)/libdw \ -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \ -I$(top_srcdir)/lib -I.. @@ -12,7 +25,9 @@ noinst_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ get-cus firstdie show-dies show-tags show-die-info1 \ show-die-info2 get-lines get-files get-pubnames get-aranges \ show-ciefde show-abbrev hash asm-tst1 asm-tst2 asm-tst3 \ - asm-tst4 asm-tst5 asm-tst6 asm-tst7 asm-tst8 msg_tst + asm-tst4 asm-tst5 asm-tst6 asm-tst7 asm-tst8 asm-tst9 \ + msg_tst newscn ecp \ + get-pubnames2 TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ update1 update2 update3 update4 run-get-cus.sh \ @@ -20,47 +35,60 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-show-die-info1.sh run-show-die-info2.sh run-get-files.sh \ run-get-lines.sh run-get-pubnames.sh run-get-aranges.sh \ run-show-ciefde.sh run-show-abbrev.sh hash asm-tst1 asm-tst2 \ - asm-tst3 asm-tst4 asm-tst5 asm-tst6 asm-tst7 asm-tst8 msg_tst + asm-tst3 asm-tst4 asm-tst5 asm-tst6 asm-tst7 asm-tst8 asm-tst9 \ + msg_tst newscn run-strip-test.sh run-strip-test2.sh \ + run-get-pubnames2.sh run-ecp-test.sh run-ecp-test2.sh EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-firstdie.sh \ run-show-dies.sh run-show-tags.sh run-show-die-info1.sh \ run-show-die-info2.sh run-get-files.sh run-get-lines.sh \ run-get-pubnames.sh run-get-aranges.sh run-get-cus.sh \ - run-show-ciefde.sh run-show-abbrev.sh + run-show-ciefde.sh run-show-abbrev.sh run-strip-test.sh \ + run-strip-test2.sh run-ecp-test.sh run-ecp-test2.sh \ + run-get-pubnames2.sh \ + testfile testfile2 testfile3 testfile4 testfile5 \ + testfile6.bz2 testfile7.bz2 testfile8.bz2 testfile9.bz2 \ + testfile10 + +TESTS_ENVIRONMENT = LD_LIBRARY_PATH="../libelf:../libebl:../libasm:../libdwarf:../libdw$${LD_LIBRARY_PATH:+:}$$LD_LIBRARY_PATH" -arextract_LDADD = ../libelf/libelf.la -arsymtest_LDADD = ../libelf/libelf.la -newfile_LDADD = ../libelf/libelf.la -saridx_LDADD = ../libelf/libelf.la -scnnames_LDADD = ../libelf/libelf.la -sectiondump_LDADD = ../libelf/libelf.la -showptable_LDADD = ../libelf/libelf.la -update1_LDADD = ../libelf/libelf.la -update2_LDADD = ../libelf/libelf.la -update3_LDADD = ../libebl/libebl.la ../libelf/libelf.la ../lib/libbu.la -update4_LDADD = ../libebl/libebl.la ../libelf/libelf.la ../lib/libbu.la -test_nlist_LDADD = ../libelf/libelf.la -get_cus_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -firstdie_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -show_dies_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -show_tags_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -show_die_info1_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -show_die_info2_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -get_lines_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -get_files_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -get_pubnames_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -get_aranges_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -show_ciefde_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -show_abbrev_LDADD = ../libdwarf/libdwarf.la ../libelf/libelf.la -hash_LDADD = ../libelf/libelf.la -asm_tst1_LDADD = ../libasm/libasm.la ../libebl/libebl.la ../libelf/libelf.la -asm_tst2_LDADD = ../libasm/libasm.la ../libebl/libebl.la ../libelf/libelf.la -asm_tst3_LDADD = ../libasm/libasm.la ../libebl/libebl.la ../libelf/libelf.la -asm_tst4_LDADD = ../libasm/libasm.la ../libebl/libebl.la ../libelf/libelf.la -asm_tst5_LDADD = ../libasm/libasm.la ../libebl/libebl.la ../libelf/libelf.la -asm_tst6_LDADD = ../libasm/libasm.la ../libebl/libebl.la ../libelf/libelf.la -asm_tst7_LDADD = ../libasm/libasm.la ../libebl/libebl.la ../libelf/libelf.la -asm_tst8_LDADD = ../libasm/libasm.la ../libebl/libebl.la ../libelf/libelf.la -msg_tst_LDADD = ../libelf/libelf.la +arextract_LDADD = ../libelf/libelf.so +arsymtest_LDADD = ../libelf/libelf.so +newfile_LDADD = ../libelf/libelf.so +saridx_LDADD = ../libelf/libelf.so +scnnames_LDADD = ../libelf/libelf.so +sectiondump_LDADD = ../libelf/libelf.so +showptable_LDADD = ../libelf/libelf.so +update1_LDADD = ../libelf/libelf.so +update2_LDADD = ../libelf/libelf.so +update3_LDADD = ../libebl/libebl.so ../libelf/libelf.so +update4_LDADD = ../libebl/libebl.so ../libelf/libelf.so +test_nlist_LDADD = ../libelf/libelf.so +get_cus_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +firstdie_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +show_dies_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +show_tags_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +show_die_info1_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +show_die_info2_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +get_lines_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +get_files_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +get_pubnames_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +get_aranges_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +show_ciefde_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +show_abbrev_LDADD = ../libdwarf/libdwarf.so ../libelf/libelf.so +hash_LDADD = ../libelf/libelf.so +asm_tst1_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +asm_tst2_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +asm_tst3_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +asm_tst4_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +asm_tst5_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +asm_tst6_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +asm_tst7_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +asm_tst8_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +asm_tst9_LDADD = ../libasm/libasm.so ../libebl/libebl.so ../libelf/libelf.so +msg_tst_LDADD = ../libelf/libelf.so +newscn_LDADD = ../libelf/libelf.so +ecp_LDADD = ../libelf/libelf.so +get_pubnames2_LDADD = ../libdw/libdw.so ../libelf/libelf.so CLEANFILES = xxx diff --git a/expat/autogen.sh b/expat/autogen.sh index 0a7254f..b35834f 100755 --- a/expat/autogen.sh +++ b/expat/autogen.sh @@ -5,12 +5,12 @@ export LDFLAGS LTV="libtoolize (GNU libtool) 1.4.3" ACV="autoconf (GNU Autoconf) 2.57" -AMV="automake (GNU automake) 1.6.3" +AMV="automake (GNU automake) 1.7.3" USAGE=" This script documents the versions of the tools I'm using to build rpm: libtool-1.4.3 autoconf-2.57 - automake-1.6.3 + automake-1.7.3 Simply edit this script to change the libtool/autoconf/automake versions checked if you need to, as rpm should build (and has built) with all recent versions of libtool/autoconf/automake. diff --git a/file/autogen.sh b/file/autogen.sh index 0a7254f..b35834f 100755 --- a/file/autogen.sh +++ b/file/autogen.sh @@ -5,12 +5,12 @@ export LDFLAGS LTV="libtoolize (GNU libtool) 1.4.3" ACV="autoconf (GNU Autoconf) 2.57" -AMV="automake (GNU automake) 1.6.3" +AMV="automake (GNU automake) 1.7.3" USAGE=" This script documents the versions of the tools I'm using to build rpm: libtool-1.4.3 autoconf-2.57 - automake-1.6.3 + automake-1.7.3 Simply edit this script to change the libtool/autoconf/automake versions checked if you need to, as rpm should build (and has built) with all recent versions of libtool/autoconf/automake. diff --git a/lib/cpio.c b/lib/cpio.c index c72c536..24bb52e 100644 --- a/lib/cpio.c +++ b/lib/cpio.c @@ -235,6 +235,8 @@ const char *const cpioStrerror(int rc) case CPIOERR_MD5SUM_MISMATCH: s = _("MD5 sum mismatch"); break; case CPIOERR_INTERNAL: s = _("Internal error"); break; case CPIOERR_UNMAPPED_FILE: s = _("Archive file not in header"); break; + case CPIOERR_ENOENT: s = strerror(ENOENT); break; + case CPIOERR_ENOTEMPTY: s = strerror(ENOTEMPTY); break; } /*@=branchstate@*/ diff --git a/lib/cpio.h b/lib/cpio.h index b6ef297..3f95a55 100644 --- a/lib/cpio.h +++ b/lib/cpio.h @@ -47,7 +47,9 @@ enum cpioErrorReturns { CPIOERR_MISSING_HARDLINK= (25 ), CPIOERR_MD5SUM_MISMATCH = (26 ), CPIOERR_INTERNAL = (27 ), - CPIOERR_UNMAPPED_FILE = (28 ) + CPIOERR_UNMAPPED_FILE = (28 ), + CPIOERR_ENOENT = (29 ), + CPIOERR_ENOTEMPTY = (30 ) }; /** \ingroup payload diff --git a/lib/fsm.c b/lib/fsm.c index 81d373b..0f3eda7 100644 --- a/lib/fsm.c +++ b/lib/fsm.c @@ -572,10 +572,10 @@ int fsmSetup(FSM_t fsm, fileStage goal, } ec = fsm->rc = 0; - rc = fsmNext(fsm, FSM_CREATE); + rc = fsmUNSAFE(fsm, FSM_CREATE); if (rc && !ec) ec = rc; - rc = fsmNext(fsm, fsm->goal); + rc = fsmUNSAFE(fsm, fsm->goal); if (rc && !ec) ec = rc; /*@-boundswrite@*/ @@ -591,7 +591,7 @@ int fsmTeardown(FSM_t fsm) int rc = fsm->rc; if (!rc) - rc = fsmNext(fsm, FSM_DESTROY); + rc = fsmUNSAFE(fsm, FSM_DESTROY); fsm->iter = mapFreeIterator(fsm->iter); if (fsm->cfd != NULL) { @@ -851,7 +851,7 @@ static int writeFile(/*@special@*/ FSM_t fsm, int writeData) * I don't think that's a specified standard. */ /* XXX NUL terminated result in fsm->rdbuf, len in fsm->rdnb. */ - rc = fsmNext(fsm, FSM_READLINK); + rc = fsmUNSAFE(fsm, FSM_READLINK); if (rc) goto exit; st->st_size = fsm->rdnb; symbuf = alloca_strdup(fsm->rdbuf); /* XXX save readlink return. */ @@ -1048,7 +1048,7 @@ static int fsmMakeLinks(/*@special@*/ FSM_t fsm) rc = fsmUNSAFE(fsm, FSM_VERIFY); if (!rc) continue; - if (rc != CPIOERR_LSTAT_FAILED) break; + if (!(rc == CPIOERR_ENOENT)) break; /* XXX link(fsm->opath, fsm->path) */ rc = fsmNext(fsm, FSM_LINK); @@ -1251,7 +1251,7 @@ static int fsmMkdirs(/*@special@*/ FSM_t fsm) if (rc == 0 && S_ISDIR(ost->st_mode)) { /* Move pre-existing path marker forward. */ fsm->dnlx[dc] = (te - dn); - } else if (rc == CPIOERR_LSTAT_FAILED) { + } else if (rc == CPIOERR_ENOENT) { rpmfi fi = fsmGetFi(fsm); *te = '\0'; st->st_mode = S_IFDIR | (fi->dperms & 07777); @@ -1305,9 +1305,9 @@ static int fsmStat(FSM_t fsm) if (fsm->path != NULL) { int saveernno = errno; - rc = fsmNext(fsm, (!(fsm->mapFlags & CPIO_FOLLOW_SYMLINKS) + rc = fsmUNSAFE(fsm, (!(fsm->mapFlags & CPIO_FOLLOW_SYMLINKS) ? FSM_LSTAT : FSM_STAT)); - if (rc == CPIOERR_LSTAT_FAILED && errno == ENOENT) { + if (rc == CPIOERR_ENOENT) { errno = saveerrno; rc = 0; fsm->exists = 0; @@ -1587,9 +1587,9 @@ int fsmStage(FSM_t fsm, fileStage stage) if (fsm->path != NULL && !(fsm->goal == FSM_PKGINSTALL && S_ISREG(st->st_mode))) { - rc = fsmNext(fsm, (!(fsm->mapFlags & CPIO_FOLLOW_SYMLINKS) + rc = fsmUNSAFE(fsm, (!(fsm->mapFlags & CPIO_FOLLOW_SYMLINKS) ? FSM_LSTAT : FSM_STAT)); - if (rc == CPIOERR_LSTAT_FAILED && errno == ENOENT) { + if (rc == CPIOERR_ENOENT) { errno = saveerrno; rc = 0; fsm->exists = 0; @@ -1691,12 +1691,12 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; /*@-dependenttrans@*/ fsm->path = path; /*@=dependenttrans@*/ - if (rc != CPIOERR_LSTAT_FAILED) return rc; + if (!(rc == CPIOERR_ENOENT)) return rc; rc = expandRegular(fsm); } else if (S_ISDIR(st->st_mode)) { mode_t st_mode = st->st_mode; rc = fsmUNSAFE(fsm, FSM_VERIFY); - if (rc == CPIOERR_LSTAT_FAILED) { + if (rc == CPIOERR_ENOENT) { st->st_mode &= ~07777; /* XXX abuse st->st_mode */ st->st_mode |= 00700; rc = fsmNext(fsm, FSM_MKDIR); @@ -1724,14 +1724,14 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; fsm->opath = fsm->wrbuf; /*@=dependenttrans@*/ rc = fsmUNSAFE(fsm, FSM_VERIFY); - if (rc == CPIOERR_LSTAT_FAILED) + if (rc == CPIOERR_ENOENT) rc = fsmNext(fsm, FSM_SYMLINK); fsm->opath = opath; /* XXX restore fsm->path */ } else if (S_ISFIFO(st->st_mode)) { mode_t st_mode = st->st_mode; /* This mimics cpio S_ISSOCK() behavior but probably isnt' right */ rc = fsmUNSAFE(fsm, FSM_VERIFY); - if (rc == CPIOERR_LSTAT_FAILED) { + if (rc == CPIOERR_ENOENT) { st->st_mode = 0000; /* XXX abuse st->st_mode */ rc = fsmNext(fsm, FSM_MKFIFO); st->st_mode = st_mode; /* XXX restore st->st_mode */ @@ -1741,7 +1741,7 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; /*@-unrecog@*/ S_ISSOCK(st->st_mode) /*@=unrecog@*/) { rc = fsmUNSAFE(fsm, FSM_VERIFY); - if (rc == CPIOERR_LSTAT_FAILED) + if (rc == CPIOERR_ENOENT) rc = fsmNext(fsm, FSM_MKNOD); } else { /* XXX Special case /dev/log, which shouldn't be packaged anyways */ @@ -1833,9 +1833,9 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; if (S_ISDIR(st->st_mode)) { rc = fsmNext(fsm, FSM_RMDIR); if (!rc) break; - switch (errno) { - case ENOENT: /* XXX rmdir("/") linux 2.2.x kernel hack */ - case ENOTEMPTY: + switch (rc) { + case CPIOERR_ENOENT: /* XXX rmdir("/") linux 2.2.x kernel hack */ + case CPIOERR_ENOTEMPTY: /* XXX make sure that build side permits %missingok on directories. */ if (fsm->fflags & RPMFILE_MISSINGOK) /*@innerbreak@*/ break; @@ -1856,11 +1856,18 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; } else { rc = fsmNext(fsm, FSM_UNLINK); if (!rc) break; - if (!(errno == ENOENT && (fsm->fflags & RPMFILE_MISSINGOK))) + switch (rc) { + case CPIOERR_ENOENT: + if (fsm->fflags & RPMFILE_MISSINGOK) + /*@innerbreak@*/ break; + /*@fallthrough@*/ + default: rpmError( (strict_erasures ? RPMERR_UNLINK : RPMDEBUG_UNLINK), _("%s unlink of %s failed: %s\n"), rpmfiTypeString(fi), fsm->path, strerror(errno)); + /*@innerbreak@*/ break; + } } } /* XXX Failure to remove is not (yet) cause for failure. */ @@ -1953,7 +1960,7 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; break; case FSM_VERIFY: if (fsm->diskchecked && !fsm->exists) { - rc = CPIOERR_LSTAT_FAILED; + rc = CPIOERR_ENOENT; break; } if (S_ISREG(st->st_mode)) { @@ -1974,13 +1981,13 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; rc = CPIOERR_UNLINK_FAILED; fsm->path = fsm->opath; fsm->opath = NULL; - return (rc ? rc : CPIOERR_LSTAT_FAILED); /* XXX HACK */ + return (rc ? rc : CPIOERR_ENOENT); /* XXX HACK */ /*@notreached@*/ break; } else if (S_ISDIR(st->st_mode)) { if (S_ISDIR(ost->st_mode)) return 0; if (S_ISLNK(ost->st_mode)) { - rc = fsmStage(fsm, FSM_STAT); - if (rc == CPIOERR_STAT_FAILED && errno == ENOENT) rc = 0; + rc = fsmUNSAFE(fsm, FSM_STAT); + if (rc == CPIOERR_ENOENT) rc = 0; if (rc) break; errno = saveerrno; if (S_ISDIR(ost->st_mode)) return 0; @@ -1988,7 +1995,7 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; } else if (S_ISLNK(st->st_mode)) { if (S_ISLNK(ost->st_mode)) { /* XXX NUL terminated result in fsm->rdbuf, len in fsm->rdnb. */ - rc = fsmNext(fsm, FSM_READLINK); + rc = fsmUNSAFE(fsm, FSM_READLINK); errno = saveerrno; if (rc) break; if (!strcmp(fsm->opath, fsm->rdbuf)) return 0; @@ -2004,8 +2011,8 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; /* XXX shouldn't do this with commit/undo. */ rc = 0; if (fsm->stage == FSM_PROCESS) rc = fsmNext(fsm, FSM_UNLINK); - if (rc == 0) rc = CPIOERR_LSTAT_FAILED; - return (rc ? rc : CPIOERR_LSTAT_FAILED); /* XXX HACK */ + if (rc == 0) rc = CPIOERR_ENOENT; + return (rc ? rc : CPIOERR_ENOENT); /* XXX HACK */ /*@notreached@*/ break; case FSM_UNLINK: @@ -2013,7 +2020,8 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; if (_fsm_debug && (stage & FSM_SYSCALL)) rpmMessage(RPMMESS_DEBUG, " %8s (%s) %s\n", cur, fsm->path, (rc < 0 ? strerror(errno) : "")); - if (rc < 0) rc = CPIOERR_UNLINK_FAILED; + if (rc < 0) + rc = (errno == ENOENT ? CPIOERR_ENOENT : CPIOERR_UNLINK_FAILED); break; case FSM_RENAME: rc = Rename(fsm->opath, fsm->path); @@ -2047,7 +2055,12 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; if (_fsm_debug && (stage & FSM_SYSCALL)) rpmMessage(RPMMESS_DEBUG, " %8s (%s) %s\n", cur, fsm->path, (rc < 0 ? strerror(errno) : "")); - if (rc < 0) rc = CPIOERR_RMDIR_FAILED; + if (rc < 0) + switch (errno) { + case ENOENT: rc = CPIOERR_ENOENT; break; + case ENOTEMPTY: rc = CPIOERR_ENOTEMPTY; break; + default: rc = CPIOERR_RMDIR_FAILED; break; + } break; case FSM_CHOWN: rc = chown(fsm->path, st->st_uid, st->st_gid); @@ -2125,14 +2138,16 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; if (_fsm_debug && (stage & FSM_SYSCALL) && rc && errno != ENOENT) rpmMessage(RPMMESS_DEBUG, " %8s (%s, ost) %s\n", cur, fsm->path, (rc < 0 ? strerror(errno) : "")); - if (rc < 0) rc = CPIOERR_LSTAT_FAILED; + if (rc < 0) + rc = (errno == ENOENT ? CPIOERR_ENOENT : CPIOERR_LSTAT_FAILED); break; case FSM_STAT: rc = Stat(fsm->path, ost); if (_fsm_debug && (stage & FSM_SYSCALL) && rc && errno != ENOENT) rpmMessage(RPMMESS_DEBUG, " %8s (%s, ost) %s\n", cur, fsm->path, (rc < 0 ? strerror(errno) : "")); - if (rc < 0) rc = CPIOERR_STAT_FAILED; + if (rc < 0) + rc = (errno == ENOENT ? CPIOERR_ENOENT : CPIOERR_STAT_FAILED); break; case FSM_READLINK: /* XXX NUL terminated result in fsm->rdbuf, len in fsm->rdnb. */ @@ -2155,7 +2170,7 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break; break; case FSM_NEXT: - rc = fsmNext(fsm, FSM_HREAD); + rc = fsmUNSAFE(fsm, FSM_HREAD); if (rc) break; if (!strcmp(fsm->path, CPIO_TRAILER)) { /* Detect end-of-payload. */ fsm->path = _free(fsm->path); -- 2.7.4