diff options
Diffstat (limited to 'common.c')
-rw-r--r-- | common.c | 59 |
1 files changed, 58 insertions, 1 deletions
@@ -1,9 +1,12 @@ +#include "common.h" #include "config.h" + #include <stdarg.h> +#include <stdint.h> +#include <stdio.h> #include <strings.h> #include <unistd.h> -// wrapper for write void writef(char *format, ...) { va_list args; @@ -18,3 +21,57 @@ void writef(char *format, ...) n++; write(0, buf, n); } + +u16 str_len(char *str) +{ + u16 i = 0; + while (str[i]) + i++; + return i; +} + +void str_cpy(char *to, char *from) +{ + while ((*to++ = *from++)) + ; +} + +u8 save_message(struct message *msg, FILE *f) +{ + u8 err = 0; + u16 len; + if (msg->text == NULL) { + len = 0; + msg->text = ""; // TODO: Error empty message should not be allowed. + } else { + len = str_len(msg->text); + } + + if (len == 0) + err = 1; + + fwrite(&msg->timestamp, sizeof(*msg->timestamp) * MSG_TIMESTAMP_LEN, 1, f); + fwrite(&msg->author, sizeof(*msg->author) * MSG_AUTHOR_LEN, 1, f); + fwrite(&len, sizeof(len), 1, f); + fputs(msg->text, f); + + return err; +} + +u8 load_message(struct message *msg, FILE *f) +{ + fread(msg, sizeof(*msg->timestamp) * MSG_TIMESTAMP_LEN + sizeof(*msg->author) * MSG_AUTHOR_LEN, 1, f); + u16 len; + fread(&len, sizeof(len), 1, f); + if (len == 0) { + // TODO: Error: empty message should not be allowed + // empty message + msg->text = ""; + return 1; + } + char txt[len]; + fgets(txt, len, f); + msg->text = txt; + + return 0; +} |