#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; }