Project

General

Profile

Statistics
| Branch: | Revision:

root / mainbox / util.c @ 5e03b78d

History | View | Annotate | Download (822 Bytes)

1 15928a3d Tom Mullins
#include "util.h"
2 5e03b78d Tom Mullins
#include "log.h"
3 15928a3d Tom Mullins
#include <stdlib.h>
4
#include <stdio.h>
5
#include <unistd.h>
6
#include <sys/types.h>
7
#include <sys/stat.h>
8
#include <fcntl.h>
9
10
char *read_file(const char *filename) {
11
  int fd, len, size, nread;
12
  char *str;
13
  
14
  fd = open(filename, O_RDONLY);
15
  if (fd < 0) {
16 5e03b78d Tom Mullins
    log_perror("open");
17 15928a3d Tom Mullins
    return NULL;
18
  }
19
20
  len = 0;
21
  size = 64;
22
  str = malloc(size);
23
  if (!str) {
24
    close(fd);
25
    return NULL;
26
  }
27
28
  while (1) {
29
    nread = read(fd, str+len, size-len);
30
    len += nread;
31
    if (len == size) {
32
      size *= 2;
33
      str = realloc(str, size);
34
      if (!str)
35
        return NULL;
36
    }
37
    if (nread == 0) {
38
      str[len] = '\0';
39
      close(fd);
40
      return str;
41
    } else if (nread < 0) {
42 5e03b78d Tom Mullins
      log_perror("read");
43 15928a3d Tom Mullins
      free(str);
44
      close(fd);
45
      return NULL;
46
    }
47
  }
48
}