diff options
-rw-r--r-- | config.h | 1 | ||||
-rw-r--r-- | pages.c | 69 | ||||
-rw-r--r-- | pages.h | 3 |
3 files changed, 59 insertions, 14 deletions
@@ -37,6 +37,7 @@ static const char *info_string = "{INFO}"; static const char *time_string = "{TIME}"; static const char *template_file = "template.txt"; static const char *frontpage_title = "Index"; +static const char *frontpage_info = "<h1>Index</h1>"; static const char *frontpage_index = "content/index.txt"; static const char *frontpage_index_output = "index.html"; @@ -46,7 +46,6 @@ createfile(const char *file) FILE *out = fopen(filename, "w"); if (!out) { - fprintf(stderr, "unable to open file '%s', unrecoverable failure\n", filename); return 0; } @@ -190,7 +189,6 @@ deletebytes(const char *file, long offset, size_t bytes) if (rename("tmp.tmp", filename) == -1) { - fprintf(stderr, "unable to rename tmp file to '%s', unrecoverable failure\n", filename); fclose(out); return 0; @@ -278,7 +276,6 @@ writefileatbyte(const char *dest, const char *source, long offset) if (rename("tmp.tmp", filename) == -1) { - fprintf(stderr, "unable to rename tmp file to '%s', unrecoverable failure\n", filename); return 0; } @@ -287,32 +284,76 @@ writefileatbyte(const char *dest, const char *source, long offset) } int -frontpage(int flags) +replaceinpage(const char *outfile, const char *toreplace, const char *infile) { - if (!createfile(frontpage_index_output)) + /* + * replace 'toreplace' in file 'outfile' taking 'infile' as input + * return 1 on success, 0 on failure + */ + long substrpos = -1; + + substrpos = findstring(frontpage_index_output, toreplace); + + if (substrpos < 0) { - fprintf(stderr, "unable to generate frontpage\n"); return 0; } - long substrpos = -1; + if (!deletebytes(frontpage_index_output, substrpos, strlen(toreplace))) + { + return 0; + } + + if (!writefileatbyte(outfile, infile, substrpos)) + { + return 0; + } + return 1; +} - substrpos = findstring(frontpage_index_output, "cirno"); +char +*gettime() +{ + return "10/10/2019"; +} - if (substrpos < 0) +int +createtmpfile(const char *name, const char *content, size_t size) +{ + FILE *tmp = fopen(name, "w"); + if (!tmp) { - fprintf(stderr, "unable to generate frontpage\n"); + fprintf(stderr, "unable to create temp file '%s', unrecoverable failure\n", name); return 0; } + fwrite(content, 1, size, tmp); + fclose(tmp); + return 1; +} - printf("first occurance of '%s' is at byte %ld\n", "cirno", substrpos); +int +frontpage(int flags) +{ + if (!createfile(frontpage_index_output)) + { + fprintf(stderr, "unable to generate frontpage\n"); + return 0; + } - - if (!deletebytes(frontpage_index_output, substrpos, strlen("cirno"))) + createtmpfile("title.tmp", frontpage_title, strlen(frontpage_title)); + createtmpfile("info.tmp", frontpage_info, strlen(frontpage_info)); + createtmpfile("date.tmp", gettime(), strlen(gettime())); + if (!replaceinpage(frontpage_index_output, content_string, frontpage_index) || + !replaceinpage(frontpage_index_output, title_string, "title.tmp") || + !replaceinpage(frontpage_index_output, info_string, "info.tmp") || + !replaceinpage(frontpage_index_output, time_string, "date.tmp")) { fprintf(stderr, "unable to generate frontpage\n"); return 0; } - writefileatbyte(frontpage_index_output, "source.txt", substrpos); + remove("title.tmp"); + remove("date.tmp"); + remove("info.tmp"); + return 1; } @@ -26,6 +26,9 @@ int createfile(const char *file); long findstring(const char *file, const char *str); int deletebytes(const char *file, long offset, size_t bytes); int writefileatbyte(const char *dest, const char *source, long offset); +int replaceinpage(const char *outfile, const char *toreplace, const char *infile); +char *gettime(); +int createtmpfile(const char *name, const char *content, size_t size); /* generators (to be put into the pages array) */ int frontpage(int flags); |