1.0.11.26: correcting some types in SB-UNIX.
authorkreuter <kreuter>
Sat, 17 Nov 2007 20:23:29 +0000 (20:23 +0000)
committerkreuter <kreuter>
Sat, 17 Nov 2007 20:23:29 +0000 (20:23 +0000)
src/code/unix.lisp
src/runtime/wrap.c
src/runtime/wrap.h [new file with mode: 0644]
tools-for-build/grovel-headers.c
version.lisp-expr

index 1fbb1c1..5fc2be4 100644 (file)
@@ -656,25 +656,21 @@ SYSCALL-FORM. Repeat evaluation of SYSCALL-FORM if it is interrupted."
 ;;; st_size is a long, not an off-t, because off-t is a 64-bit
 ;;; quantity on Alpha. And FIXME: "No one would want a file length
 ;;; longer than 32 bits anyway, right?":-|
+;;;
+;;; The comment about alien and 64-bit quantities has not been kept in
+;;; sync with the comment now in wrap.h (formerly wrap.c), but it's
+;;; not clear whether either comment is correct.  -- RMK 2007-11-14.
 (define-alien-type nil
   (struct wrapped_stat
-    (st-dev #!-(or mips largefile) unsigned-int
-            #!+mips unsigned-long
-            #!+(and largefile (not mips)) dev-t)
+    (st-dev ffi-dev-t)
     (st-ino ino-t)
     (st-mode mode-t)
     (st-nlink nlink-t)
     (st-uid uid-t)
     (st-gid gid-t)
-    (st-rdev #!-(or mips largefile) unsigned-int
-             #!+mips unsigned-long
-             #!+(and largefile (not mips)) dev-t)
-    (st-size #!-(or darwin mips largefile) unsigned-int
-             #!+(or darwin mips largefile) off-t)
-    #!+(and darwin)
-    (st-blksize unsigned-int)
-    #!-(and darwin)
-    (st-blksize unsigned-long)
+    (st-rdev ffi-dev-t)
+    (st-size ffi-off-t)
+    (st-blksize ffi-blksize-t)
     (st-blocks unsigned-long)
     (st-atime time-t)
     (st-mtime time-t)
index 376beaf..1d17e9a 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "runtime.h"
 #include "util.h"
+#include "wrap.h"
 
 /* Although it might seem as though this should be in some standard
    Unix header, according to Perry E. Metzger, in a message on
@@ -154,72 +155,6 @@ wrapped_readlink(char *path)
  * stat(2) stuff
  */
 
-/* As of 0.6.12, the FFI can't handle 64-bit values. For now, we use
- * these munged-to-32-bits values for might-be-64-bit slots of
- * stat_wrapper as a workaround, so that at least we can still work
- * when values are small.
- *
- * FIXME: But of course we should fix the FFI so that we can use the
- * actual 64-bit values instead.  In fact, we probably have by now
- * (2003-10-03) on all working platforms except MIPS and HPPA; if some
- * motivated spark would simply fix those, this hack could go away.
- * -- CSR, 2003-10-03
- *
- * Some motivated spark fixed MIPS. -- ths, 2005-10-06 */
-
-#if defined(LISP_FEATURE_LARGEFILE) && !defined(LISP_FEATURE_MIPS)
-typedef dev_t ffi_dev_t;
-typedef off_t ffi_off_t;
-#elif defined(LISP_FEATURE_MIPS)
-typedef unsigned long ffi_dev_t; /* Linux/MIPS struct stat doesn't use dev_t */
-typedef off_t ffi_off_t;
-#elif defined(LISP_FEATURE_DARWIN)
-typedef dev_t ffi_dev_t;
-typedef off_t ffi_off_t;
-#else
-typedef u32 ffi_dev_t; /* since Linux dev_t can be 64 bits */
-typedef u32 ffi_off_t; /* since OpenBSD 2.8 st_size is 64 bits */
-#endif
-
-#ifdef LISP_FEATURE_OS_PROVIDES_BLKSIZE_T
-typedef blksize_t ffi_blksize_t;
-#else
-typedef unsigned long ffi_blksize_t;
-#endif
-
-/* a representation of stat(2) results which doesn't depend on CPU or OS */
-struct stat_wrapper {
-    /* KLUDGE: The verbose wrapped_st_ prefixes are to protect us from
-     * the C preprocessor as wielded by the fiends of OpenBSD, who do
-     * things like
-     *    #define st_atime        st_atimespec.tv_sec
-     * I remember when I was young and innocent, I read about how the
-     * C preprocessor isn't to be used to globally munge random
-     * lowercase symbols like this, because things like this could
-     * happen, and I nodded sagely. But now I know better.:-| This is
-     * another entry for Dan Barlow's ongoing episodic rant about C
-     * header files, I guess.. -- WHN 2001-05-10 */
-    ffi_dev_t     wrapped_st_dev;         /* device */
-    ino_t         wrapped_st_ino;         /* inode */
-    mode_t        wrapped_st_mode;        /* protection */
-#ifndef LISP_FEATURE_WIN32
-    nlink_t       wrapped_st_nlink;       /* number of hard links */
-    uid_t         wrapped_st_uid;         /* user ID of owner */
-    gid_t         wrapped_st_gid;         /* group ID of owner */
-#else
-    short         wrapped_st_nlink;       /* Win32 doesn't have nlink_t */
-    short         wrapped_st_uid;         /* Win32 doesn't have st_uid */
-    short         wrapped_st_gid;         /* Win32 doesn't have st_gid */
-#endif
-    ffi_dev_t     wrapped_st_rdev;        /* device type (if inode device) */
-    ffi_off_t     wrapped_st_size;        /* total size, in bytes */
-    ffi_blksize_t wrapped_st_blksize;     /* blocksize for filesystem I/O */
-    unsigned long wrapped_st_blocks;      /* number of blocks allocated */
-    time_t        wrapped_st_atime;       /* time_t of last access */
-    time_t        wrapped_st_mtime;       /* time_t of last modification */
-    time_t        wrapped_st_ctime;       /* time_t of last change */
-};
-
 static void
 copy_to_stat_wrapper(struct stat_wrapper *to, struct stat *from)
 {
diff --git a/src/runtime/wrap.h b/src/runtime/wrap.h
new file mode 100644 (file)
index 0000000..0408971
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Data structures used in wrap.c in this directory, moved here from
+ * wrap.c in November 2007 so that
+ * src/tools-for-build/grovel-headers.c can grovel the sizes and
+ * offsets of things.
+ */
+
+
+/* As of 0.6.12, the FFI can't handle 64-bit values. For now, we use
+ * these munged-to-32-bits values for might-be-64-bit slots of
+ * stat_wrapper as a workaround, so that at least we can still work
+ * when values are small.
+ *
+ * FIXME: But of course we should fix the FFI so that we can use the
+ * actual 64-bit values instead.  In fact, we probably have by now
+ * (2003-10-03) on all working platforms except MIPS and HPPA; if some
+ * motivated spark would simply fix those, this hack could go away.
+ * -- CSR, 2003-10-03
+ *
+ * Some motivated spark fixed MIPS. -- ths, 2005-10-06 */
+/* It would seem as though the FFI would have to be able to handle
+ * 64-bit values in order for the LARGEFILE && !MIPS case below to
+ * work, so can the comment above still be right? If FFI can only
+ * handle 64-bit aliens on some platforms, maybe there should be a
+ * distinct Lisp feature for 64-bit aliens support? -- RMK,
+ * 2007-11-14 */
+
+#include "sbcl.h"
+#include "runtime.h"
+
+#if defined(LISP_FEATURE_LARGEFILE) && !defined(LISP_FEATURE_MIPS)
+typedef dev_t ffi_dev_t;
+typedef off_t ffi_off_t;
+#elif defined(LISP_FEATURE_MIPS)
+typedef unsigned long ffi_dev_t; /* Linux/MIPS struct stat doesn't use dev_t */
+typedef off_t ffi_off_t;
+#elif defined(LISP_FEATURE_DARWIN)
+typedef dev_t ffi_dev_t;
+typedef off_t ffi_off_t;
+#else
+typedef u32 ffi_dev_t; /* since Linux dev_t can be 64 bits */
+typedef u32 ffi_off_t; /* since OpenBSD 2.8 st_size is 64 bits */
+#endif
+
+#ifdef LISP_FEATURE_OS_PROVIDES_BLKSIZE_T
+typedef blksize_t ffi_blksize_t;
+#else
+typedef unsigned long ffi_blksize_t;
+#endif
+
+/* a representation of stat(2) results which doesn't depend on CPU or OS */
+struct stat_wrapper {
+    /* KLUDGE: The verbose wrapped_st_ prefixes are to protect us from
+     * the C preprocessor as wielded by the fiends of OpenBSD, who do
+     * things like
+     *    #define st_atime        st_atimespec.tv_sec
+     * I remember when I was young and innocent, I read about how the
+     * C preprocessor isn't to be used to globally munge random
+     * lowercase symbols like this, because things like this could
+     * happen, and I nodded sagely. But now I know better.:-| This is
+     * another entry for Dan Barlow's ongoing episodic rant about C
+     * header files, I guess.. -- WHN 2001-05-10 */
+    ffi_dev_t     wrapped_st_dev;         /* device */
+    ino_t         wrapped_st_ino;         /* inode */
+    mode_t        wrapped_st_mode;        /* protection */
+#ifndef LISP_FEATURE_WIN32
+    nlink_t       wrapped_st_nlink;       /* number of hard links */
+    uid_t         wrapped_st_uid;         /* user ID of owner */
+    gid_t         wrapped_st_gid;         /* group ID of owner */
+#else
+    short         wrapped_st_nlink;       /* Win32 doesn't have nlink_t */
+    short         wrapped_st_uid;         /* Win32 doesn't have st_uid */
+    short         wrapped_st_gid;         /* Win32 doesn't have st_gid */
+#endif
+    ffi_dev_t     wrapped_st_rdev;        /* device type (if inode device) */
+    ffi_off_t     wrapped_st_size;        /* total size, in bytes */
+    ffi_blksize_t wrapped_st_blksize;     /* blocksize for filesystem I/O */
+    unsigned long wrapped_st_blocks;      /* number of blocks allocated */
+    time_t        wrapped_st_atime;       /* time_t of last access */
+    time_t        wrapped_st_mtime;       /* time_t of last modification */
+    time_t        wrapped_st_ctime;       /* time_t of last change */
+};
index 49eeac5..f0e6f76 100644 (file)
@@ -47,6 +47,8 @@
 
 #include "genesis/config.h"
 
+#include "wrap.h"
+
 #define DEFTYPE(lispname,cname) { cname foo; \
     printf("(define-alien-type " lispname " (%s %d))\n", (((foo=-1)<0) ? "sb!alien:signed" : "unsigned"), (8 * (sizeof foo))); }
 
@@ -248,6 +250,10 @@ main(int argc, char *argv[])
     DEFTYPE("suseconds-t", suseconds_t);
 #endif
     DEFTYPE("uid-t",   uid_t);
+/* Types in src/runtime/wrap.h */
+    DEFTYPE("ffi-dev-t", ffi_dev_t);
+    DEFTYPE("ffi-off-t", ffi_off_t);
+    DEFTYPE("ffi-blksize-t", ffi_blksize_t);
     printf("\n");
 
     printf(";;; fcntl.h (or unistd.h on OpenBSD and NetBSD)\n");
index 5a0cae6..28223d1 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.11.25"
+"1.0.11.26"