// SPDX-License-Identifier: LGPL-3.0-or-later
#include "privates.h"
+#include <utils.h>
+
#include <string.h>
#include <errno.h>
#include <stdio.h>
if (dev != NULL) {
const char *sysnum = udev_device_get_sysnum(dev);
long val;
- char *endptr;
- errno = 0;
- val = strtol(sysnum, &endptr, 10);
- if (errno == 0 && *endptr == '\0' && val >= 0) {
- (*entries)[index] = (guint)val;
+ if (!long_from_string(sysnum, &val)) {
+ (*entries)[index] = val;
++index;
}
udev_device_unref(dev);
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "privates.h"
+#include <utils.h>
+
#include <stdio.h>
#include <errno.h>
#include <stdbool.h>
if (dev != NULL) {
const char *sysnum = udev_device_get_sysnum(dev);
long val;
- char *endptr;
- errno = 0;
- val = strtol(sysnum, &endptr, 10);
- if (errno == 0 && *endptr == '\0' && val >= 0) {
+ if (!long_from_string(sysnum, &val)) {
(*entries)[index] = (guint)val;
++index;
}
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "privates.h"
+#include <utils.h>
+
#include <stdio.h>
#include <errno.h>
#include <stdbool.h>
if (dev != NULL) {
const char *sysnum = udev_device_get_sysnum(dev);
long val;
- char *endptr;
- errno = 0;
- val = strtol(sysnum, &endptr, 10);
- if (errno == 0 && *endptr == '\0' && val >= 0) {
+ if (!long_from_string(sysnum, &val)) {
(*entries)[index] = (guint)val;
++index;
}
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "privates.h"
+#include <utils.h>
+
#include <stdio.h>
#include <stdbool.h>
#include <errno.h>
int fd;
ssize_t len;
long v;
- char *term;
+ int err;
snprintf(literal, sizeof(literal), SYSFS_SND_TIMER_NODE "parameters/%s",
param_name);
goto end;
}
- v = strtol(buf, &term, 10);
- if (errno > 0)
- generate_file_error(error, errno, "strtol()");
- else if (*term != '\n')
- generate_file_error(error, EIO, "strtol()");
+ err = long_from_string(buf, &v);
+ if (err < 0)
+ generate_file_error(error, -err, "Fail to parse snd_timer module parameter as integer value");
else
*val = (int)v;
end:
]
sources = [
+ 'string.c',
]
dependencies = [
--- /dev/null
+// SPDX-License-Identifier: LGPL-3.0-or-later
+#include <stdlib.h>
+#include <errno.h>
+
+long long_from_string(const char *literal, long *number)
+{
+ long val;
+ char *endptr;
+
+ errno = 0;
+ val = strtol(literal, &endptr, 10);
+ if (errno > 0)
+ return -errno;
+ if (!endptr || endptr == literal || *endptr != 0)
+ return -EINVAL;
+ *number = val;
+ return 0;
+}
#ifndef __ALSA_GOBJECT_UTILS_H__
#define __ALSA_GOBJECT_UTILS_H__
+long long_from_string(const char *literal, long *number);
+
#endif