123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #include <stdbool.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- char *loadfile(const char *fname, unsigned int *s) {
- FILE *f = fopen(fname, "rb");
- unsigned int size = 0; // number of elements to buffer;
- unsigned int rcnt = 0; // number of char's read by fread(...)
- if (f == NULL) {
- perror("Error 1: ");
- return NULL;
- }
- // this method of determining file size works up to 2 GB.
- fseek(f, 0, SEEK_END);
- size = ftell(f);
- rewind(f);
- char *buf = (char*)malloc(sizeof(char) * size);
- if (buf == NULL) {
- perror("Error 2: ");
- free(buf);
- return NULL;
- }
- rcnt = fread(buf, sizeof(char), size, f);
- if (rcnt < size) {
- perror("Error 3: ");
- free(buf);
- return NULL;
- }
- fclose(f);
- *s = rcnt;
- return buf;
- }
- void write(const char *filename,
- const char* t,
- unsigned int size) {
- if (filename == NULL) {
- return;
- }
- unsigned int written = 0;
- FILE *out = fopen(filename, "wb");
- if (out != NULL) {
- written = fwrite(t, sizeof(unsigned char), size, out);
- fclose(out);
- if (written == 0) {
- perror("write error");
- exit(4);
- }
- }
- }
- void append(const char *filename, const char *t, unsigned size) {
- if (filename == NULL) {
- return;
- }
- unsigned int written = 0;
- FILE *out = fopen(filename, "ab");
- if (out != NULL) {
- written = fwrite(t, sizeof(unsigned char), size, out);
- fclose(out);
- if (written == 0) {
- perror("write error");
- exit(4);
- }
- }
- }
|