#include #include #include #include #include #include #include #include #include #include #define NODEFINE #include #include #include #include "fd.h" long pm_pwrite(int fd, void *a, long n, vlong offset) { off_t off; File *f; if(offset == -1) return pm_write(fd, a, n); if(offset < 0){ pm_werrstr("negative pwrite offset"); return -1; } off = offset; if((vlong)off != offset){ pm_werrstr("pwrite offset does not fit in off_t"); return -1; } if((f = pm_lockfile(fd, 0)) == nil) return -1; n = pwrite(f->ufd, a, n, off); pm_qunlock(&f->lk); if(n < 0){ pm_oserror(); return -1; } return n; }