За что я люблю Rust
Oct. 18th, 2022 04:31 pmЭто корректный код из mdadm. Многослойно-хтонический ужас С. Не программистов, которые это писали, самого языка.
int sysfs_fd_get_two(int fd, unsigned long long *v1, unsigned long long *v2)
{
/* two numbers in this sysfs file, either
* NNN (NNN)
* or
* NNN / NNN
*/
char buf[80];
int n;
char *ep, *ep2;
lseek(fd, 0, 0);
n = read(fd, buf, sizeof(buf));
if (n <= 0 || n == sizeof(buf))
return -2;
buf[n] = 0;
*v1 = strtoull(buf, &ep, 0);
if (ep == buf || (*ep != 0 && *ep != '\n' && *ep != ' '))
return -1;
while (*ep == ' ' || *ep == '/' || *ep == '(')
ep++;
*v2 = strtoull(ep, &ep2, 0);
if (ep2 == ep || (*ep2 != 0 && *ep2 != '\n' && *ep2 != ' ' && *ep2 != ')')) {
*v2 = *v1;
return 1;
}
return 2;
}