- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
/* skip directories */
if (S_ISDIR(statbuf.st_mode))
goto out;
/* skip non-readable files */
if ((statbuf.st_mode & S_IRUSR) == 0)
goto out;
/* read attribute value */
fd = open(path, O_RDONLY);
if (fd < 0) {
dbg(udev_device->udev, "attribute '%s' can not be opened\n", path);
goto out;
}
size = read(fd, value, sizeof(value));
close(fd);
if (size < 0)
goto out;
if (size == sizeof(value))
goto out;
/* got a valid value, store it in cache and return it */
value[size] = '\0';
util_remove_trailing_chars(value, '\n');
dbg(udev_device->udev, "'%s' has attribute value '%s'\n", path, value);
list_entry = udev_list_entry_add(udev_device->udev, &udev_device->sysattr_list, sysattr, value, 0, 0);
val = udev_list_entry_get_value(list_entry);
out:
return val;
semoro 02.07.2016 01:52 # −3
bormand 02.07.2016 06:24 # +6
З.Ы. В других функциях после метки out всяко есть освобождение ресурсов.
semoro 02.07.2016 06:47 # 0
bormand 02.07.2016 06:54 # +3
Вот "оптимизируешь" ты сейчас всё это return'ами, а потом тебе в этой функции потребуется выделить память. Будешь обратно goto втыкать?
Короче в данном контектсте goto - не говно, а средство передвижения.
bakagaijin 02.07.2016 07:43 # +4
semoro 02.07.2016 07:50 # +2
bormand 02.07.2016 08:15 # 0
gost 02.07.2016 17:24 # +3
CHayT 02.07.2016 19:17 # +10
guestinho 04.07.2016 23:32 # 0
guesto 04.07.2016 23:32 # 0
bormand 05.07.2016 19:41 # 0
guest 05.07.2016 22:41 # +2
guesto 05.07.2016 22:44 # +2
guest 05.07.2016 22:50 # +1