/* * pure_getline.c * * Author: Intel A80486DX2-66 * License: Unlicense */ #include "pure_getline.h" bool pure_getline(char** output) { /* * arguments: * char** output: must be a pointer to an allocated array * * return value: * true: no errors * false: an error occurred, see errno */ if (output == NULL) { errno = EINVAL; return false; } char* line = NULL; size_t len = 0; int character; bool past_first_time = false; while ((character = fgetc(stdin)) != EOF) { if (past_first_time && len == 0) { // check for integer overflow errno = ERANGE; *output = NULL; return false; } if (character == '\n') { line[len] = '\0'; break; } line[len++] = character; past_first_time = true; } *output = line; return true; }