int r;
int ret = 0;
char buf[BUF_MAX];
+ unsigned long value;
fd = open(extcon_devices[index].str, O_RDWR | O_CREAT, 0644);
if (fd < 0) {
}
buf[r] = '\0';
- extcon_devices[index].count = strtoul(buf, NULL, 10);
- extcon_devices[index].count += count;
-
+ value = strtoul(buf, NULL, 10);
+ if (value == ULONG_MAX && errno == ERANGE)
+ _E("converted value is over ULONG MAX(%lu)!", ULONG_MAX);
+ else if (value > ULONG_MAX - count)
+ value = ULONG_MAX;
+ else
+ value += count;
+
+ extcon_devices[index].count = value;
lseek(fd, 0, SEEK_SET);
_I("ext(%d) count %lu", index, extcon_devices[index].count);
snprintf(buf, sizeof(buf), "%lu", extcon_devices[index].count);