From 8c7006c3ce636e7ba4127e5567350c334c3ea5e1 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Fri, 18 Jun 2021 09:38:10 -0400 Subject: Move all miscellaneous functions from `config.c` into `misc.c`. --- config.c | 1 + misc.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ misc.h | 7 ++++++ 3 files changed, 83 insertions(+) create mode 100644 misc.c create mode 100644 misc.h diff --git a/config.c b/config.c index 129d44d..79e8b45 100644 --- a/config.c +++ b/config.c @@ -5,6 +5,7 @@ #include #include "config.h" #include "macros.h" +#include "misc.h" char *read_file(const char *filename, long *size) { /* Open the file. */ diff --git a/misc.c b/misc.c new file mode 100644 index 0000000..6782ff4 --- /dev/null +++ b/misc.c @@ -0,0 +1,75 @@ +#include +#include +#include +#include "misc.h" + +char *read_file(const char *filename, long *size) { + /* Open the file. */ + FILE *fp = fopen(filename, "r"); + /* Size of the file, in bytes. */ + long filesize = 0; + /* Buffer of the file contents. */ + char *buf; + + /* Return NULL, if we couldn't open the file. */ + if (fp == NULL) { + return NULL; + } + + /* Return NULL, if we couldn't seek to the end of the file. */ + if (fseek(fp, 0L, SEEK_END)) { + fclose(fp); + return NULL; + } + + /* Get the size of the file, in bytes. */ + filesize = ftell(fp); + + /* Return NULL, if the returned size is negative. */ + if (filesize < 0) { + fclose(fp); + return NULL; + } + + /* Allocate enough space for the entire file, plus one. */ + buf = calloc(filesize+1, sizeof(char)); + + /* Return NULL, if the buffer wasn't allocated. */ + if (buf == NULL) { + fclose(fp); + return NULL; + } + + /* Seek back to the start of the file. */ + rewind(fp); + /* Read the entire file contents into the buffer. */ + fread(buf, sizeof(char), filesize, fp); + /* Close the file. */ + fclose(fp); + + /* Return the filesize, in bytes. */ + *size = filesize; + /* Return the buffer. */ + return buf; +} + +char *get_line(char **str) { + char *s; + size_t i; + char *tmp = *str; + + for (i = 0; tmp[i] != '\n' && tmp[i] != '\0'; i++); + + s = calloc(i+1, sizeof(char)); + memcpy(s, *str, i); + + *str += (i+1); + return s; +} + +char *make_str(const char *str) { + const size_t length = strlen(str); + char *s = calloc(length+1, sizeof(char)); + memcpy(s, str, length+1); + return s; +} diff --git a/misc.h b/misc.h new file mode 100644 index 0000000..9216250 --- /dev/null +++ b/misc.h @@ -0,0 +1,7 @@ +#ifndef MISC_H +#define MISC_H + +extern char *read_file(const char *filename, long *size); +extern char *get_line(char **str); +extern char *make_str(const char *str); +#endif -- cgit v1.2.3-13-gbd6f