- lseek(fd, (long)(uid * sizeof (dqblk)), FSEEK_ABSOLUTE);
- if (read(fd, &dqblk, sizeof dqblk) != sizeof (dqblk)) {
- close(fd);
+ (void) lseek(fd, (off_t)(uid * sizeof (dqblk)), L_SET);
+ switch (read(fd, (char *)&dqblk, sizeof dqblk)) {
+ case 0: /* EOF */
+ /*
+ * Convert implicit 0 quota (EOF)
+ * into an explicit one (zero'ed dqblk).
+ */
+ bzero((caddr_t)&dqblk, sizeof dqblk);
+ break;
+
+ case sizeof dqblk: /* OK */
+ break;
+
+ default: /* ERROR */
+ fprintf(stderr, "quota: read error in ");
+ perror(qfilename);
+ (void) close(fd);