Bernhard Reutner-Fischer
933993a461
mdev: handle string modes
...
parse ugoa=rwxXst via bb_parse_mode (+5b)
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2009-10-27 17:13:12 +01:00
Bernhard Reutner-Fischer
6531f0923b
mdev: tiny shrinkage by index_in_strings
...
text data bss dec hex filename
2633 0 0 2633 a49 util-linux/mdev.o.old
2624 0 0 2624 a40 util-linux/mdev.o
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2009-10-27 17:12:26 +01:00
Denys Vlasenko
5478aaf5b8
mdev: be more permissive on errors (dont die): mdev -s users want that
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2009-07-02 13:17:10 +02:00
Denys Vlasenko
90db359972
mdev: set $MDEV correctly for renamed nodes
...
function old new delta
make_device 1467 1502 +35
build_alias 78 - -78
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2009-07-02 13:07:11 +02:00
Denys Vlasenko
2f86ca1350
mdev: fix the case when move rule deletes node with name == device_name
...
Signed-off-by: Jean Wolter <jw5@os.inf.tu-dresden.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2009-06-22 01:31:12 +02:00
Denys Vlasenko
76f5e38c82
mdev: revert last wrong commit
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2009-05-04 21:59:05 +02:00
Denys Vlasenko
aa0a12d549
mdev: do not exit if user:group parse failed. closes bug 309.
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2009-05-02 16:33:10 +02:00
Denys Vlasenko
05ae400830
mdev: fix a case where we mangle device_path string and then use it.
2009-05-01 03:09:54 +02:00
Denis Vlasenko
11c17f75a7
mdev: enlarge inline documentation
2009-04-19 23:38:08 +00:00
Denis Vlasenko
3798db58cf
mdev: support $ENVVAR=regex
2009-04-19 21:37:07 +00:00
Denis Vlasenko
c7cc5a9432
mdev: Rob's #if forest removal
...
*: remove superfluous conts in "f(type *const param)"
2009-04-19 01:27:20 +00:00
Denis Vlasenko
5ff9629b8f
mdev: add large comment, fix a buglet with subsystem and /sys/block
2009-04-17 00:01:04 +00:00
Denis Vlasenko
3161b61199
mdev: set mode, needed when device node already exists.
2009-04-16 22:42:01 +00:00
Denis Vlasenko
6dda5dec23
mdev: change subsystem syntax from /subsystem to subsystem/devname
2009-04-16 21:42:12 +00:00
Denis Vlasenko
32a3d084d3
mdev: safer handling of $SUBSYSTEM in mdev -s
2009-04-14 21:23:33 +00:00
Denis Vlasenko
7f9593753a
randomconfig fixes
2009-04-14 08:06:59 +00:00
Denis Vlasenko
f2b39e088d
mdev: add support for - "dont stop here" char
...
function old new delta
make_device 1340 1362 +22
packed_usage 26291 26299 +8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 30/0) Total: 30 bytes
2009-04-13 23:18:52 +00:00
Denis Vlasenko
065c714791
mdev: provide $SUBSYSTEM (by Vladimir)
...
function old new delta
make_device 1265 1340 +75
dirAction 14 60 +46
mdev_main 676 695 +19
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 140/0) Total: 140 bytes
2009-04-13 22:23:02 +00:00
Denis Vlasenko
323cbbfaa2
mdev: fix a bug where \t is not treated as delimiter after [>|=PATH]
2009-04-13 13:59:26 +00:00
Denis Vlasenko
aafbae6181
mdev: make usage text more useful
...
function old new delta
packed_usage 26235 26291 +56
2009-04-13 13:33:02 +00:00
Denis Vlasenko
1fb26da071
mdev: ignore events with "$SUBSYSTEM" == "firmware" && "$ACTION" == "remove"
...
function old new delta
mdev_main 665 676 +11
2009-04-13 02:15:57 +00:00
Denis Vlasenko
f1df35c40b
mdev: do not complain if /sys/block doesn't exist
2009-04-12 14:00:12 +00:00
Denis Vlasenko
d63cd1bf1c
mdev: if /sys/class/block exists, don't scan /sys/block
2009-02-13 00:02:54 +00:00
Denis Vlasenko
319fe129a1
mdev: fix breakage caused by unified parser usage
2009-01-12 07:57:52 +00:00
Mike Frysinger
870ccd7212
do not whine if /sys/block does not exist ... embedded systems dont need stinkin block devices
2009-01-08 17:19:01 +00:00
Denis Vlasenko
76ddc2e3e4
libbb: add bb_unsetenv (taken from hush).
...
udhcpc: stop filtering environment passed to the script.
crond: fix uncovered potential bug (failing unsetenv)
mdev: fix uncovered potential bug (failing unsetenv)
tcp, udpsvd: fix uncovered potential bug (failing unsetenv)
function old new delta
safe_setenv - 58 +58
bb_unsetenv - 55 +55
builtin_unset 139 138 -1
tcpudpsvd_main 1843 1830 -13
free_strings_and_unsetenv 87 53 -34
udhcp_run_script 1186 1133 -53
safe_setenv4 62 - -62
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/4 up/down: 113/-163) Total: -50 bytes
2008-12-30 05:05:31 +00:00
Denis Vlasenko
9504e444b8
whitespace fixes, no code changes
2008-10-29 01:19:15 +00:00
Denis Vlasenko
8d89bed840
watchdog: add -T option
...
function old new delta
watchdog_main 159 219 +60
mdev: support match by major,minor. See bug 4714.
+100 bytes.
2008-09-07 23:22:08 +00:00
Denis Vlasenko
084266ed52
fix several problems with config parser:
...
a bug where it underflows the string
a bug where it never frees parser_t struct
make read_config() return 0 if parser is NULL,
make config_close() accept and ignore NULL parser -
eliminates many if() blocks
reverse the sense of parser bit flags - negative flags
are harder to grok.
hexdump: revert the change to use config parser, it is BIGGER
and also requires additional quirks in parser
*: explicitly use PARSER_NORMAL instead of 0
function old new delta
login_main 1575 1596 +21
config_close 18 29 +11
bbunpack 383 391 +8
qgravechar 106 109 +3
rtnl_tab_initialize 121 117 -4
expand 1697 1693 -4
man_main 717 712 -5
nameif_main 674 668 -6
hexdump_main 597 591 -6
read_config 217 209 -8
dnsd_main 1478 1470 -8
sysctl_main 203 189 -14
config_open2 44 25 -19
make_device 1177 1141 -36
config_read 597 549 -48
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/11 up/down: 43/-158) Total: -115 bytes
2008-07-26 23:08:31 +00:00
Denis Vlasenko
df96df9c7c
mdev: do not complain if mdev.conf does not exist;
...
use #if to prevent gcc from generating dead code
(sadly, it's more ugly this way)
2008-07-26 18:35:10 +00:00
Bernhard Reutner-Fischer
b62bd7b261
- unused variables if !ENABLE_FEATURE_MDEV_RENAME_REGEXP
2008-07-22 07:33:53 +00:00
Denis Vlasenko
2e157ddf9e
libbb: updated config_parse() from Vladimir
...
function old new delta
config_read 385 460 +75
runsvdir_main 1701 1716 +15
readit 331 338 +7
passwd_main 1049 1053 +4
parse_command 1504 1507 +3
decode_format_string 822 824 +2
bb__parsespent 117 119 +2
udhcp_get_option 221 222 +1
changepath 196 194 -2
parse_inittab 400 396 -4
nameif_main 683 679 -4
make_device 1176 1172 -4
config_open 48 40 -8
expand_main 698 689 -9
readcmd 1012 1002 -10
config_free_data 37 21 -16
SynchronizeFile 683 643 -40
sleep_main 474 362 -112
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 8/10 up/down: 109/-209) Total: -100 bytes
2008-07-19 09:27:19 +00:00
Bernhard Reutner-Fischer
679212836a
- fix segfault in nameif with mactab file
...
(by fixing and shrink config parser)
function old new delta
config_free_data - 37 +37
config_open 43 48 +5
pack_gzip 1658 1660 +2
nameif_main 527 525 -2
SynchronizeFile 629 623 -6
make_device 1184 1176 -8
config_close 31 18 -13
config_read 431 393 -38
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/5 up/down: 44/-67) Total: -23 bytes
2008-07-17 11:59:13 +00:00
Denis Vlasenko
fb1642f2ca
fix up callsites of config_read to check for >= 0
2008-07-16 23:04:49 +00:00
Denis Vlasenko
018bee6afb
mdev: support for serializing hotplug
...
function old new delta
mdev_main 503 647 +144
2008-07-15 22:33:13 +00:00
Denis Vlasenko
e559e0a757
libbb: unified config parser (By Vladimir Dronnikov)
...
mdev: use it
function old new delta
config_read - 400 +400
config_open - 43 +43
config_close - 9 +9
qrealloc 33 36 +3
compare_keys 735 737 +2
xstrtoull_range_sfx 296 295 -1
qgravechar 109 106 -3
get_address 181 178 -3
next_token 928 923 -5
sv_main 1228 1222 -6
find_main 418 406 -12
next_field 32 - -32
make_device 1269 1184 -85
------------------------------------------------------------------------------
(add/remove: 3/1 grow/shrink: 2/7 up/down: 457/-147) Total: 310 bytes
2008-07-15 21:09:30 +00:00
Denis Vlasenko
a87045ce37
mdev: check for "/block/" substring for block dev detection
...
function old new delta
make_device 1294 1269 -25
2008-07-12 10:28:41 +00:00
Denis Vlasenko
d9860487e0
mdev: if device was moved at creation, at removal coreectly remove
...
it from moved location and also remove symlinks to it
function old new delta
build_alias - 78 +78
mdev_main 505 503 -2
make_device 1300 1294 -6
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/2 up/down: 78/-8) Total: 70 bytes
2008-07-12 10:23:16 +00:00
Denis Vlasenko
67075bb95f
mdev: reinstate "follow symlinks" flag, this time with explanation
2008-07-06 17:00:49 +00:00
Denis Vlasenko
d48e81f0cd
mdev: do not follow symlinks in /sys (as was intended prior to rev 18811).
...
If this breaks things, please document why!
mdev,init: use shared code for fd sanitization
function old new delta
bb_daemonize_or_rexec 155 172 +17
mdev_main 500 505 +5
init_main 907 856 -51
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 22/-51) Total: -29 bytes
2008-07-06 07:00:11 +00:00
Denis Vlasenko
a60f84ebf0
*: rename ATTRIBUTE_XXX to just XXX.
2008-07-05 09:18:54 +00:00
Denis Vlasenko
defc1ea340
*: introduce and use FAST_FUNC: regparm on i386, otherwise no-on
...
text data bss dec hex filename
808035 611 6868 815514 c719a busybox_old
804472 611 6868 811951 c63af busybox_unstripped
2008-06-27 02:52:20 +00:00
Denis Vlasenko
7049ff8696
whitespace fixes. no code changes
2008-06-25 09:53:17 +00:00
Denis Vlasenko
f4e6bd0bf3
mdev: add commented-out debug code to open stdio.
2008-05-31 18:27:58 +00:00
Denis Vlasenko
e94a87134d
mdev: fix counting of '%' in pattern
2008-05-24 16:46:13 +00:00
Denis Vlasenko
ff9234948e
mdev: fix whitespace damage
2008-05-23 20:36:33 +00:00
Denis Vlasenko
a959a2abdd
mdev: suppress "may be used uninitialized" warning
2008-05-22 21:35:16 +00:00
Denis Vlasenko
4801441e9a
mdev: add support for "only rename" option in mdev.conf
2008-05-22 17:49:58 +00:00
Denis Vlasenko
77ad97f199
more -Wall warning fixes from Cristian Ionescu-Idbohrn.
...
This time it resulted in small code changes:
function old new delta
nexpr 820 828 +8
tail_main 1200 1202 +2
wrapf 166 167 +1
parse_mount_options 227 209 -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 11/-18) Total: -7 bytes
2008-05-13 02:27:31 +00:00
Denis Vlasenko
4579e9c1c8
mdev: /sys/class/block/ are also block devices
...
function old new delta
make_device 1200 1221 +21
2008-05-08 21:49:28 +00:00
Denis Vlasenko
32dcc53b71
mdev: fix a bug where we were eating argv[0] of helper
2008-05-02 13:21:24 +00:00
Denis Vlasenko
1f228985b2
whitespace fixes. no code changes
2008-04-22 00:16:29 +00:00
Denis Vlasenko
f2f3868e0d
mdev: optional support for regex pattern group substitution.
...
+142 bytes.
2008-03-29 17:26:10 +00:00
Denis Vlasenko
aa8a601084
mdev: fix block/char device detection. Closes bug 2144.
2008-03-29 16:07:46 +00:00
Denis Vlasenko
cae11b51aa
mdev: fix "foo 0:0 444 >bar/baz" rule handling. make_device() +23 bytes
2008-03-29 15:11:07 +00:00
Denis Vlasenko
4461564c77
mdev: fix a bug where it was not stopping on first matching rule
...
(testsuite entry added). Revamped line parsing while at it.
function old new delta
next_field - 36 +36
make_device 1104 1022 -82
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 36/-82) Total: -46 bytes
2008-03-29 13:10:57 +00:00
Denis Vlasenko
cf26ab70c1
mdev: plug a few memory and fd leaks; simplify code a bit
2008-03-27 22:45:44 +00:00
Denis Vlasenko
8ee649a02e
*: more uniform naming: s/xmalloc_getline/xmalloc_fgetline/
2008-03-26 20:04:27 +00:00
Denis Vlasenko
68404f13d4
*: add -Wunused-parameter; fix resulting breakage
...
function old new delta
procps_scan 1265 1298 +33
aliascmd 278 283 +5
parse_file_cmd 116 120 +4
dname_enc 373 377 +4
setcmd 90 93 +3
execcmd 57 60 +3
count_lines 72 74 +2
process_command_subs 340 339 -1
test_main 409 407 -2
mknod_main 179 177 -2
handle_incoming_and_exit 2653 2651 -2
argstr 1312 1310 -2
shiftcmd 131 128 -3
exitcmd 46 43 -3
dotcmd 297 294 -3
breakcmd 86 83 -3
evalpipe 353 349 -4
evalcommand 1180 1176 -4
evalcmd 109 105 -4
send_tree 374 369 -5
mkfifo_main 82 77 -5
evalsubshell 152 147 -5
typecmd 75 69 -6
letcmd 61 55 -6
add_cmd 1190 1183 -7
main 891 883 -8
ash_main 1415 1407 -8
parse_stream 1377 1367 -10
alloc_procps_scan 55 - -55
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 7/21 up/down: 54/-148) Total: -94 bytes
text data bss dec hex filename
797195 658 7428 805281 c49a1 busybox_old
797101 658 7428 805187 c4943 busybox_unstripped
2008-03-17 09:00:54 +00:00
Mike Frysinger
ae86a338b8
[ #1334 ] exec script for devices even if they dont have device nodes
2008-02-20 18:31:36 +00:00
Denis Vlasenko
cb448fe01b
libbb: introduce and use xrename and rename_or_warn.
2008-02-17 14:28:53 +00:00
Mike Frysinger
f0044c480c
add support for renaming/relocating device nodes
2008-02-01 06:53:50 +00:00
Mike Frysinger
46ef46aefb
as reported by George Boudreau, make sure we properly skip blank lines
2008-01-23 18:48:26 +00:00
Denis Vlasenko
ee87ebf381
fix buglets found by randomconfig
2007-12-21 22:18:16 +00:00
Mike Frysinger
c881c733bb
cleanup comments and coding style and rewrite the mdev.conf parser to use common busybox functions and call strdup() less often ... saves a ~few hundred bytes
2007-11-19 09:04:22 +00:00
Denis Vlasenko
9b49a5ed85
add -fvisibility=hidden to CC flags, mark XXX_main functions
...
EXTERNALLY_VISIBLE. 5% size reduction of libbusybox.so
2007-10-11 10:05:36 +00:00
Denis Vlasenko
6ca409e0e4
trylink: produce even more info about final link stage
...
trylink: explain how to modify link and drastically decrease amount
of padding (unfortunately, needs hand editing ATM).
*: add ALIGN1 / ALIGN2 to global strings and arrays of bytes and shorts
size saving: 0.5k
2007-08-12 20:58:27 +00:00
Denis Vlasenko
dc757aa16c
introduce and use bb_basename()
...
function old new delta
bb_basename - 26 +26
sv_main 1226 1225 -1
passwd_main 1985 1983 -2
showdirs 482 478 -4
sendCgi 1811 1807 -4
make_device 1354 1350 -4
handleIncoming 2443 2439 -4
func_name 82 78 -4
service_name 2292 2285 -7
main 909 901 -8
cmp_main 555 547 -8
test_main 434 422 -12
act 228 216 -12
find_pair 180 164 -16
rmmod_main 298 280 -18
find_pid_by_name 156 134 -22
modprobe_main 1606 1576 -30
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/16 up/down: 26/-156) Total: -130 bytes
text data bss dec hex filename
734933 3028 14400 752361 b7ae9 busybox_old
734801 3028 14400 752229 b7a65 busybox_unstripped
2007-06-30 08:04:05 +00:00
Bernhard Reutner-Fischer
bb0baed564
- strndupa is a GNU extension. Using strdup to avoid several errors like:
...
util-linux/mdev.c:(.text+0x29a): undefined reference to `strndupa'
2007-06-20 09:56:47 +00:00
Mike Frysinger
0e0639b702
Alex Landau writes: open firmware for reading, not writing
2007-06-14 09:29:48 +00:00
Mike Frysinger
b51fd3525e
as suggested by Renaud Cerrato and Souf, switch over to recursive_action() for some nice shrinkage and so we work even when CONFIG_SYSFS_DEPRECATED is off
2007-06-13 09:24:50 +00:00
Mike Frysinger
a78ef2ccf1
add support for firmware loading
2007-06-13 07:34:15 +00:00
Denis Vlasenko
d6766c71a9
mdev: microscopic enhancement, should change nothing
2007-06-08 16:18:15 +00:00
Denis Vlasenko
4e5f82c76f
find_stray_communal_vars: script which finds communal variables
...
resize: remove globals var
mdev: remove globals var
2007-06-03 22:30:22 +00:00
Denis Vlasenko
b6adbf1be2
usage.c: remove reference to busybox.h
...
*: s/include "busybox.h"/include "libbb.h"
2007-05-26 19:00:18 +00:00
Bernhard Reutner-Fischer
febe3c4211
- sed -e "s/char[[:space:]]*\*[[:space:]]*argv\[\]/char **argv/g"
2007-04-04 20:52:03 +00:00
Denis Vlasenko
06af216528
suppress warnings about easch <applet>_main() having
...
no preceding prototype
2007-02-03 17:28:39 +00:00
Denis Vlasenko
b6aae0f381
preparatory patch for -Wwrite-strings #2
2007-01-29 22:51:25 +00:00
Denis Vlasenko
cf749bc10c
small fixes:
...
fix xstrdup to not grossly overallocate memory
use xopen instean of xopen3 in several places
etc.
2006-11-26 15:45:17 +00:00
Denis Vlasenko
f46be09106
mdev: reduce excessive indentation
2006-10-16 19:39:37 +00:00
Denis Vlasenko
ea62077b85
add open_read_close() and similar stuff
2006-10-14 02:23:43 +00:00
Denis Vlasenko
9275814a9e
lots of silly indent fixes
2006-10-03 19:56:34 +00:00
Denis Vlasenko
a959588b80
Yet another silly little byte saving. couldn't -> cannot
2006-09-29 21:30:43 +00:00
Rob Landley
e9a7a6212b
Change license statements (and clean up headers) on some of the files that
...
Erik or I are primary copyright holders on.
2006-09-22 02:52:41 +00:00
Denis Vlasenko
9213a9e0f2
whitespace cleanup
2006-09-17 16:28:10 +00:00
Rob Landley
10b36f94bb
Patch from Chris Steel to fix mdev deleting device nodes.
2006-08-10 01:09:37 +00:00
Rob Landley
d921b2ecc0
Remove bb_ prefixes from xfuncs.c (and a few other places), consolidate
...
things like xasprintf() into xfuncs.c, remove xprint_file_by_name() (it only
had one user), clean up lots of #includes... General cleanup pass. What I've
been doing for the last couple days.
And it conflicts! I've removed httpd.c from this checkin due to somebody else
touching that file. It builds for me. I have to catch a bus. (Now you know
why I'm looking forward to Mercurial.)
2006-08-03 15:41:12 +00:00
"Robert P. J. Day"
63fc1a9e08
Standardize on the vi editing directives being on the first line.
2006-07-02 19:47:05 +00:00
Rob Landley
ef10d52745
Upgrade mdev to allow commands to be run on create/delete.
...
Both Jason Schoon and Giuseppe Ciotta deserve credit for this, I used elements
of both. It's been upgraded so that you can specify that a given command
should run at create, at delete, or at both using different special characters
(@, $, and * respectively). It uses the system() method of running command
lines which means you can use environment variables on the command line (it
sets $MDEV to the name of the current device being created/deleted, which is
useful if you matched it via regex), and the documentation warns that you need
a /bin/sh to make that work, so you probably want to pick a default shell.
2006-06-26 14:11:33 +00:00
Rob Landley
0960ca7383
Work around a persistent uClibc bug, since 0.9.29 still hasn't shipped.
...
Poked to do this by Jason Schoon.
2006-06-13 18:27:16 +00:00
Rob Landley
5cd1ccd995
Convert to a global struct, the way sed was. Now I have two, I can work out
...
the infrastructure to merge global structs into a union...
2006-05-21 18:33:27 +00:00
Rob Landley
15fe2e11d7
Shrink the code about 50 bytes, allocate less run-time memory, and add a
...
comment that null terminating the string we sscanf() shouldn't be required
since the kernel adds \n to the end of it and sscanf will stop there.
2006-05-08 02:53:23 +00:00
Rob Landley
a7e3d05208
Create /dev/root symlink pointing to real root device, if any.
2006-02-21 06:11:13 +00:00
Mike Frysinger
271aa40a15
add back in path nulling after calling find_dev() since it is needed for now ...
2006-02-07 06:10:45 +00:00
Mike Frysinger
a421ba8203
cleanup style ... just because you use less spaces doesnt mean the resulting code is smaller
2006-02-03 00:25:37 +00:00
Mike Frysinger
248d2220f9
shrink the code a bit
2006-02-03 00:19:42 +00:00
Mike Frysinger
53d57dbe6b
gavinl writes in Bug 661:
...
if read() file return less than 1, we should close the fd and then goto end.
2006-02-03 00:16:53 +00:00
Tim Riker
c1ef7bdd8d
just whitespace
2006-01-25 00:08:53 +00:00
Rob Landley
e927743bb0
There was a missing ! on strcmp (despite the fact it worked in my testing,
...
I have no idea _how_), and a simpler fix for the extra \n problem. I tested
this and it worked for me, for what that's worth...
2006-01-22 23:14:16 +00:00
Rob Landley
29e08ffcdf
Frank Sorenson added hotplug support to mdev. (I tweaked it a bit. Need
...
to come up with a test suite for all the stuff that requires root access.
Something involving User Mode Linux or QEMU, probably...)
2006-01-12 06:13:50 +00:00