Age | Commit message (Collapse) | Author |
|
Here we replace the various fgets() with a mmap() call for the config
file reading, due to the reported performance problems with klibc.
Thanks to Patrick's testing, it makes a very small, close to nothing
speed gain for libc users, but a 6 times speed increase for klibc users
with a 1000 line config file.
I've created a udev_lib.[hc] for this and also moved all the generic
stuff from udev.h in there and uninlined the functions.
|
|
Hey, I wrote the strn*() macros just 10 days ago and yesterday this trap
caught me with the %c{x} bug.
The names are misleading cause we all expect that the from field is limited by
the size argument, but we actually limit the overall size of the destination
string to prevent a overflow.
Here we rename all strn*() macros to str*max(). That should be
more self-explanatory.
|
|
On Wed, Mar 03, 2004 at 04:56:34PM -0800, Greg KH wrote:
> On Wed, Mar 03, 2004 at 03:57:04PM -0800, Patrick Mansfield wrote:
> >
> > Here is a patch for some new tests.
>
> Applied, thanks.
Here is a small improvement, which looks much better.
Hey Pat, thanks a lot for finding the recent bug, hope this one will
not break it again :)
|
|
Here I try to cleanup our various multifield iteration over the strings.
Inspired by our nice list.h we now have a macro to iterate over the string
and process the parts of it:
It makes the code more readable and we don't change the string while we
process it like the former strsep() does.
Example:
foreach_strpart(dev->symlink, " ", pos, len) {
if (strncmp(&dev->symlink[pos], find_name, len) != 0)
continue;
...
}
For the callout part selector %c{2} we separate now not only by space but
also newline and return characters, cause some programs may give multiline
values back. A possible RESULT match must contain wildcards for these
characters.
Also a bug in the recent udevinfo symlink query feature is fixed.
|
|
Thanks to Olaf Hering <olh@suse.de> for this patch. It's possible now to
feed the -n option of udevinfo with a symlink.
I've also added a 'all' attribute, but no more text, it's all in the
included man page :)
|
|
On Tue, Feb 24, 2004 at 11:50:52PM +0100, Kay Sievers wrote:
> Here is the first step towards a safer string handling.
> More will follow, but for now only the easy ones :)
>
> Thanks to all who pointed this out. strncat() isn't a nice function. We
> all should remember that the destination string is not terminated if the
> given lenght is shorter than the strlen of the source string.
>
> And shame on the various implementers of strfieldcat() I found in the
> unapplied patches on this list, it's not really better than strncpy()
> and hides the real problem.
Hmm, bk didn't checked in one file, maybe I edited it again as root.
Nevermind, here is the more complete version.
|
|
external one.
Should fix some more build bugs...
|
|
Use the new location of libsysfs header files.
|
|
Shouldn't we keep the temporary strings out of the database,
or is this information useful for something?
It cuts the length of the data from 628 to 275 bytes.
|
|
Here we get the ability to query with the name of the node instead of
the device path. It uses a linear search over the whole database.
kay@pim:~/src/udev.kay$ ./udev -q path -n video/webcam0
/class/video4linux/video0
New version, with better function return codes for error handling.
|
|
On Thu, Jan 15, 2004 at 05:14:16AM +0100, Kay Sievers wrote:
> On Wed, Jan 14, 2004 at 01:10:43PM -0800, Greg KH wrote:
> > On Wed, Jan 14, 2004 at 02:34:26PM -0600, Clay Haapala wrote:
> > > On Wed, 14 Jan 2004, Chris Friesen spake thusly:
> > > >
> > > > Maybe for ones with a matching rule, you could print something like:
> > > >
> > > >
> > > Is the act of printing/syslogging a rule in an of itself?
> >
> > No, as currently the only way stuff ends up in the syslog is if
> > DEBUG=true is used on the build line.
> >
> > But it's sounding like we might want to change that... :)
>
> How about this in the syslog after connect/disconnect?
>
> Jan 15 05:07:45 pim udev[28007]: configured rule in '/etc/udev/udev.rules' at line 17 applied, 'video*' becomes 'video/webcam%n'
> Jan 15 05:07:45 pim udev[28007]: creating device node '/udev/video/webcam0'
> Jan 15 05:07:47 pim udev[28015]: removing device node '/udev/video/webcam0'
Here is a slightly better version. I've created a logging.h file and
moved the debug macros from udev.h in there.
If you type:
'make' - you will get a binary that prints one or two lines to syslog
if a device node is created or deleted
'make LOG=false' - you get a binary that prints asolutely nothing
'make DEBUG=true' - the same as today, it will print all debug lines
|
|
Here is the '-h' and a '-d' to dump the whole database:
kay@pim:~/src/udev.kay$ ./udev -d
P: /block/hdb/hdb1
N: hdb1
S:
O:
G:
P: /class/video4linux/video0
N: video/webcam0
S: camera0 kamera0
O: 500
G: 500
P: /block/hdc
N: hdc
S:
O:
G:
|
|
As usual, here is the corresponding man page update and
a small text correction.
|
|
Here is a slightly better version that prints the usage if a unknown option is given:
kay@pim:~/src/udev.kay$ ./udev -x
./udev: invalid option -- x
Usage: [-qrVh]
-q arg query database
-r print udev root
-V print udev version
-h print this help text
> Here is a patch that makes it possible to call udev with options on the command line.
> Valid options are for now:
>
> -V for the udev version:
> kay@pim:~/src/udev.kay$ ./udev -V
> udev, version 011_bk
>
> -r for the udev root:
> kay@pim:~/src/udev.kay$ ./udev -r
> /udev/
>
> -q to query the database with the sysfs path for the name of the node:
> kay@pim:~/src/udev.kay$ ./udev -q /class/video4linux/video0
> test/video/webcam0
|
|
I've moved the malloc out of the udevdb into udev-remove to free the
struct after use and not to allocate a different struct in the case the
device is not in the data base. I seems a bit easier to read.
|
|
|
|
01-overall-whitespace+debug-text-conditioning.diff
o cleanup whitespace
o clarify a few comments
o enclose all printed debug string values in ''
|
|
config variables
This will make running tests a lot simpler.
|
|
Now we standardise on a struct udevice to pass around, and store in the
database. This cleaned up the database code a lot.
|
|
Also delete the record after the device is gone, and fix up a memory leak.
|
|
Unix file modes should be stored in a mode_t, not a standard type. At
the moment it is actually unsigned, in fact, not a signed integer.
Attached patch does an s/int mode/mode_t mode/ and cleans up the
results.
|
|
Yah yah, really trivial stuff...
- get_class_device() doesn't need to be exported; it
should be static
- white space cleanup
|
|
database code still needs some major cleanup.
|
|
|
|
Can be overridden on the makefile line.
|
|
This patch:
1) removes the three database files for just one udevdb.tdb file.
2) adds udevdb_init() and udevdb_exit() functions
3) initializes database now in main() in udev.c.
Please look it over.
|
|
|
|
Here's an "idea" of what I had in mind for udevdb. Let me preface the
code with a few remarks:
1) I was expecting to write this udevdb for udev to keep track of
devices. I was planning an external package that depends upon udev
to provide an external API to the udevdb database. The calls for the
interface would be read only access. Not sure how you want to do
packaging, if having a separate package is ok or having it included
in udev.
2) I created it as it is because udev isn't a daemon. So, the open
database call doesn't take any parameters. My plan was to create a
udevdb_init function that took arguments for initializing the db
to start, where you could specify in memory only or a file location.
This can all be filled in.
3) I hacked the Makefile to get it to work. Not sure how you'd want
that in the future.
4) This assumes TDB has been installed elsewhere, you would need to
edit your Makefile and point it to the header and library locations.
How do you want to do TDB in udev? Do you want to just reference it
and make udev dependent on that package being installed. Or should
we do what samba does and include a limited tdb version in udev?
5) Again, I hacked udev into your existing code. In the future, I'd
probably make a function around the filling out the udevice before
calling the store command. Didn't know if you wanted to change
your add device function to use struct udevice rather than having
everything separate.
6) Not sure what we should include in the udevice structure that's stored
by udev. I made a stab at a first shot - we can add and remove of course,
this was a first pass. I've come to realize - with you including libsysfs
in udev, the "external" interface that references udevdb could make
use of getting information from through libsysfs from sysfs and doesn't
need to be in udevdb.
7) I could write a namedevdb for namedev's device management if you
wanted.
|