summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/misc/.cvsignore9
-rw-r--r--test/misc/Makefile88
-rw-r--r--test/misc/dirent.c25
-rw-r--r--test/misc/fdopen.c46
4 files changed, 166 insertions, 2 deletions
diff --git a/test/misc/.cvsignore b/test/misc/.cvsignore
index e31051723..b57daa876 100644
--- a/test/misc/.cvsignore
+++ b/test/misc/.cvsignore
@@ -1,2 +1,11 @@
outb
sem
+fdopen
+dirent
+dirent.out
+dirent_glibc
+dirent_glibc.out
+dirent64
+dirent64.out
+dirent64_glibc
+dirent64_glibc.out
diff --git a/test/misc/Makefile b/test/misc/Makefile
index ae49a865a..d94e48747 100644
--- a/test/misc/Makefile
+++ b/test/misc/Makefile
@@ -19,7 +19,9 @@
TESTDIR=../
include $(TESTDIR)/Rules.mak
-TARGETS=sem outb
+CFLAGS64=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+
+TARGETS=sem fdopen dirent_diff dirent64_diff #outb
all: $(TARGETS)
outb: outb.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
@@ -44,7 +46,89 @@ sem: sem.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
-./$@
-@ echo " "
+fdopen: fdopen.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Compiling vs uClibc: "
+ -@ echo " "
+ $(CC) $(CFLAGS) -c $< -o $@.o
+ $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ -./$@
+ -@ echo " "
+
+dirent_source:
+ -@ rm -f $(TARGETS)
+ -@ echo "-------"
+ -@ echo "dirent.c source: "
+ -@ echo " "
+ -@ cat dirent.c
+ -@ echo " "
+
+dirent: dirent.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Compiling vs uClibc: "
+ -@ echo " "
+ $(CC) $(CFLAGS) -c $< -o $@.o
+ $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ -./$@ dirent.c > $@.out
+ -@ echo " "
+
+dirent_glibc: dirent.c Makefile
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Compiling vs GNU libc: "
+ -@ echo " "
+ $(HOSTCC) $(GLIBC_CFLAGS) -c $< -o $@.o
+ $(HOSTCC) $(GLIBC_LDFLAGS) $@.o -o $@
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ -./$@ dirent.c > $@.out
+ -@ echo " "
+
+dirent_diff: dirent dirent_glibc
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Diffing dirent output: "
+ -@ echo " "
+ -diff -u dirent_glibc.out dirent.out
+ -@ echo " "
+
+dirent64: dirent.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Compiling vs uClibc: "
+ -@ echo " "
+ $(CC) $(CFLAGS) $(CFLAGS64) -c $< -o $@.o
+ $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ -./$@ dirent.c > $@.out
+ -@ echo " "
+
+dirent64_glibc: dirent.c Makefile
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Compiling vs GNU libc: "
+ -@ echo " "
+ $(HOSTCC) $(GLIBC_CFLAGS) $(CFLAGS64) -c $< -o $@.o
+ $(HOSTCC) $(GLIBC_LDFLAGS) $@.o -o $@
+ $(STRIPTOOL) -x -R .note -R .comment $@
+ -./$@ dirent.c > $@.out
+ -@ echo " "
+
+dirent64_diff: dirent64 dirent64_glibc
+ -@ echo "-------"
+ -@ echo " "
+ -@ echo "Diffing dirent64 output: "
+ -@ echo " "
+ -diff -u dirent64_glibc.out dirent64.out
+ -@ echo " "
+
clean:
- rm -f *.[oa] *~ core $(TARGETS)
+ rm -f *.[oa] *~ core dirent dirent_glibc dirent_glibc.out dirent.out \
+ dirent64 dirent64_glibc dirent64_glibc.out dirent64.out \
+ outb sem fdopen
+
diff --git a/test/misc/dirent.c b/test/misc/dirent.c
new file mode 100644
index 000000000..885990bf2
--- /dev/null
+++ b/test/misc/dirent.c
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <dirent.h>
+
+int main(int argc, char **argv)
+{
+
+ DIR *dirh;
+ struct dirent *dirp;
+ static char mydir[20] = "/tmp";
+
+ if ((dirh = opendir(mydir)) == NULL) {
+ perror("opendir");
+ return 1;
+ }
+
+ for (dirp = readdir(dirh); dirp != NULL; dirp = readdir(dirh)) {
+ printf("Got dir entry: %s\n",dirp->d_name);
+ }
+
+ closedir(dirh);
+ return 0;
+}
+
diff --git a/test/misc/fdopen.c b/test/misc/fdopen.c
new file mode 100644
index 000000000..598a85a05
--- /dev/null
+++ b/test/misc/fdopen.c
@@ -0,0 +1,46 @@
+/* Test for fdopen bugs. */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#define assert(x) \
+ if (!(x)) \
+ { \
+ fputs ("test failed: " #x "\n", stderr); \
+ retval = 1; \
+ goto the_end; \
+ }
+
+char buffer[256];
+
+int
+main (int argc, char *argv[])
+{
+ char *name;
+ FILE *fp = NULL;
+ int retval = 0;
+ int fd;
+
+ name = tmpnam (NULL);
+ fp = fopen (name, "w");
+ assert (fp != NULL)
+ fputs ("foobar and baz", fp);
+ fclose (fp);
+ fp = NULL;
+
+ fd = open (name, O_RDWR|O_CREAT);
+ assert (fd != -1);
+ assert (lseek (fd, 5, SEEK_SET) == 5);
+
+ fp = fdopen (fd, "a");
+ assert (fp != NULL);
+ assert (ftell (fp) == 14);
+
+the_end:
+ if (fp != NULL)
+ fclose (fp);
+ unlink (name);
+
+ return retval;
+}