Standard input

This commit is contained in:
Matteo Bini 2024-07-15 20:52:30 +02:00
parent 31f41d2485
commit 9b25546e58
1 changed files with 22 additions and 12 deletions

View File

@ -11,6 +11,7 @@
#define FAVICON "data:image/gif;base64,R0lGODlhEAAQAKEAAAAAcP///wAAcAAAcCH5BAEKAAIALAAAAAAQABAAQAIwlBWZxxwAQWjtTQRvlZhTnGSfYT3eZ3WaE4mjGa1UasoH7c6tzYanfqmhJMKXglcAADs="
#define LANG_LEN 2
#define LINE_MAX 1000
#define LINE_START 80
#define NOTES_START 8
#define NOTES_MAX_DIGITS 3
@ -51,7 +52,7 @@ static void cmd_tm(const char *line);
static void cmd_ur(const char *line);
static void footer(void);
static void footnotes(void);
static int fread_line(FILE *file, char **str, size_t *len);
static size_t fread_line(FILE *file, char **str, size_t *len);
static void indent_str(char **str);
static void page_head(void);
static void print_help(void);
@ -570,26 +571,31 @@ footnotes(void)
string_cat(&body, "\t\t</div>\n");
}
int
size_t
fread_line(FILE *file, char **str, size_t *len)
{
int c;
char *end;
size_t i;
i = 0;
while ((c = fgetc(file)) && c != '\n' && c != EOF && i < LINE_MAX)
i++;
*str = safe_malloc(i + 1);
if (*str == NULL) {
*len = LINE_START + 1;
*str = safe_malloc(sizeof(char) * *len);
}
i = 0;
while ((c = fgetc(file)) && c != '\n' && c != EOF && i < LINE_MAX) {
if (i >= *len - 1) {
*len *= 2;
*str = safe_realloc(*str, sizeof(char) * *len);
}
(*str)[i] = c;
i++;
}
fseek(file, -i - 1, SEEK_CUR);
fread(*str, 1, i, file);
(*str)[i] = '\0';
*len = i;
fseek(file, 1, SEEK_CUR);
return c == EOF ? EOF : c;
return c == EOF ? EOF : i;
}
void
@ -649,6 +655,8 @@ main (int argc, char *argv[])
sitography.size = NOTES_START;
sitography.notes = malloc(sizeof(note) * sitography.size);
len = 0;
line = NULL;
while (fread_line(in, &line, &len) != EOF) {
if (!len)
cmd_close();
@ -669,6 +677,8 @@ main (int argc, char *argv[])
space = 1;
}
free(line);
len = 0;
line = NULL;
}
free(line);
if (in != stdin)