scripts: move mega-sena in
[lcapit-junk-code.git] / CEP / C / misc.c
bloba6ede7436c05c73a7c1440f5d52ace8a346de5a7
1 #include <stdio.h>
2 #include <stdarg.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include <assert.h>
7 #include "misc.h"
9 void fatal(const char *err, ...)
11 va_list params;
13 fputs("ERROR: ", stderr);
15 va_start(params, err);
16 vfprintf(stderr, err, params);
17 va_end(params);
19 putc('\n', stderr);
21 exit(1);
24 char *read_chars(FILE *db, int (*eof_chars)(FILE *db, char c))
26 int c;
27 char *info;
28 size_t len, i;
29 const int def_len = 12;
30 const int grow_hate = 2;
32 len = def_len;
34 info = malloc(len);
35 if (!info)
36 fatal("Could not allocate memory");
38 i = 0;
39 for (;;) {
40 for (; i < len; i++) {
41 c = fgetc(db);
42 if (c == EOF) {
43 free(info);
44 return NULL;
45 } else if (eof_chars(db, c)) {
46 info[i] = '\0';
47 return info;
51 * we probably don't want these characters
52 * in the buffer
54 assert(c != '\0');
55 assert(c != '\r');
56 assert(c != '\n');
58 info[i] = c;
61 len *= grow_hate;
62 info = realloc(info, len);
63 if (!info)
64 fatal("Could not reallocate memory");
67 /* should never get here */
68 abort();
70 return NULL; /* gcc */