1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-10-31 16:21:11 +03:00
Commit Graph

48 Commits

Author SHA1 Message Date
Kay Sievers
bcf44d5576 string index - split nodes and childs to allow and unlimited number of childs 2008-11-12 05:50:05 +01:00
Kay Sievers
1c8af93aca silence "comparison between signed and unsigned" 2008-11-11 23:47:01 +01:00
Alan Jenkins
1449a55ded udevd: de-duplicate strings in rules
On my Ubuntu installation this removes 15k of duplicate strings,
using a temporary index of about 25k.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-11-11 22:19:11 +01:00
Kay Sievers
5d6a1fa6e9 convert debug string arrays to functions
On Fri, Nov 7, 2008 at 13:07, Matthias Schwarzott <zzam@gentoo.org> wrote:
> I managed to let udev-131 segfault at startup.
>
> I configured it like this:
> CFLAGS="-Wall -ggdb" ./configure --prefix=/usr --sysconfdir=/etc --exec-prefix=
>
> Running it in gdb shows it segfaults at udev-rules.c:831
>
> (gdb) run
> Starting program: /tmp/udev-131/udev/udevd
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x0804ea06 in get_key (udev=0x9175008, line=0xafcdc8f0, key=0xafcdc5d8,
> op=0xafcdc5d0, value=0xafcdc5d4)
>    at udev-rules.c:831
> 831             dbg(udev, "%s '%s'-'%s'\n", operation_str[*op], *key, *value);

If compiled without optimization, the dbg() macro dereferences variables
which are not available. Convert the string array to a function, which just
returns NULL if compiled without DEBUG.
2008-11-07 15:59:58 +01:00
Kay Sievers
e230e966f4 fix size_t compiler warning on 32 bit platforms 2008-11-07 02:58:54 +01:00
Kay Sievers
78230c0dbe cleanup /dev/.udev/queue on startup and exit 2008-11-06 17:43:12 +01:00
Alan Jenkins
3f3aa9f57c udevd: shrink struct token to 12 bytes 2008-11-05 22:28:52 +01:00
Kay Sievers
92f4313665 unify string replacement 2008-11-05 21:49:52 +01:00
Kay Sievers
08e7f22913 info() PROGRAM and IMPORT execution 2008-11-05 04:05:17 +01:00
Kay Sievers
1e78dcbe51 fix list handling in enumerate and rules file sorting 2008-11-04 20:19:01 +01:00
Kay Sievers
4052400fa0 move debugging strings inside #ifdef DEBUG 2008-11-01 21:05:25 +01:00
Kay Sievers
86b5778857 move some info() to dbg() 2008-11-01 20:16:24 +01:00
Kay Sievers
00f98bd2b3 skip entire rule containing device naming keys, if no device can be named
If rules set NAME, SYMLINK, OWNER, GROUP, MODE, events without a device node
and remove events will skip the entire rule. The old parser did the same.
2008-11-01 19:12:20 +01:00
Kay Sievers
0ef254d580 log rules file and line number when NAME, SYMLINK, OWNER, GROUP, MODE, RUN is applied 2008-11-01 18:34:54 +01:00
Alan Jenkins
d15fcce4b3 udevd: be more careful when matching against parents
I'm worried about what will happen with things like

KERNELS=="*" # pointless rule
KERNELS=="doesnt-match" # another pointless rule

Since TK_RULE < TK_M_PARENTS_MAX, we will try to match all three tokens
against parents of the current device.  I can't think of a bad case,
but it's not exactly good either.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-11-01 17:32:16 +01:00
Alan Jenkins
11ae757850 udevd: fix termination of rule execution
LAST_RULE was broken, and I broke TK_END by making it do the same.
It used a "break" which exited the switch statement, but not the loop!

==2953== Invalid read of size 4
==2953==    at 0x4081EE: dump_token (udev-rules.c:859)
==2953==    by 0x40BADB: udev_rules_apply_to_event (udev-rules.c:1849)
==2953==    by 0x403F17: udev_event_execute_rules (udev-event.c:554)
==2953==    by 0x418626: main (test-udev.c:100)
==2953==  Address 0x55ab1f8 is 0 bytes after a block of size 80 alloc'd
==2953==    at 0x4C23082: realloc (vg_replace_malloc.c:429)
==2953==    by 0x40B13B: udev_rules_new (udev-rules.c:1670)
==2953==    by 0x418536: main (test-udev.c:84)
...

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-11-01 17:29:26 +01:00
Kay Sievers
aeb53ca3d6 ATTR{}== always fails if the attribute does not exist 2008-10-29 22:22:12 +01:00
Alan Jenkins
6270756cdc udevd: simplify rules execution loop
cur can't become NULL, and the check for TK_END
can be folded into the switch statement.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-28 10:02:43 +01:00
Kay Sievers
1822e9b033 do not init string arrays, just clear first byte 2008-10-26 02:31:54 +01:00
Kay Sievers
21cfb0436c match_attr() - copy attr value only when needed 2008-10-26 02:16:54 +01:00
Alan Jenkins
cd94c04c51 udevd: avoid implicit memset in match_attr()
Initializing a char array to "" is equivalent to a memset()
call - which is exactly what it gets compiled to.

