This is the mail archive of the libc-alpha@sourceware.cygnus.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Test for stat/stat64 structs



During a discussin with Maciej, he came up with the appended program
which tests that indeed struct stat and struct stat64 are the same
when using _FILE_OFFSET_BITS=64.  I've reformatted the file and
patched the Makefile.

What do you think?  Should we add this to glibc?  It's IMHO a good
sanity check for new architectures.

Andreas

2000-06-21  Andreas Jaeger  <aj@suse.de>

	* io/Makefile (tests): Add test-stat.
	(CFLAGS-test-stat.c): New.

	* io/test-stat.c: New file from Maciej W. Rozycki
	<macro@ds2.pg.gda.pl>.

============================================================
Index: io/Makefile
--- io/Makefile	2000/04/14 07:39:47	1.34
+++ io/Makefile	2000/06/21 14:17:43
@@ -55,13 +55,14 @@
 
 others		:= pwd
 test-srcs	:= ftwtest
-tests		:= test-utime
+tests		:= test-utime test-stat
 
 distribute	:= ftwtest-sh
 
 include ../Rules
 
 CFLAGS-fts.c = -Wno-uninitialized
+CFLAGS-test-stat.c = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
 
 ifeq ($(cross-compiling),no)
 tests: $(objpfx)ftwtest
============================================================
Index: io/test-stat.c
--- io/test-stat.c	created
+++ io/test-stat.c	Wed Jun 21 16:16:47 2000	1.1
@@ -0,0 +1,49 @@
+/* We need to define:
+#define _FILE_OFFSET_BITS 64
+#define _LARGEFILE64_SOURCE 1
+*/
+
+#include <assert.h>
+#include <stddef.h>
+#include <sys/stat.h>
+
+int
+main (void)
+{
+  /* With _FILE_OFFSET_BITS=64 struct stat and struct stat64 should
+     be identical.  */
+  assert (sizeof (struct stat)
+	  == sizeof (struct stat64));
+  assert (offsetof (struct stat, st_dev)
+	  == offsetof (struct stat64, st_dev));
+  assert (offsetof (struct stat, st_ino)
+	  == offsetof (struct stat64, st_ino));
+  assert (offsetof (struct stat, st_mode)
+	  == offsetof (struct stat64, st_mode));
+  assert (offsetof (struct stat, st_nlink)
+	  == offsetof (struct stat64, st_nlink));
+  assert (offsetof (struct stat, st_uid)
+	  == offsetof (struct stat64, st_uid));
+  assert (offsetof (struct stat, st_gid)
+	  == offsetof (struct stat64, st_gid));
+  assert (offsetof (struct stat, st_rdev)
+	  == offsetof (struct stat64, st_rdev));
+  assert (offsetof (struct stat, st_size)
+	  == offsetof (struct stat64, st_size));
+  assert (offsetof (struct stat, st_atime)
+	  == offsetof (struct stat64, st_atime));
+  assert (offsetof (struct stat, st_mtime)
+	  == offsetof (struct stat64, st_mtime));
+  assert (offsetof (struct stat, st_ctime)
+	  == offsetof (struct stat64, st_ctime));
+  assert (offsetof (struct stat, st_blksize)
+	  == offsetof (struct stat64, st_blksize));
+  assert (offsetof (struct stat, st_blocks)
+	  == offsetof (struct stat64, st_blocks));
+#if 0
+  /* Some systems have st_fstype but not all.  Don't check it for now.  */
+  assert (offsetof (struct stat, st_fstype)
+	  == offsetof (struct stat64, st_fstype));
+#endif
+  return 0;
+}

-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.inka.de

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]