char *filestream_getline(RFILE *stream) { char* newline = (char*)malloc(9); char* newline_tmp = NULL; size_t cur_size = 8; size_t idx = 0; int in = filestream_getc(stream); if (!newline) return NULL; while (in != EOF && in != '\n') { if (idx == cur_size) { cur_size *= 2; newline_tmp = (char*)realloc(newline, cur_size + 1); if (!newline_tmp) { free(newline); return NULL; } newline = newline_tmp; } newline[idx++] = in; in = filestream_getc(stream); } newline[idx] = '\0'; return newline; }
int intfstream_getc(intfstream_internal_t *intf) { if (!intf) return 0; switch (intf->type) { case INTFSTREAM_FILE: return filestream_getc(intf->file.fp); case INTFSTREAM_MEMORY: return memstream_getc(intf->memory.fp); } return 0; }
int intfstream_getc(intfstream_internal_t *intf) { if (!intf) return -1; switch (intf->type) { case INTFSTREAM_FILE: return filestream_getc(intf->file.fp); case INTFSTREAM_MEMORY: return memstream_getc(intf->memory.fp); case INTFSTREAM_CHD: #ifdef HAVE_CHD return chdstream_getc(intf->chd.fp); #else break; #endif } return -1; }
char *filestream_gets(RFILE *stream, char *s, size_t len) { int c = 0; char *p = s; if (!stream) return NULL; /* get max bytes or up to a newline */ for (len--; len > 0; len--) { if ((c = filestream_getc(stream)) == EOF) break; *p++ = c; if (c == '\n') break; } *p = 0; if (p == s && c == EOF) return NULL; return (s); }
int rfgetc(RFILE* stream) { return filestream_getc(stream); }