2021-03-26 14:39:26 +01:00
|
|
|
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
|
|
|
/* Copyright (C) 2021 KikooDX */
|
|
|
|
|
|
|
|
#include "strtoint.h"
|
|
|
|
#include <stdio.h>
|
2021-03-26 15:02:10 +01:00
|
|
|
#include <stdlib.h>
|
2021-03-26 15:54:43 +01:00
|
|
|
#include <string.h>
|
2021-03-26 14:39:26 +01:00
|
|
|
|
2021-03-26 15:02:10 +01:00
|
|
|
/* Attempt to convert a string to integer. */
|
2021-03-26 15:54:43 +01:00
|
|
|
int strtoint(char *string)
|
|
|
|
{
|
2021-03-26 14:39:26 +01:00
|
|
|
const size_t string_len = strlen(string);
|
2021-03-27 18:34:47 +01:00
|
|
|
int character;
|
|
|
|
int i;
|
2021-03-26 14:39:26 +01:00
|
|
|
int sum = 0;
|
|
|
|
int multiplier = 1;
|
2021-03-26 15:02:10 +01:00
|
|
|
int negative = string[0] == '-';
|
|
|
|
for (i = string_len - 1; i >= negative; i -= 1) {
|
2021-03-26 14:39:26 +01:00
|
|
|
character = string[i];
|
|
|
|
if (character < '0' || character > '9') {
|
2021-03-26 15:54:43 +01:00
|
|
|
fprintf(stderr,
|
|
|
|
"ERROR: flag expected a number "
|
|
|
|
"argument, got \"%s\"\n",
|
|
|
|
string);
|
2021-03-26 15:02:10 +01:00
|
|
|
exit(EXIT_FAILURE);
|
2021-03-26 14:39:26 +01:00
|
|
|
}
|
|
|
|
sum += multiplier * (character - '0');
|
|
|
|
multiplier *= 10;
|
|
|
|
}
|
2021-03-26 15:02:10 +01:00
|
|
|
if (negative)
|
|
|
|
return sum * -1;
|
|
|
|
else
|
|
|
|
return sum;
|
2021-03-26 14:39:26 +01:00
|
|
|
}
|