From: Erik Naggum

Subject: Re: excl::filsys-filestat

Date: 1998-1-10 22:43

* Andrew Begel
| I'm using some software that called excl::filesys-filestat.  In ACL 4.2,
| this took one argument (the pathname), but ACL 4.3 is telling me that it
| takes 2 or three args now.  Does someone know what the other args should
| be?  There's no documentation for this function.

(excl:arglist #'excl::filesys-filestat)
=> (excl::name excl::filestat &optional excl::linksp)
     t

  it is unclear to me what `filestat' is supposed to be, but the following
  call does not cause an error and fills the vector with useful values:

(excl::filesys-filestat "/home/erik/.X-error.119"
                        (make-array 10 :element-type '(unsigned-byte 32)))
=> #(0			; not filled in, presumably a struct identifier or something
     3061065815		; no meaning found (see note)
     3093381980		; modification time in universal time
     31583279		; access time (see note)
     420		; #o644, the permissions bits
     646		; the UID of the file
     10			; the GID of the file
     0			; a file type flag.  known types:
			; 0 = file
			; 1 = directory
			; 3 = symbolic link (only if linksp is non-nil)
			; 4 = FIFO special
			; 5 = Unix socket
			; 6 = character device
			; 7 = block device
     11330		; inode number
     1800)		; bits 15..8 = 7 = major device (a scsi disk here)
			; bits  7..0 = 8 = minor device (disk 1, partition 0)

  there is a constant 3061065600 in the code vector of this function that
  appears to be the universal time representation of 1997-01-01 00:00:00,
  and there is a curious offset from this number in slot 1.  slot 3 appears
  to be the access time of the file relative to this time.

  the first argument (name) must be a simple-string or a fixnum, and the
  fixnum seems to represent a C string in memory, like the char * returned
  from FFI functions.

  it would be nice if somebody from Franz could corroborate my story, which
  is based on disassembly, empirical tests, and hunches.

#:Erik