From 1099d48c9c09059aade8605beddfa4ef98f575aa Mon Sep 17 00:00:00 2001 From: Stelian Pop Date: Mon, 21 Aug 2000 10:45:39 +0000 Subject: [PATCH] Added a configure check for sa_sigaction member of struct sigaction. Modified bylabel to be self contained (it doesn't depend any more on kernel/libc header files which could be out of date). --- CHANGES | 18 +++++++++++++- THANKS | 3 ++- compat/lib/bylabel.c | 19 +++++++++++---- config.h.in | 3 +++ configure | 56 +++++++++++++++++++++++++++++++++++--------- configure.in | 16 +++++++++++++ dump/tape.c | 4 +++- 7 files changed, 100 insertions(+), 19 deletions(-) diff --git a/CHANGES b/CHANGES index 86da4aa..0845ca5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,19 @@ -$Id: CHANGES,v 1.78 2000/08/20 19:45:38 stelian Exp $ +$Id: CHANGES,v 1.79 2000/08/21 10:45:39 stelian Exp $ + +Changes between versions 0.4b19 and 0.4b20 (released ???????????????) +===================================================================== + +1. Added a configure option to search for sa_sigaction member + of the struct sigaction. This should fix the compile on + libc5. Thanks to Gunther Schlegel + for reporting the bug. + +2. Modified the label and uuid analysis in order to be + self-contained (independant of kernel/libc headers). This + should fix the compile with older kernel/libc headers and + will preserve the functionality. Thanks to Bernhard Erdmann + for reporting the bug. + Changes between versions 0.4b18 and 0.4b19 (released August 20, 2000) ===================================================================== @@ -32,6 +47,7 @@ Changes between versions 0.4b18 and 0.4b19 (released August 20, 2000) 7. Updated the RPM spec file to the latest RedHat version, providing FHS packaging and other cosmetic changes. + You will need RPM version >= 3.0.5 in order to build the RPM. 8. Updated the configure script to check for libtermcap before checking for libreadline, because we need this diff --git a/THANKS b/THANKS index be951b8..6bea619 100644 --- a/THANKS +++ b/THANKS @@ -1,4 +1,4 @@ -$Id: THANKS,v 1.34 2000/08/20 19:53:49 stelian Exp $ +$Id: THANKS,v 1.35 2000/08/21 10:45:39 stelian Exp $ Dump and restore were written by the people of the CSRG at the University of California, Berkeley. @@ -58,6 +58,7 @@ Kenneth Porter shiva@well.com Bernhard Sadlowski sadlowsk@Mathematik.Uni-Bielefeld.DE Jan Sanislo oystr@cs.washington.edu Patrik Schindler poc@pocnet.net +Gunther Schlegel schlegel@riege.de Chris Siebenmann cks@utcc.utoronto.ca Bob Snyder rsnyder@janet.advsys.com Matti Taskinen mkt@rni.helsinki.fi diff --git a/compat/lib/bylabel.c b/compat/lib/bylabel.c index 9cdd0e5..c91457d 100644 --- a/compat/lib/bylabel.c +++ b/compat/lib/bylabel.c @@ -17,13 +17,22 @@ #include #include #include -#include -#include +#include #include "bylabel.h" #define PROC_PARTITIONS "/proc/partitions" #define DEVLABELDIR "/dev" +#define EXT2_SUPER_MAGIC 0xEF53 +struct ext2_super_block { + unsigned char s_dummy1[56]; + unsigned char s_magic[2]; + unsigned char s_dummy2[46]; + unsigned char s_uuid[16]; + unsigned char s_volume_name[16]; +}; +#define ext2magic(s) ((unsigned int) s.s_magic[0] + (((unsigned int) s.s_magic[1]) << 8)) + void msg __P((const char *fmt, ...)); static struct uuidCache_s { @@ -48,7 +57,7 @@ get_label_uuid(const char *device, char **label, char *uuid) { if (lseek(fd, 1024, SEEK_SET) != 1024 || read(fd, (char *) &e2sb, sizeof(e2sb)) != sizeof(e2sb) - || (e2sb.s_magic != EXT2_SUPER_MAGIC)) { + || (ext2magic(e2sb) != EXT2_SUPER_MAGIC)) { close(fd); return 1; } @@ -67,10 +76,10 @@ uuidcache_addentry(char *device, char *label, char *uuid) { struct uuidCache_s *last; if (!uuidCache) { - last = uuidCache = malloc(sizeof(*uuidCache)); + last = uuidCache = (struct uuidCache_s *)malloc(sizeof(*uuidCache)); } else { for (last = uuidCache; last->next; last = last->next) ; - last->next = malloc(sizeof(*uuidCache)); + last->next = (struct uuidCache_s *)malloc(sizeof(*uuidCache)); last = last->next; } last->next = NULL; diff --git a/config.h.in b/config.h.in index 1f51bea..9c67444 100644 --- a/config.h.in +++ b/config.h.in @@ -47,3 +47,6 @@ /* Define this is you want old style F script (no arguments) */ #undef OLD_STYLE_FSCRIPT + +/* Define if you have the sa_sigaction field in struct sigaction */ +#undef HAVE_SIGACTION_SA_SIGACTION diff --git a/configure b/configure index 44fa7a1..8b2bedd 100755 --- a/configure +++ b/configure @@ -1939,13 +1939,47 @@ rm -f conftest* fi fi +echo $ac_n "checking whether struct sigaction has a sa_sigaction field""... $ac_c" 1>&6 +echo "configure:1944: checking whether struct sigaction has a sa_sigaction field" >&5 +if eval "test \"`echo '$''{'dump_cv_struct_sa_sigaction'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +int main() { +struct sigaction action; action.sa_sigaction = NULL; +; return 0; } +EOF +if { (eval echo configure:1957: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + dump_cv_struct_sa_sigaction=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + dump_cv_struct_sa_sigaction=no +fi +rm -f conftest* +fi + +echo "$ac_t""$dump_cv_struct_sa_sigaction" 1>&6 +if test "$dump_cv_struct_sa_sigaction" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_SIGACTION_SA_SIGACTION 1 +EOF + +fi + echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1944: checking for ANSI C header files" >&5 +echo "configure:1978: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1953,7 +1987,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1970,7 +2004,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1988,7 +2022,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -2009,7 +2043,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -2020,7 +2054,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:2024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -2044,12 +2078,12 @@ EOF fi echo $ac_n "checking for quad_t""... $ac_c" 1>&6 -echo "configure:2048: checking for quad_t" >&5 +echo "configure:2082: checking for quad_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_quad_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -2077,12 +2111,12 @@ EOF fi echo $ac_n "checking for u_quad_t""... $ac_c" 1>&6 -echo "configure:2081: checking for u_quad_t" >&5 +echo "configure:2115: checking for u_quad_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_u_quad_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS diff --git a/configure.in b/configure.in index dcb6bfb..802f31a 100644 --- a/configure.in +++ b/configure.in @@ -303,6 +303,22 @@ if test "$ac_cv_func_glob" = "yes"; then fi fi +dnl +dnl Check if sigaction structure has a sa_sigaction field +dnl +AC_MSG_CHECKING(whether struct sigaction has a sa_sigaction field) +AC_CACHE_VAL(dump_cv_struct_sa_sigaction, +AC_TRY_COMPILE( +[#include +#include ], +[struct sigaction action; action.sa_sigaction = NULL;], +[dump_cv_struct_sa_sigaction=yes], +[dump_cv_struct_sa_sigaction=no])) +AC_MSG_RESULT($dump_cv_struct_sa_sigaction) +if test "$dump_cv_struct_sa_sigaction" = yes; then + AC_DEFINE(HAVE_SIGACTION_SA_SIGACTION) +fi + dnl dnl Check for types dnl diff --git a/dump/tape.c b/dump/tape.c index 851a5cd..9147441 100644 --- a/dump/tape.c +++ b/dump/tape.c @@ -40,7 +40,7 @@ #ifndef lint static const char rcsid[] = - "$Id: tape.c,v 1.21 2000/08/19 22:06:03 stelian Exp $"; + "$Id: tape.c,v 1.22 2000/08/21 10:45:40 stelian Exp $"; #endif /* not lint */ #ifdef __linux__ @@ -895,7 +895,9 @@ enslave(void) master = getpid(); { struct sigaction sa; +#if HAVE_SIGACTION_SA_SIGACTION sa.sa_sigaction = NULL; +#endif sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = dumpabort; -- 2.39.5