static char * lib_dlb_fgets(char *buf, int len, dlb * dp) { int i; char *bp, c = 0; if (len <= 0) return buf; /* sanity check */ /* return NULL on EOF */ if (dp->mark >= dp->size) return NULL; len--; /* save room for null */ for (i = 0, bp = buf; i < len && dp->mark < dp->size && c != '\n'; i++, bp++) { if (dlb_fread(bp, 1, 1, dp) <= 0) break; /* EOF or error */ c = *bp; } *bp = '\0'; #if defined(WIN32) if ((bp = strchr(buf, '\r')) != 0) { *bp++ = '\n'; *bp = '\0'; } #endif return buf; }
void display_file(const char *fname, boolean complain) { dlb *fp; char *buf; int fsize; fp = dlb_fopen(fname, "r"); if (!fp) { if (complain) { pline("Cannot open \"%s\".", fname); } else if (program_state.something_worth_saving) doredraw(); } else { dlb_fseek(fp, 0, SEEK_END); fsize = dlb_ftell(fp); dlb_fseek(fp, 0, SEEK_SET); buf = malloc(fsize); dlb_fread(buf, fsize, 1, fp); dlb_fclose(fp); display_buffer(buf, complain); free(buf); } }
static void Fread (void *ptr, int size, int nitems, dlb *stream) { int cnt; if ((cnt = dlb_fread(ptr, size, nitems, stream)) != nitems) { panic("PREMATURE EOF ON QUEST TEXT FILE! Expected %d bytes, got %d", (size * nitems), (size * cnt)); } }