#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>
+#include <sys/stat.h>
#include <mLib/mdwopt.h>
#include <mLib/quis.h>
int t = -1;
int oflag;
unsigned int ot = 0;
+ struct stat st, nst;
time_t nt;
pid_t kid;
int rc;
ot = alarm(0);
oalrm = signal(SIGALRM, alrm);
if (t >= 0) alarm(t);
+again:
if ((fd = open(file, oflag, 0666)) < 0)
die(111, "error opening `%s': %s", file, strerror(errno));
+ if (fstat(fd, &st))
+ die(111, "error from fstat on `%s': %s", file, strerror(errno));
err = fcntl(fd, f & f_wait ? F_SETLKW : F_SETLK, &l) >= 0 ? 0 : errno;
+ if (stat(file, &nst)) {
+ if (errno == ENOENT) { close(fd); goto again; }
+ else die(111, "error from stat on `%s': %s", file, strerror(errno));
+ }
+ if (st.st_dev != nst.st_dev || st.st_ino != nst.st_ino)
+ { close(fd); goto again; }
done:
signal(SIGALRM, oalrm);
if (!ot)