diff options
-rw-r--r-- | test/stat/.cvsignore | 12 | ||||
-rw-r--r-- | test/stat/Makefile | 52 | ||||
-rw-r--r-- | test/stat/stat.c | 91 |
3 files changed, 118 insertions, 37 deletions
diff --git a/test/stat/.cvsignore b/test/stat/.cvsignore new file mode 100644 index 000000000..341a419b0 --- /dev/null +++ b/test/stat/.cvsignore @@ -0,0 +1,12 @@ +stat +stat.o +stat.out +stat64 +stat64.o +stat64.out +stat64_glibc +stat64_glibc.o +stat64_glibc.out +stat_glibc +stat_glibc.o +stat_glibc.out diff --git a/test/stat/Makefile b/test/stat/Makefile index c2d4e75cc..5c284fb05 100644 --- a/test/stat/Makefile +++ b/test/stat/Makefile @@ -19,9 +19,10 @@ TESTDIR=../ include $(TESTDIR)/Rules.mak +CFLAGS64=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -TARGETS=stat stat_glibc +TARGETS=stat_diff stat64_diff all: $(TARGETS) @@ -41,9 +42,7 @@ stat: stat.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC) $(CC) $(CFLAGS) -c $< -o $@.o $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS) $(STRIPTOOL) -x -R .note -R .comment $@ - -$(LDD) $@ - ls -l $@ - -./$@ + -./$@ stat.c > $@.out -@ echo " " stat_glibc: stat.c Makefile @@ -54,12 +53,49 @@ stat_glibc: stat.c Makefile $(HOSTCC) $(GLIBC_CFLAGS) -c $< -o $@.o $(HOSTCC) $(GLIBC_LDFLAGS) $@.o -o $@ $(STRIPTOOL) -x -R .note -R .comment $@ - -$(LDD) $@ - ls -l $@ - -./$@ + -./$@ stat.c > $@.out + -@ echo " " + +stat_diff: stat stat_glibc + -@ echo "-------" + -@ echo " " + -@ echo "Diffing stat output: " + -@ echo " " + -diff -u stat_glibc.out stat.out + -@ echo " " + +stat64: stat.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 $@ + -./$@ stat.c > $@.out + -@ echo " " + +stat64_glibc: stat.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 $@ + -./$@ stat.c > $@.out + -@ echo " " + +stat64_diff: stat64 stat64_glibc + -@ echo "-------" + -@ echo " " + -@ echo "Diffing stat64 output: " + -@ echo " " + -diff -u stat64_glibc.out stat64.out -@ echo " " clean: - rm -f *.[oa] *~ core $(TARGETS) + rm -f *.[oa] *~ core stat stat_glibc stat_glibc.out stat.out \ + stat64 stat64_glibc stat64_glibc.out stat64.out diff --git a/test/stat/stat.c b/test/stat/stat.c index eb99dbc64..9de2b3ef6 100644 --- a/test/stat/stat.c +++ b/test/stat/stat.c @@ -1,35 +1,68 @@ - -#include <sys/stat.h> #include <stdio.h> +#include <fcntl.h> +#include <sys/stat.h> +void print_struct_stat(char *msg, struct stat *s) +{ + printf("%s\n", msg); + /* The casts are because glibc thinks it's cool */ + printf("device : 0x%x\n",(unsigned int)s->st_dev); + printf("inode : %d\n",(int)s->st_ino); + printf("mode : 0x%x\n",s->st_mode); + printf("nlink : %d\n",s->st_nlink); + printf("uid : %d\n",s->st_uid); + printf("gid : %d\n",s->st_gid); + printf("rdev : 0x%x\n",(unsigned int)s->st_rdev); + printf("size : %ld\n",s->st_size); + printf("blksize : %ld\n",s->st_blksize); + printf("blocks : %ld\n",s->st_blocks); + printf("atime : %ld\n",s->st_atime); + printf("mtime : %ld\n",s->st_mtime); + printf("ctime : %ld\n",s->st_ctime); +} -int main(int argc,char *argv[]) +int main(int argc,char **argv) { - struct stat s; - int ret; - - ret = stat("/",&s); - - if(ret<0){ - perror("stat"); - exit(1); - } - - /* The casts are because glibc thinks it's cool */ - printf("device : 0x%x\n",(unsigned int)s.st_dev); - printf("inode : %d\n",(int)s.st_ino); - printf("mode : 0x%x\n",s.st_mode); - printf("nlink : %d\n",s.st_nlink); - printf("uid : %d\n",s.st_uid); - printf("gid : %d\n",s.st_gid); - printf("rdev : 0x%x\n",(unsigned int)s.st_rdev); - printf("size : %ld\n",s.st_size); - printf("blksize : %ld\n",s.st_blksize); - printf("blocks : %ld\n",s.st_blocks); - printf("atime : %ld\n",s.st_atime); - printf("mtime : %ld\n",s.st_mtime); - printf("ctime : %ld\n",s.st_ctime); - - exit(0); + int fd, ret; + char *file; + struct stat s; + + if (argc < 2) { + fprintf(stderr, "Usage: stat FILE\n"); + exit(1); + } + file = argv[1]; + + memset(&s, 0, sizeof(struct stat)); + ret = stat(file, &s); + if(ret<0){ + perror("stat"); + exit(1); + } + print_struct_stat("\nTesting stat:", &s); + + memset(&s, 0, sizeof(struct stat)); + ret = lstat(file, &s); + if(ret<0){ + perror("lstat"); + exit(1); + } + print_struct_stat("\nTesting lstat:", &s); + + + fd = open(file, O_RDONLY); + if(fd<0){ + perror("open"); + exit(1); + } + memset(&s, 0, sizeof(struct stat)); + ret = fstat(fd,&s); + if(ret<0){ + perror("fstat"); + exit(1); + } + print_struct_stat("\nTesting fstat:", &s); + + exit(0); } |