On Wednesday 20 October 2010 01:49, Denys Vlasenko wrote: > On Wednesday 20 October 2010 01:23, Alexander Shishkin wrote: > > On Tue, Oct 19, 2010 at 11:18:43 +0200, Denys Vlasenko wrote: > > > On Tuesday 19 October 2010 22:33, Alexander Shishkin wrote: > > > > [Sorry, the previous mail seems to have been eaten by the smarthost, > > > > apologies if it comes twice.] > > > > > > > > function old new delta > > > > add_shell_main - 459 +459 > > > > .rodata 50375 50495 +120 > > > > chomp - 24 +24 > > > > applet_names 920 943 +23 > > > > packed_usage 1640 1661 +21 > > > > applet_main 1232 1248 +16 > > > > applet_nameofs 308 312 +4 > > > > ------------------------------------------------------------------------------ > > > > (add/remove: 4/0 grow/shrink: 5/0 up/down: 667/0) Total: > > > > 667 bytes > > > > > > > > Signed-off-by: Alexander Shishkin <[email protected]> > > > > > > This seems to be trivially scriptable in sh. > > > > > > Why do you need it? (I ask because sometimes there _is_ a valid, > > > but unknown to me, reason to have this or that tool in bbox). > > > > Well, I like my busybox to be a real swiss army knife, so that I can > > grab it, compile it and put a single binary to where I need it and > > have all the tools that I need in that binary. (as opposed to dragging > > scripts and their dependencies around) And sometimes the only thing > > that you can rely on a system is a statically linked busybox. > > > > Also, I would like to see busybox as a potential replacement for the > > base GNU tools in a desktop system one day. Adding applets that you > > don't necessarily have to compile in, but that get busybox closer to > > being all-in-one drop-in replacement is something worth doing, imo. > > > > Other than that, I try to avoid shell scripting if I can help it and > > my script-foo is not good enough to produce a tolerably good version > > of add/remove-shell in 667 bytes. A C implementation is something > > that I'm willing to work on, though. > > Ah, so there _are_ such tools (add-shell and remove-shell) > in standard Linux repertoire! I didn't know it. > > Do you provide compatible behavior? > > Maybe it makes sense to do > > default y if DESKTOP > > (IIRC this syntax is supported in Config files) > to placate "true" embedded guys who undoubtedly won't like proliferation > of "stupid applets which should be shell scripts"? >
Randonly googled up page, http://man.he.net/man8/add-shell, says: add-shell copy /etc/shells to /etc/shells.tmp, add the given shells to this file if they are not already present, and copy this temporary file back to /etc/shells. This seems to be much saner way to update the file atomically than messing with locking stuff: + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + if (fcntl(fileno(orig), F_SETLK, &lock) < 0) + bb_perror_msg("warning: can't lock '%s'", orig_fn); + lock.l_type = F_UNLCK; Don't forget to use xmalloc_follow_symlinks, to care for people whose /etc/shells is a symlink. Basically: filename = xmalloc_follow_symlinks("/etc/shells"); if (filename == NULL) BOOM; fnamesfx = xasprintf("%s.tmp", filename); fd = xopen(fnamesfx, O_WRONLY | O_CREAT | O_EXCL); ... rename(fnamesfx, filename); -- vda _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
