| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /* copyright (c) 2022 grunfink - MIT license */
- #ifndef _XS_IO_H
- #define _XS_IO_H
- d_char *xs_readall(FILE *f);
- d_char *xs_readline(FILE *f);
- d_char *xs_read(FILE *f, int size);
- #ifdef XS_IMPLEMENTATION
- d_char *xs_readall(FILE *f)
- /* reads the rest of the file into a string */
- {
- d_char *s;
- char tmp[1024];
- errno = 0;
- /* create the new string */
- s = xs_str_new(NULL);
- while (fgets(tmp, sizeof(tmp), f))
- s = xs_str_cat(s, tmp);
- return s;
- }
- d_char *xs_readline(FILE *f)
- /* reads a line from a file */
- {
- d_char *s = NULL;
- errno = 0;
- /* don't even try on eof */
- if (!feof(f)) {
- int c;
- s = xs_str_new(NULL);
- while ((c = fgetc(f)) != EOF) {
- unsigned char rc = c;
- s = xs_append_m(s, (char *)&rc, 1);
- if (c == '\n')
- break;
- }
- }
- return s;
- }
- d_char *xs_read(FILE *f, int size)
- /* reads up to size bytes from f */
- {
- d_char *s;
- errno = 0;
- s = xs_str_new(NULL);
- while (size != 0 && !feof(f)) {
- char tmp[2048];
- int n, r;
- if ((n = sizeof(tmp)) > size)
- n = size;
- r = fread(tmp, 1, n, f);
- s = xs_append_m(s, tmp, r);
- size -= r;
- }
- return s;
- }
- #endif /* XS_IMPLEMENTATION */
- #endif /* _XS_IO_H */
|