mirror of
https://gitlab.com/80486DX2-66/gists
synced 2024-11-14 20:35:54 +05:30
48 lines
782 B
C
48 lines
782 B
C
/*
|
|
* 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;
|
|
}
|