Standard input
This commit is contained in:
parent
31f41d2485
commit
9b25546e58
30
srohtml.c
30
srohtml.c
|
@ -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;
|
||||
|
||||
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)
|
||||
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++;
|
||||
}
|
||||
|
||||
*str = safe_malloc(i + 1);
|
||||
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue