New (Unix) primitive CHANNEL-FILE-ATTRIBUTES for fstat.
authorTaylor R Campbell <campbell@mumble.net>
Mon, 14 Feb 2011 18:51:08 +0000 (18:51 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Mon, 14 Feb 2011 18:51:08 +0000 (18:51 +0000)
Also, I meant `eastern hemisphere' in the previous commit, unless the
earth's magnetic field has just reversed again...no, wait...

src/microcode/pruxfs.c
src/microcode/uxfs.c

index 04c80d25e502dfc2cc7dd72a64195c8d4f413681..886c01704cab57c36ab09534db29ff219832da91 100644 (file)
@@ -28,8 +28,11 @@ USA.
 #include "scheme.h"
 #include "prims.h"
 #include "ux.h"
+#include "uxio.h"
 #include "osfs.h"
+#include "osio.h"
 
+extern void UX_read_fd_status (int fd, struct stat * s);
 extern int UX_read_file_status (const char * filename, struct stat * s);
 extern int UX_read_file_status_indirect
   (const char * filename, struct stat * s);
@@ -131,6 +134,14 @@ The file must exist and you must be the owner (or superuser).")
 
    The file_mode_string stuff was gobbled from GNU Emacs. */
 
+DEFINE_PRIMITIVE ("CHANNEL-FILE-ATTRIBUTES", Prim_channel_file_attributes, 1, 1, 0)
+{
+  struct stat s;
+  PRIMITIVE_HEADER (1);
+  UX_read_fd_status ((CHANNEL_DESCRIPTOR (arg_channel (1))), (&s));
+  return (file_attributes_internal (&s));
+}
+
 #define FILE_ATTRIBUTES_PRIMITIVE(stat_syscall)                                \
 {                                                                      \
   struct stat s;                                                       \
index 902d1018e658be8e02f6ce1c4bbdf12a4041a494..1408ae25f0ea7ffa31acf91642d7a709130bc23f 100644 (file)
@@ -134,6 +134,12 @@ USA.
       }                                                        \
   } while (0)
 
+void
+UX_read_fd_status (int fd, struct stat * s)
+{
+  STD_VOID_SYSTEM_CALL (syscall_fstat, (UX_fstat (fd, s)));
+}
+
 int
 UX_read_file_status (const char * filename, struct stat * s)
 {