Improve sleep's input parsing.
This commit is contained in:
parent
8783d7f5fc
commit
9a1a9a27c9
17
src/sleep.c
17
src/sleep.c
@ -2,7 +2,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "support.h"
|
#include "support.h"
|
||||||
|
|
||||||
@ -18,15 +18,22 @@ int main(int argc, char **argv)
|
|||||||
throw(NEEDARG_FAIL, mastrcat(argv[0], " int"));
|
throw(NEEDARG_FAIL, mastrcat(argv[0], " int"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* have we received a positive integer? */
|
||||||
|
/* subtract one from strlen result to account for zero indexing */
|
||||||
|
for(i = (strlen(argv[1])-1); i >= 0; i--)
|
||||||
|
{
|
||||||
|
if(!isdigit(argv[1][i]))
|
||||||
|
{
|
||||||
|
throw(NEEDARG_FAIL, mastrcat(argv[0], " int"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
i = (int) (strtol(argv[1], (char **) NULL, 10));
|
i = (int) (strtol(argv[1], (char **) NULL, 10));
|
||||||
if(errno == ERANGE)
|
if(errno == ERANGE)
|
||||||
{
|
{
|
||||||
throw(TIME_FAIL, mastrcat(argv[0], " ERANGE error."));
|
throw(TIME_FAIL, mastrcat(argv[0], " ERANGE error."));
|
||||||
}
|
}
|
||||||
if(i < 0)
|
|
||||||
{
|
|
||||||
throw(MISC_FAIL, mastrcat(argv[0], ": need positive number."));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sleep(i);
|
sleep(i);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user