#include #include #include #include #include #include char* read_textfile(const char* filename) { FILE* fp = fopen(filename, "r"); if (!fp) { goto couldnt_read_file; } if (fseek(fp, 0, SEEK_END) != 0) { goto couldnt_read_file; } long file_size = ftell(fp); if (file_size < 0) { goto couldnt_read_file; } if (fseek(fp, 0, SEEK_SET) != 0) { goto couldnt_read_file; } char* buffer = malloc(file_size + 1); assert(buffer); if (fread(buffer, sizeof(char), file_size, fp) != (size_t)file_size) { goto couldnt_read_file; } buffer[file_size] = '\0'; couldnt_read_file: fprintf(stderr, "error: couldn't read file '%s': %s\n", filename, strerror(errno)); return nullptr; } int main(int argc, char* argv[]) { if (argc < 2) { fprintf(stderr, "error: no filename\n"); return EXIT_FAILURE; } char* filename = argv[1]; char* text = read_textfile(filename); if (!text) { return EXIT_FAILURE; } }