home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / libc / v6 / stat.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1023 b   |  58 lines

  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3.  
  4. struct ostat {
  5.     short os_dev;
  6.     short os_inum;
  7.     short os_flags;
  8.     char  os_nlinks;
  9.     char  os_uid;
  10.     char  os_gid;
  11.     char  os_size0;
  12.     short os_size1;
  13.     short os_addr[8];
  14.     long  os_actime;
  15.     long  os_modtime;
  16. } osbuf;
  17.  
  18. stat(name, buf)
  19. char *name;
  20. struct stat *buf;
  21. {
  22.     if (syscall(18, 0, 0, name, &osbuf, 0) < 0)
  23.         return(-1);
  24.  
  25.     stcopyit(buf);
  26.     return(0);
  27. }
  28.  
  29. fstat(fd, buf)
  30. int fd;
  31. struct stat *buf;
  32. {
  33.     if (syscall(28, fd, 0, &osbuf, 0, 0) < 0)
  34.         return(-1);
  35.     stcopyit(buf);
  36.     return(0);
  37. }
  38.  
  39. static
  40. stcopyit(buf)
  41. struct stat *buf;
  42. {
  43.     buf->st_dev = osbuf.os_dev;
  44.     buf->st_ino = osbuf.os_inum;
  45.     buf->st_mode = osbuf.os_flags;
  46.     buf->st_mode &= 067777;
  47.     if ((buf->st_mode&060000) == 0)
  48.         buf->st_mode |= 0100000;
  49.     buf->st_nlink = osbuf.os_nlinks;
  50.     buf->st_uid = osbuf.os_uid;
  51.     buf->st_gid = osbuf.os_gid;
  52.     buf->st_rdev = 0;
  53.     buf->st_size = ( (long) osbuf.os_size0 << 16) | osbuf.os_size1;
  54.     buf->st_atime = osbuf.os_actime;
  55.     buf->st_mtime = osbuf.os_modtime;
  56.     buf->st_ctime = buf->st_mtime;
  57. }
  58.