]> andersk Git - openssh.git/commitdiff
- (dtucker) [openbsd-compat/regress/{Makefile.in,closefromtest.c}] Regress
authordtucker <dtucker>
Thu, 17 Aug 2006 09:40:35 +0000 (09:40 +0000)
committerdtucker <dtucker>
Thu, 17 Aug 2006 09:40:35 +0000 (09:40 +0000)
   test for closefrom() in compat code.

ChangeLog
openbsd-compat/regress/Makefile.in
openbsd-compat/regress/closefromtest.c [new file with mode: 0644]

index 3020de559fe818991ba468a0b33dec6c3c2fbd55..2b5963ee2f7926feafb1dba6560838a35e1fb28b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
    Include stdlib.h for malloc and friends.
  - (dtucker) [configure.ac openbsd-compat/bsd-closefrom.c] Use F_CLOSEM fcntl
    for closefrom() on AIX.  Pointed out by William Ahern.
+ - (dtucker) [openbsd-compat/regress/{Makefile.in,closefromtest.c}] Regress
+   test for closefrom() in compat code.
 
 20060816
  - (djm) [audit-bsm.c] Sprinkle in some headers
index fc3008e79ca9cb5dd47b6ee609242f6ac37b1217..7b0bd578d8c6297d2447566e959e65f796be4ada 100644 (file)
@@ -14,7 +14,7 @@ LIBS=@LIBS@
 LDFLAGS=-L.. -lopenbsd-compat @LDFLAGS@
 
 LIBCOMPAT=../libopenbsd-compat.a
-TESTPROGS=strtonumtest strduptest snprintftest
+TESTPROGS=closefromtest strtonumtest strduptest snprintftest
 
 all:   t-exec ${OTHERTESTS}
 
@@ -32,6 +32,9 @@ strtonumtest: strtonumtest.c $(LIBCOMPAT)
 strduptest: strduptest.c $(LIBCOMPAT)
        $(CC) $(CFLAGS) $(CPPFLAGS) -o strduptest $< $(LDFLAGS)
 
+closefromtest: closefromtest.c $(LIBCOMPAT)
+       $(CC) $(CFLAGS) $(CPPFLAGS) -o closefromtest $< $(LDFLAGS)
+
 clean:
        rm -f *.o *.a core $(TESTPROGS) valid.out
 
diff --git a/openbsd-compat/regress/closefromtest.c b/openbsd-compat/regress/closefromtest.c
new file mode 100644 (file)
index 0000000..feb1b56
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2006 Darren Tucker
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define NUM_OPENS 10
+
+void
+fail(char *msg)
+{
+       fprintf(stderr, "closefrom: %s\n", msg);
+       exit(1);
+}
+
+int
+main(void)
+{
+       int i, max, fds[NUM_OPENS];
+       char buf[512];
+
+       for (i = 0; i < NUM_OPENS; i++)
+               if ((fds[i] = open("/dev/null", "r")) == -1)
+                       exit(0);        /* can't test */
+       max = i - 1;
+
+       /* should close last fd only */
+       closefrom(fds[max]);
+       if (close(fds[max]) != -1)
+               fail("failed to close highest fd");
+
+       /* make sure we can still use remaining descriptors */
+       for (i = 0; i < max; i++)
+               if (read(fds[i], buf, sizeof(buf)) == -1)
+                       fail("closed descriptors it should not have");
+
+       /* should close all fds */
+       closefrom(fds[0]);
+       for (i = 0; i < NUM_OPENS; i++)
+               if (close(fds[i]) != -1)
+                       fail("failed to close from lowest fd");
+}
This page took 0.046984 seconds and 5 git commands to generate.