{
int fd;
-#ifdef SHERLOCK_CONFIG_LFS
- mode |= O_LARGEFILE;
-#endif
+ mode |= SHERLOCK_O_LARGEFILE;
fd = open(name, mode, 0666);
if (fd < 0)
wrbuf(struct fastbuf *f)
{
int l = f->bptr - f->buffer;
+ char *c = f->buffer;
- if (l)
+ while (l)
{
- if (write(f->fd, f->buffer, l) != l)
+ int z = write(f->fd, c, l);
+ if (z <= 0)
die("Error writing %s: %m", f->name);
- f->bptr = f->buffer;
- f->fdpos += l;
- f->pos = f->fdpos;
+ /* FIXME */
+ if (z != l)
+ log(L_ERROR "wrbuf: %d != %d (pos %Ld)", z, l, sh_seek(f->fd, 0, SEEK_CUR));
+ f->fdpos += z;
+ l -= z;
+ c += z;
}
+ f->bptr = f->buffer;
+ f->pos = f->fdpos;
}
void bflush(struct fastbuf *f)
#endif
#endif
+#define SHERLOCK_O_LARGEFILE O_LARGEFILE
+
#if 0
/* A "do it yourself" solution */
#else /* !SHERLOCK_CONFIG_LFS */
#define sh_seek(f,o,w) lseek(f,o,w)
+#define SHERLOCK_O_LARGEFILE 0
#endif /* !SHERLOCK_CONFIG_LFS */
#endif /* !_SHERLOCK_LFS_H */