1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-10-30 14:55:26 +03:00

[PATCH] Problem parsing %s in udev rules

> > > > That explains the spaces.  What about stuff trailing %s, if %s does not
> > > > contain spaces.  I.e, in the above example, model is ST336753LC and the
> > > > resulting device file is /dev/scsi_disks/some-proceding-stuff-
> > > > ST336753LC.
> > >
> > > I expect the model value has trailing spaces.
> > >
> > > You may look with:
> > >   udevinfo -a -p /block/sdX
> >
> > Yes it does, and it seems for most SCSI devices, vendor and model will
> > have trailing spaces.
>
> It all depends on the vendor and model :)
>
> > I have included a patch to udev-036 to deal with
> > this issue.  It trims off trailing whitespace for all sysfs attributes.
> > It might be better to trim off leading whitespace as well.
>
> We already trim it off when matching, but we also allow matching if you
> do put the spaces in there.  This patch breaks that, right?

Correct, I have a new patch that trims after the comparison, so it
should work in both cases.
This commit is contained in:
andrew.patterson@hp.com 2004-10-14 00:47:38 -07:00 committed by Greg KH
parent c008fe93f5
commit 1fa26490e0

View File

@ -306,6 +306,17 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
dbg("sysfa attribute '%s' not found", attr); dbg("sysfa attribute '%s' not found", attr);
break; break;
} }
/* strip trailing whitespace of matching value */
if (isspace(tmpattr->value[strlen(tmpattr->value)-1])) {
i = len = strlen(tmpattr->value);
while (i > 0 && isspace(tmpattr->value[i-1]))
i--;
if (i < len) {
tmpattr->value[i] = '\0';
dbg("remove %i trailing whitespace chars from '%s'",
len - i, tmpattr->value);
}
}
strfieldcatmax(string, tmpattr->value, maxsize); strfieldcatmax(string, tmpattr->value, maxsize);
dbg("substitute sysfs value '%s'", tmpattr->value); dbg("substitute sysfs value '%s'", tmpattr->value);
} else { } else {