чување 0983a2a9ec506ac7a6fa44339d5ad55f7aa7aeaa
родитељ 90922b1aa8b23fdfe69bd0f342a036917eec8f40
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Wed, 16 Dec 2020 16:29:17 +0100
Merged changes from WIP (stdin vs file split)
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
| M | index.html | | | 2 | +- |
| M | slweb.c | | | 65 | +++++++++++++++++++++++++++++++++++++++++++++++++++++------------ |
измењених датотека: 2, додавања: 54(+), брисања: 13(-)
diff --git a/index.html b/index.html
@@ -103,7 +103,7 @@ this program. If not, see <https://www.gnu.org/licenses/>. </p>
<div id="git-log">
Previous commit:
-index.slw 923f2de 2020-12-14 22:37:53 +0100 (Страхиња Радић) (HEAD -> master, origin/master, origin/HEAD)
+index.slw 90922b1 2020-12-14 22:39:51 +0100 (Страхиња Радић) (HEAD -> master, origin/master, origin/HEAD)
</div><!--git-log-->
diff --git a/slweb.c b/slweb.c
@@ -23,7 +23,7 @@
static size_t lineno = 0;
static size_t colno = 1;
-static char* filename = NULL;
+static uint8_t* filename = NULL;
int
version()
@@ -144,15 +144,16 @@ process_heading(uint8_t* token, FILE* output, UBYTE heading_level)
int
process_tag(uint8_t* token, FILE* output, BOOL end_tag)
{
- if (!token || u8_strlen(token) < 1)
+ if (!token || u8_strlen(token) < 1 || !filename)
return warning(1, (uint8_t*)"No tag\n");
- uint8_t* basename = (uint8_t*) calloc(strlen(filename), sizeof(uint8_t));
- uint8_t* slash = u8_strrchr((uint8_t*)filename, '/');
+ uint8_t* basename = (uint8_t*) calloc(u8_strlen(filename),
+ sizeof(uint8_t));
+ uint8_t* slash = u8_strrchr(filename, '/');
if (slash)
u8_strncpy(basename, slash+1, u8_strlen(slash+1));
else
- u8_strncpy(basename, filename, u8_strlen((uint8_t*)filename));
+ u8_strncpy(basename, filename, u8_strlen(filename));
if (!strcmp((char*)token, "git-log"))
{
@@ -1191,23 +1192,63 @@ main(int argc, char** argv)
FILE* input = NULL;
FILE* output = stdout;
+ uint8_t* buffer = NULL;
+
if (filename)
{
+ struct stat fs;
+
input = fopen(filename, "r");
if (!input)
return error(ENOENT, (uint8_t*)"No such file: %s\n", filename);
+
+ fstat(fileno(input), &fs);
+ buffer = (uint8_t*) calloc(fs.st_size, sizeof(uint8_t));
+ if (!buffer)
+ return error(ENOMEM,
+ (uint8_t*)"Memory allocation failed (out of memory?)\n");
+
+ fread((void*)buffer, sizeof(char), fs.st_size, input);
}
else
+ {
+ uint8_t* bufline = NULL;
+ size_t buffer_len = 0;
+ size_t bufline_len = 0;
+
input = stdin;
- struct stat fs;
- fstat(fileno(input), &fs);
- uint8_t* buffer = (uint8_t*) calloc(fs.st_size, sizeof(uint8_t));
- if (!buffer)
- return error(ENOMEM,
- (uint8_t*)"Memory allocation failed (out of memory?)\n");
+ bufline = (uint8_t*) calloc(BUFSIZE, sizeof(uint8_t));
+ if (!bufline)
+ return error(ENOMEM,
+ (uint8_t*)"Memory allocation failed (out of memory?)\n");
+ buffer = (uint8_t*) calloc(BUFSIZE, sizeof(uint8_t));
+ if (!buffer)
+ return error(ENOMEM,
+ (uint8_t*)"Memory allocation failed (out of memory?)\n");
+
+ while (!feof(input))
+ {
+ uint8_t* eol = NULL;
+ if (!fgets((char*)bufline, BUFSIZE-1, input))
+ break;
+ eol = u8_strchr(bufline, (ucs4_t)'\n');
+ if (eol)
+ *(eol+1) = '\0';
+ fprintf(stderr, "bufline = [%s]\n", bufline);
+ bufline_len = u8_strlen(bufline);
+ if (buffer_len + bufline_len + 1 > BUFSIZE)
+ {
+ buffer = (uint8_t*) realloc(buffer,
+ buffer_len + bufline_len + 1);
+ }
+ u8_strncat(buffer, bufline, bufline_len);
+ buffer_len += bufline_len;
+ }
+ free(bufline);
+ }
- fread((void*)buffer, sizeof(char), fs.st_size, input);
+ /*fprintf(stderr, "buffer = [%s]\n", buffer);*/
KeyValue* vars = NULL;
size_t vars_count = 0;