URI:
       tdirfwstat.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tdirfwstat.c (1011B)
       ---
            1 #define NOPLAN9DEFINES
            2 #include <u.h>
            3 #include <libc.h>
            4 #include <sys/time.h>
            5 #include <sys/stat.h>
            6 
            7 #if defined(__FreeBSD__) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__linux__)
            8 /* do nothing -- futimes exists and is fine */
            9 
           10 #elif defined(__SunOS5_9__)
           11 /* use futimesat */
           12 static int
           13 futimes(int fd, struct timeval *tv)
           14 {
           15         return futimesat(fd, 0, tv);
           16 }
           17 
           18 #else
           19 /* provide dummy */
           20 /* rename just in case -- linux provides an unusable one */
           21 #undef futimes
           22 #define futimes myfutimes
           23 static int
           24 futimes(int fd, struct timeval *tv)
           25 {
           26         werrstr("futimes not available");
           27         return -1;
           28 }
           29 
           30 #endif
           31 
           32 int
           33 dirfwstat(int fd, Dir *dir)
           34 {
           35         int ret;
           36         struct timeval tv[2];
           37 
           38         ret = 0;
           39         if(~dir->mode != 0){
           40                 if(fchmod(fd, dir->mode) < 0)
           41                         ret = -1;
           42         }
           43         if(~dir->mtime != 0){
           44                 tv[0].tv_sec = dir->mtime;
           45                 tv[0].tv_usec = 0;
           46                 tv[1].tv_sec = dir->mtime;
           47                 tv[1].tv_usec = 0;
           48                 if(futimes(fd, tv) < 0)
           49                         ret = -1;
           50         }
           51         if(~dir->length != 0){
           52                 if(ftruncate(fd, dir->length) < 0)
           53                         ret = -1;
           54         }
           55         return ret;
           56 }