#include <stdio.h>
#include <stdbool.h>

bool readline(FILE* f, char* buf, size_t len) {
  char* start = buf;
  char* end = buf + len;
  while (buf != end) {
    *buf = fgetc(f);
    if (*buf == EOF || *buf == '\n') {
      *buf = '\0';
      return buf != start;
    }
    buf++;
  }
  // Line was too long
  return false;
}

int main(int argc, char** argv) {
  const char* fileName = argc > 1 ? argv[1] : "test.txt";
  FILE* f = fopen(fileName, "r");
  if (!f)
    return 1;

  char line[512];
  size_t i = 0;
  while (readline(f, line, sizeof(line)))
    printf("Line %zu: %s\n", i++, line);
  return 0;
}
