#include "libsysfs/sysfs/libsysfs.h"
#include "list.h"
#include "udev.h"
+#include "udev_lib.h"
#include "udev_version.h"
#include "logging.h"
#include "namedev.h"
int i;
char c;
char *spos;
+ char *rest;
int slen;
struct sysfs_attribute *tmpattr;
/* get part part of the result string */
i = 0;
if (attr != NULL)
- i = atoi(attr);
+ i = strtoul(attr, &rest, 10);
if (i > 0) {
foreach_strpart(udev->program_result, " \n\r", spos, slen) {
i--;
dbg("requested part of result string not found");
break;
}
- strfieldcpymax(temp2, spos, slen+1);
+ if (rest[0] == '+')
+ strfieldcpy(temp2, spos);
+ else
+ strfieldcpymax(temp2, spos, slen+1);
strfieldcatmax(string, temp2, maxsize);
dbg("substitute part of result string '%s'", temp2);
} else {
}
if (dev->symlink[0] != '\0') {
- char temp[NAME_MAX];
-
info("configured rule in '%s' at line %i applied, added symlink '%s'",
dev->config_file, dev->config_line, dev->symlink);
- /* do not clobber dev */
- strfieldcpy(temp, dev->symlink);
- apply_format(udev, temp, sizeof(temp),
- class_dev, sysfs_device);
- strfieldcat(udev->symlink, temp);
- strfieldcat(udev->symlink, " ");
+ if (udev->symlink[0] != '\0')
+ strfieldcat(udev->symlink, " ");
+ strfieldcat(udev->symlink, dev->symlink);
}
if (dev->name[0] != '\0') {
goto done;
found:
- apply_format(udev, udev->name, sizeof(udev->name),
- class_dev, sysfs_device);
+ apply_format(udev, udev->name, sizeof(udev->name), class_dev, sysfs_device);
+ apply_format(udev, udev->symlink, sizeof(udev->symlink), class_dev, sysfs_device);
udev->partitions = dev->partitions;
done: