mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-28 02:50:41 +03:00
A C implementation of "not" that handles fatal signals rather more
intelligently than the shell implementation. C code by Jaroslav Stava. I have done a rudimentary review and checked that tests still pass.
This commit is contained in:
parent
67d66d3225
commit
bf180e98f4
@ -25,9 +25,12 @@ abs_builddir = @abs_builddir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
|
||||
all: init.sh
|
||||
all: bin/not init.sh
|
||||
sh harness.sh
|
||||
|
||||
bin/not: .bin-dir-stamp
|
||||
$(CC) -o bin/not not.c
|
||||
|
||||
init.sh: Makefile.in .bin-dir-stamp
|
||||
rm -f $@-t $@
|
||||
echo 'top_srcdir=$(top_srcdir)' >> $@-t
|
||||
@ -49,7 +52,7 @@ T = $(wildcard t-*.sh)
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
|
||||
|
||||
$(T): init.sh
|
||||
$(T): bin/not init.sh
|
||||
sh harness.sh $@
|
||||
|
||||
.bin-dir-stamp: lvm-wrapper
|
||||
|
36
test/not.c
Normal file
36
test/not.c
Normal file
@ -0,0 +1,36 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
int main(int args, char **argv) {
|
||||
pid_t pid;
|
||||
int status;
|
||||
int FAILURE = 6;
|
||||
|
||||
if (args < 2) {
|
||||
fprintf(stderr, "Need args\n");
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
pid = fork();
|
||||
if (pid == -1) {
|
||||
fprintf(stderr, "Could not fork\n");
|
||||
return FAILURE;
|
||||
} else if (pid == 0) { /* child */
|
||||
execvp(argv[1], &argv[1]);
|
||||
/* should not be accessible */
|
||||
return FAILURE;
|
||||
} else { /* parent */
|
||||
waitpid(pid, &status, 0);
|
||||
if (!WIFEXITED(status)) {
|
||||
/* did not exit correctly */
|
||||
return FAILURE;
|
||||
}
|
||||
/* return the opposite */
|
||||
return !WEXITSTATUS(status);
|
||||
}
|
||||
/* not accessible */
|
||||
return FAILURE;
|
||||
}
|
@ -17,16 +17,6 @@ aux() {
|
||||
#"$@"
|
||||
}
|
||||
|
||||
not () {
|
||||
"$@" && exit 1 || {
|
||||
err="$?"
|
||||
if test "$err" = 129; then
|
||||
echo "fatal error $err"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
||||
STACKTRACE() {
|
||||
trap - ERR;
|
||||
i=0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user