Fixing this one callsite reduced memset() _user_ cpu cycles
from 2-4% to 0.05% on the EeePC.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-26 02:11:56 +01:00
Alan Jenkins
3e5c759543 fix handling of string_escape option 2008-10-25 15:19:48 +02:00
Kay Sievers
91a75e4ad4 match KEY="A|B" without temporary string copy 2008-10-25 03:00:03 +02:00
Kay Sievers
39a08013a2 fix "unused" warnings 2008-10-24 17:42:31 +02:00
Kay Sievers
db463fd309 special-case "?*" match to skip fnmatch() 2008-10-24 14:19:42 +02:00
Kay Sievers
ac218d9cc8 determine at rule parse time if we need to call fnmatch()
This cuts down the large rule set's 120.000 calls to fnmatch() to
51.000, and we can just call strcmp for the simple matches.
2008-10-24 13:32:32 +02:00
Kay Sievers
b0f7409f24 distinguish "match" from "assign" by (op < OP_MATCH_MAX) 2008-10-24 11:38:05 +02:00
Kay Sievers
154a7b8428 cache uid/gid during rule parsing
This cuts down the number of parsing /etc/group from ~700 to 11,
with some large rule files installed.
2008-10-24 10:51:04 +02:00
Kay Sievers
34d6a259dc rules: let empty strings added to buffer always return offset 0 2008-10-24 08:07:37 +02:00
Kay Sievers
548459e939 skip SYMLINK rules for devices without a device node 2008-10-23 21:42:23 +02:00
Alan Jenkins
7aeeaedc5f udevd: fix WAIT_FOR_SYSFS execution order
The wait should be ordered after matching KERNEL, ENV, etc.
but before ATTR.

Without this, WAIT_FOR_SYSFS rules will be applied unconditionally
to all events.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-23 20:59:17 +02:00
Alan Jenkins
84629ccd85 udevd: fix memory leak
Re: b99028c963 shrink struct udev_event

TEST 136: test multi matches 2
device '/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0' expecting node 'right'
==15011==
==15011== 7 bytes in 1 blocks are definitely lost in loss record 1 of 1
==15011==    at 0x47F9AB8: malloc (vg_replace_malloc.c:207)
==15011==    by 0x489CB5F: strdup (in /lib32/libc-2.7.so)
==15011==    by 0x8050F40: udev_rules_apply_to_event (udev-rules.c:1973)
==15011==    by 0x804A658: udev_event_execute_rules (udev-event.c:549)
==15011==    by 0x805A636: main (test-udev.c:100)
add:         ok
==15012==
==15012== 7 bytes in 1 blocks are definitely lost in loss record 1 of 1
==15012==    at 0x47F1AB8: malloc (vg_replace_malloc.c:207)
==15012==    by 0x4898B5F: strdup (in /lib32/libc-2.7.so)
==15012==    by 0x8050F40: udev_rules_apply_to_event (udev-rules.c:1973)
==15012==    by 0x804A9DF: udev_event_execute_rules (udev-event.c:658)
==15012==    by 0x805A636: main (test-udev.c:100)
remove:      ok

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-23 11:33:22 +02:00
Kay Sievers
b99028c963 shrink struct udev_event 2008-10-23 02:57:08 +02:00
Kay Sievers
40fd3bc837 shrink struct udev_event 2008-10-23 02:34:22 +02:00
Kay Sievers
6880b25d40 replace in-memory rules array with match/action token list
The in-memory rule array of a common desktop distro install took:
  1151088 bytes
with the token list:
  109232 bytes tokens (6827 * 16 bytes), 71302 bytes buffer
2008-10-23 00:13:59 +02:00
Alan Jenkins
b29a5e4ab9 use more appropriate alternatives to malloc()
Use calloc to request cleared memory instead.
Kernel and libc conspire to make this more efficient.

Also, replace one malloc() + strcpy() with strdup().

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-21 12:54:57 +02:00
Kay Sievers
94db05d288 replace missing get_attr_value() -> get_sysattr_value() 2008-10-21 12:42:13 +02:00
Kay Sievers
54808d77a3 prefix udev-util.c functions with util_* 2008-10-18 20:12:55 +02:00
Kay Sievers
eb8837e15c udev_list_cleanup() -> udev_list_cleanup_entries() 2008-10-18 19:27:38 +02:00
Kay Sievers
f1128767cb move udev_rules_apply_format() to udev-event.c 2008-10-18 19:19:56 +02:00
Kay Sievers
2d73813ebc udev_rules_run() -> udev_event_execute_run(); 2008-10-18 15:50:16 +02:00
Kay Sievers
d0db192fa5 move run_program to util 2008-10-18 15:25:05 +02:00
Kay Sievers
d7ddce186c make struct udev_rules opaque 2008-10-18 15:02:01 +02:00
Kay Sievers
c7521974a3 merge udev-rules.c and udev-rules-parse.c 2008-10-18 14:33:37 +02:00
Kay Sievers
fc42bd5d6b update rules file parsing 2008-10-17 00:40:03 +02:00
Kay Sievers
bb144ed14d update IMPORT= file/stdout property parsing 2008-10-16 22:41:52 +02:00
Kay Sievers
c28c4486af run_program: prevent empty last argv entry 2008-10-16 21:35:11 +02:00
Kay Sievers
8460299b57 rename udev source files 2008-10-16 18:13:48 +02:00