aboutsummaryrefslogtreecommitdiff
path: root/src/io.c
blob: 3f2922cde2e2d4350de4de93246d027628304ca3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "io.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "stdint.h"
#include "unistd.h"

int l_readfile(lua_State* L){
  size_t len;
  char* a = (char*)luaL_checklstring(L, 1, &len);

  FILE *fp;
  const uint64_t chunk_iter = 512;
  uint64_t chunk = 512;
  uint64_t count = 0;
  char* out = malloc(chunk);
  
  fp = fopen(a, "r");
  
  for(;;){
    char ch = fgetc(fp);   
    if(ch==EOF) break;
    
    if(count > chunk){
      chunk += chunk_iter;
      out = realloc(out, chunk);
    }
    out[count] = ch;
    count++;
  }
  out[count] = '\0';
  lua_pushstring(L, out);

  free(out);
  return 1; 
};