+int only_test;
+
+char buf[LPGL_BUF_LEN];
+char *lgbuf;
+int lgbuf_size;
+char filename[MAX_FILENAME_LEN];
+char errmsg[MAX_FILENAME_LEN+20];
+
+static void
+alloc_lgbuf()
+{
+
+ if (lgbuf)
+ return;
+
+ lgbuf_size = MAX_LGBUF_SIZE;
+ for (; lgbuf_size >= MIN_LGBUF_SIZE; lgbuf_size -= ONE_MB)
+ if ((lgbuf = (char *)malloc(lgbuf_size)) != NULL)
+ return;
+
+ FAIL("malloc of large buffer failed.\n");
+}
+
+static inline void
+read_buf(int fd)
+{
+ int pos, rc;
+
+ rc = read(fd, buf, sizeof(buf));
+ if (rc == -1) {
+ pos = lseek(fd, 0, SEEK_CUR);
+ sprintf(errmsg, "read of file %s at pos %d for %lu bytes "
+ "returned %d: (%d) %s.\n",
+ filename, pos, sizeof(buf), rc, errno, strerror(errno));
+ FAIL(errmsg);
+ } else if (rc != sizeof(buf)) {
+ pos = lseek(fd, 0, SEEK_CUR);
+ sprintf(errmsg, "read of file %s at pos %d for %lu bytes "
+ "returned %d.\n",
+ filename, pos, sizeof(buf), rc);
+ FAIL(errmsg);
+ }
+}
+
+static inline void
+write_buf(int fd, int index)
+{
+ int pos = index * sizeof(buf);
+ int rc;
+
+ memset(buf, index, sizeof(buf));
+ lseek(fd, pos, SEEK_SET);
+ rc = write(fd, buf, sizeof(buf));
+ if (rc == -1) {
+ sprintf(errmsg, "write of file %s at pos %d for %lu bytes "
+ "returned %d: (%d) %s.\n",
+ filename, pos, sizeof(buf), rc, errno, strerror(errno));
+ FAIL(errmsg);
+ } else if (rc != sizeof(buf)) {
+ sprintf(errmsg, "write of file %s at pos %d for %lu bytes "
+ "returned %d.\n",
+ filename, pos, sizeof(buf), rc);
+ FAIL(errmsg);
+ }
+}