Changes from being mostly assembly to be based upon a C version.
Adds the additional error conditions for get_s: truncation and too small buffer.
This commit is contained in:
parent
581137ade7
commit
cfd2e5142a
|
@ -1,6 +1,7 @@
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "conio.h"
|
#include "conio.h"
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
|
#include "stdbool.h"
|
||||||
|
|
||||||
void putchar(char c)
|
void putchar(char c)
|
||||||
{
|
{
|
||||||
|
@ -29,13 +30,29 @@ char * gets(char * str)
|
||||||
|
|
||||||
char * gets_s(char * str, size_t n)
|
char * gets_s(char * str, size_t n)
|
||||||
{
|
{
|
||||||
|
if (str == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (n == 0 || n == 1)
|
||||||
|
return NULL;
|
||||||
|
str[0] = '\0';
|
||||||
char i = 0, t = n - 1;
|
char i = 0, t = n - 1;
|
||||||
|
bool isTruncated = false;
|
||||||
|
|
||||||
while ((char ch = getpch()) != '\n')
|
while ((char ch = getpch()) != '\n')
|
||||||
{
|
{
|
||||||
if (i < t)
|
if (i < t)
|
||||||
str[i++] = ch;
|
str[i++] = ch;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isTruncated = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
str[i] = 0;
|
str[i] = 0;
|
||||||
|
|
||||||
|
if (isTruncated)
|
||||||
|
return NULL;
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue