graphql-idl-parser-ffi 0.1.3

An FFI interface for the GraphQL IDL format parser.
#include "helpers.h"
#include "clar.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *file2strl(const char *path, unsigned int *file_len_out)
{
  FILE *file;

  if (!(file = fopen(path, "rb"))) {
    fprintf(stderr, "Unable to open file %s\n", path);
    return NULL;
  }

  if (-1 == fseek(file, 0, SEEK_END)) {
    fprintf(stderr, "Unable to seek file %s\n", path);
    return NULL;
  }

  int file_len;
  if (-1 == (file_len = ftell(file))) {
    fprintf(stderr, "Unable to ftell() file %s\n", path);
    return NULL;
  }

  if (-1 == fseek(file, 0, SEEK_SET)) {
    fprintf(stderr, "Unable to seek file %s\n", path);
    return NULL;
  }

  char *contents;
  if (!(contents = malloc(file_len + 1))) {
    fprintf(stderr, "Memory error!\n");
    fclose(file);
    return NULL;
  }

  fread(contents, file_len, 1, file);
  fclose(file);

  contents[file_len] = '\0';

  if (file_len_out) {
    *file_len_out = file_len + 1;
  }

  return contents;
}

char *file2str(const char *path)
{
  return file2strl(path,NULL);
}

char * read_fixture(const char *filename)
{
  const char *tex = cl_fixture(filename);
  return file2str(tex);
}