]> granicus.if.org Git - strace/commitdiff
tests: use local nanosleep based sleep utility replacement
authorDmitry V. Levin <ldv@altlinux.org>
Thu, 21 Jan 2016 23:52:39 +0000 (23:52 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 21 Jan 2016 23:52:39 +0000 (23:52 +0000)
* tests/sleep.c: New file.
* tests/.gitignore: Add sleep.
* tests/Makefile.am (check_PROGRAMS): Likewise.
* tests/count.test: Use it instead of system sleep utility.

tests/.gitignore
tests/Makefile.am
tests/count.test
tests/sleep.c [new file with mode: 0644]

index 34e8c2a1c4821a02e948b680269b3a0fe1943563..4f552d6b35b2e342309e9aa29581b4e594cd25c8 100644 (file)
@@ -83,6 +83,7 @@ sigaction
 sigaltstack
 signalfd
 sigreturn
+sleep
 stack-fcall
 stat
 stat64
index 8a9187121f29d77b32221e180a55c695372dc59a..653503079cf5db119a2a2360e976f2c7d8fdb443 100644 (file)
@@ -130,6 +130,7 @@ check_PROGRAMS = \
        signalfd \
        sigreturn \
        stack-fcall \
+       sleep \
        stat \
        stat64 \
        statfs \
index 60d2c73ae6b280ede1be142486d33b2ef4b7392f..cfd9e83e1a57d86f99fc13f575065b7738f3861f 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # Check whether -c and -w options work.
 #
-# Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 
 . "${srcdir=.}/init.sh"
 
+run_prog ./sleep 0
 check_prog grep
-check_prog sleep
 
 grep_log()
 {
        local pattern="$1"; shift
 
-       run_strace "$@"
+       run_strace "$@" ./sleep 1
 
        grep nanosleep "$LOG" > /dev/null ||
                framework_skip_ 'sleep does not use nanosleep'
@@ -48,9 +48,9 @@ grep_log()
        }
 }
 
-grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'         -c sleep 1
-grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'         -c -enanosleep sleep 1
-grep_log ' *[^ ]+ +(1\.0|0\.99)[^n]*nanosleep' -cw sleep 1
-grep_log '100\.00 +(1\.0|0\.99)[^n]*nanosleep' -cw -enanosleep sleep 1
+grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'         -c
+grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'         -c -enanosleep
+grep_log ' *[^ ]+ +(1\.0|0\.99)[^n]*nanosleep' -cw
+grep_log '100\.00 +(1\.0|0\.99)[^n]*nanosleep' -cw -enanosleep
 
 exit 0
diff --git a/tests/sleep.c b/tests/sleep.c
new file mode 100644 (file)
index 0000000..725d0f2
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * A simple nanosleep based sleep(1) replacement.
+ *
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <errno.h>
+#include <stdlib.h>
+#include <time.h>
+
+int
+main(int ac, char **av)
+{
+       if (ac < 2)
+               error_msg_and_fail("missing operand");
+
+       if (ac > 2)
+               error_msg_and_fail("extra operand");
+
+       struct timespec ts = { atoi(av[1]), 0 };
+
+       if (nanosleep(&ts, NULL))
+               perror_msg_and_fail("nanosleep");
+
+       return 0;
+}