return 0;
}
+static int
+string_to_number(const char *s, unsigned int min, unsigned int max,
+ unsigned int *ret)
+{
+ long number;
+ char *end;
+
+ errno = 0;
+ number = strtol(s, &end, 0);
+ if (*end == '\0' && end != s) {
+ if (errno != ERANGE && min <= number && number <= max) {
+ *ret = number;
+ return 0;
+ }
+ }
+ return -1;
+}
+
/*
* @desc place pid to cgroup.procs file
* @return 0 in case of success, errno value in case of failure
char child_buf[21 + MAX_DEC_SIZE(int) + MAX_DEC_SIZE(int) + 1];
char pidbuf[MAX_DEC_SIZE(int)];
stc_error_e ret;
+ unsigned int child_pid;
FILE *f;
f = fopen(child_buf, "r");
ret_value_msg_if(!f, STC_ERROR_FAIL, "Failed to get child pids!");
while (fgets(pidbuf, sizeof(pidbuf), f) != NULL) {
- int child_pid = atoi(pidbuf);
- if (child_pid < 0) {
+ if (string_to_number(pidbuf, INT_MIN, INT_MAX, &child_pid) != 0) {
STC_LOGE("Invalid child pid!");
fclose(f);
return STC_ERROR_FAIL;