A number of additional fixed from Pavel Roskin, note some more bugs in the
[platform/upstream/busybox.git] / TODO
1 TODO list for busybox in no particular order. Just because something
2 is listed here doesn't mean that it is going to be added to busybox,
3 or that doing so is even a good idea. It just means that I _might_ get
4 around to it some time. If you have any good ideas, please let me know.
5
6 * login/sulogin/passwd/getty/etc are part of tinylogin, and so are not
7     needed or wanted in busybox (or else I'd have to link to libcrypt).
8
9 * Networking apps are probably going to be split out some time soon into a
10     separate package (named perhaps netkit-tiny?).  This would remove the
11     following items from BusyBox: hostid, hostname, nc, nslookup, telnet, 
12     and ping.  nfs mounting and syslogd (when it supports network logging)
13     will remain in BusyBox.
14
15  -Erik
16
17 -----------
18
19 Bugs that need fixing:
20
21  - 'grep foo$ file' doesn't work
22  - 'grep *foo file' segfaults
23  - ps dirent race bug (need to stat the file before attempting chdir)
24  - The following commands segfault:
25         chmod -R
26         chown -R
27         chgrp -R
28         cp -a -a
29         ln -s -s
30         rm -f
31         rm -f -
32         rm -- -
33         touch -c
34   - I believe that swaponoff may also be also broken (check it).
35   - It used to be that BusyBox tar would happily overwrite existing files on
36       an extraction.  However, as of 0.42, BusyBox tar simply dies as soon as an 
37       existing file is found.
38   - Make 'mount -a' work even when /proc isn't mounted (ugly bug).
39   - Make 'ln -s /tmp/file .' work the way GNU ln does (i.e. makes a link to 
40     /tmp/file in the current directory, rather then trying and failing to create
41     a symlink named "." in the current working directory).
42   - implement 'ls -R'.
43   - "cp -a sourcedir/*" (note: no dest) - produces an odd error message about
44     the last file in the dir, rather than saying "missing destination file".
45
46
47 -----------
48
49 * Make insmod actually work
50 * dnsdomainname
51 * traceroute/netstat
52 * rdate
53 * hwclock
54 * stty
55 * expr
56 * wget (or whatever I call it)
57 * tftp
58 * ftp
59 * group/commonize strings, remove dups (for i18n, l10n)
60
61
62 -----------------------
63
64 Running the following:
65
66     rm -f busybox && make LDFLAGS+=-nostdlib 2>&1 | \
67         sed -ne 's/.*undefined reference to `\(.*\)..*/\1/gp' | sort | uniq
68
69 reveals the list of all external (i.e. libc) things that BusyBox depends on.
70 It would be a very nice thing to reduce this list to an absolute minimum, and
71 then create a microLibc to provide these functions.  There is no good reason
72 for GNU libc to be so big.  I'm sure it can be a lot better.
73
74 (BTW, this is more informative if BB_FEATURE_NFSMOUNT is turned off...)
75
76 Most wanted list:
77
78     [andersen@slag busybox]$ grep -l getgroups *.[ch]
79     test.c
80
81 Policy violation.  getgroups uses libc nss, which is unlikely
82 to be present in an embedded system.
83
84 To be replaced with a busybox local glob routine:
85
86     [andersen@slag busybox]$ grep -l glob *.[ch]
87     gunzip.c
88     gzip.c
89     sh.c
90     tar.c
91     telnet.c
92
93 Can check_wildcard_match() from utility.c do this job?
94
95
96 -----------------------
97
98 Compile with debugging on, run 'nm --size-sort ./busybox'
99 and then start with the biggest things and make them smaller...
100
101 -----------------------
102
103 busybox.defs.h is too big and hard to follow.
104
105 Perhaps I need to add a better build system (like the Linux kernel?)
106
107 -----------------------
108
109 Feature request:
110
111 /bin/busybox --install -s    which makes all links to commands that it
112   can support (an optionnal -s should be used for symbolic links instead
113   of hard links).
114
115 -----------------------
116
117
118 > Have you ever thought of doig network logging in busybox syslogd ? It
119 > would quite make sense on embedded systems... :)
120
121 So far I had not considered it.  Basically, you wish to have
122 messages from the embedded box logged to a remote network
123 syslog box, right?  I can see that this would be useful.
124 I'll add this to the TODO list,
125
126
127 -----------------------
128
129
130  I think that the add_inode &c in utility.c needs to also stow the
131  st_dev field, and that du.c should NOT call `reset_inode_list'
132  because there can be hard links from inside one argv/ to inside
133  another argv/.  du.c probably ought to have an -x switch like GNU du
134  does also...
135
136
137 ------------------------------------------------------------------
138
139
140 Date:   Fri, 25 Feb 2000 08:23:12 +0000 (GMT)
141 From: Riley Williams <rhw@MemAlpha.CX>
142 X-Sender: rhw@moo.cus.org.uk
143 To: almesber@lrc.di.epfl.ch
144 Cc: "Albert D. Cahalan" <acahalan@cs.uml.edu>,
145         Linux Kernel <linux-kernel@vger.rutgers.edu>
146 Subject: Re: What /proc should contain [was: /proc/driver/microcode]
147 In-Reply-To: <20000224165245.A29790@lrc.di.epfl.ch>
148 Message-ID: <Pine.LNX.4.21.0002250806220.8741-100000@moo.cus.org.uk>
149 Sender: owner-linux-kernel@vger.rutgers.edu
150 Precedence: bulk
151
152 Hi there.
153
154  >> Nope, most /proc access is does via programs written in C.
155
156  > That varies a lot from file to file. E.g. I haven't seen any
157  > programs that are specificly designed to read /proc/atm/* yet,
158  > and I know of only one (fuser) that reads /proc/mounts,
159  > extracting only partial information (just to pick two examples
160  > that I'm quite familiar with).
161
162 As a point of reference, here's a slightly tweaked analysis of the
163 programs on the system I'm reading your mail on. Basically, I ran the
164 following script...
165
166  Q> #!/bin/bash
167  Q> function use() {
168  Q>     for Z in $* ; do
169  Q>         strings $Z | grep /proc | sed "s=^=$Z ="
170  Q>     done
171  Q> }
172  Q> use /{,s}bin/* /usr/{,s}bin/* | sort -u | tee proc-usage
173
174 ...and then went through it removing comments and print format
175 strings. Replace /proc with /dev and you'd soon have an equivalent
176 list for that - although I can report that such is MUCH larger...
177
178 There are three programs therein that refer to /proc/mounts ...
179
180         /bin/mount
181         /bin/umount
182         /usr/bin/eject
183
184 ...and, as you stated, none that refer to /proc/atm on this system.
185 However, as this is a RedHat Linux 5.0 based system, that's not
186 necessarily an up to date reference thereto...
187
188 Here's the list anyway...
189
190 /bin/kill /proc/%d/cmdline
191 /bin/kill /proc/%d/stat
192
193 /bin/mount /proc/devices
194 /bin/mount /proc/filesystems
195 /bin/mount /proc/mounts
196
197 /bin/netstat /proc/net
198 /bin/netstat /proc/net/appletalk
199 /bin/netstat /proc/net/ax25
200 /bin/netstat /proc/net/ax25_route
201 /bin/netstat /proc/net/dev
202 /bin/netstat /proc/net/ip_masquerade
203 /bin/netstat /proc/net/ipx
204 /bin/netstat /proc/net/ipx_route
205 /bin/netstat /proc/net/netstat
206 /bin/netstat /proc/net/nr
207 /bin/netstat /proc/net/nr_neigh
208 /bin/netstat /proc/net/nr_nodes
209 /bin/netstat /proc/net/raw
210 /bin/netstat /proc/net/route
211 /bin/netstat /proc/net/rt_cache
212 /bin/netstat /proc/net/snmp
213 /bin/netstat /proc/net/tcp
214 /bin/netstat /proc/net/udp
215 /bin/netstat /proc/net/unix
216
217 /bin/umount /proc/devices
218 /bin/umount /proc/mounts
219
220 /sbin/arp /proc/net/appletalk
221 /sbin/arp /proc/net/arp
222 /sbin/arp /proc/net/ax25
223 /sbin/arp /proc/net/ipx
224 /sbin/arp /proc/net/nr
225 /sbin/arp /proc/net/unix
226
227 /sbin/cardctl /proc/devices
228
229 /sbin/cardmgr /proc/devices
230
231 /sbin/fdisk /proc/ide/%s/media
232 /sbin/fdisk /proc/scsi/scsi
233
234 /sbin/getty /proc/version
235
236 /sbin/ifconfig /proc/net
237 /sbin/ifconfig /proc/net/appletalk
238 /sbin/ifconfig /proc/net/ax25
239 /sbin/ifconfig /proc/net/dev
240 /sbin/ifconfig /proc/net/ipx
241 /sbin/ifconfig /proc/net/nr
242 /sbin/ifconfig /proc/net/unix
243
244 /sbin/ifup /proc/sys/kernel/modprobe
245
246 /sbin/ipchains /proc/net/ip_fwchains
247 /sbin/ipchains /proc/net/ip_fwnames
248 /sbin/ipchains /proc/net/ip_masquerade
249 /sbin/ipchains /proc/sys/net/ipv4/ip_forward
250
251 /sbin/ipmaddr /proc/net/dev_mcast
252 /sbin/ipmaddr /proc/net/igmp
253 /sbin/ipmaddr /proc/net/igmp6
254
255 /sbin/iptunnel /proc/net/dev
256
257 /sbin/killall5 /proc/%s/cmdline
258 /sbin/killall5 /proc/%s/exe
259 /sbin/killall5 /proc/%s/stat
260 /sbin/killall5 /proc/version
261
262 /sbin/klogd /proc/kmsg
263
264 /sbin/lsmod /proc/modules
265
266 /sbin/modprobe /proc/modules
267
268 /sbin/pidof /proc/%s/cmdline
269 /sbin/pidof /proc/%s/exe
270 /sbin/pidof /proc/%s/stat
271 /sbin/pidof /proc/version
272
273 /sbin/probe /proc/pci
274
275 /sbin/rarp /proc/net/ax25
276 /sbin/rarp /proc/net/nr
277 /sbin/rarp /proc/net/rarp
278
279 /sbin/rmmod /proc/modules
280
281 /sbin/rmmod.static /proc/modules
282
283 /sbin/route /proc/net/appletalk
284 /sbin/route /proc/net/ax25
285 /sbin/route /proc/net/ax25_route
286 /sbin/route /proc/net/ipx
287 /sbin/route /proc/net/ipx_route
288 /sbin/route /proc/net/nr
289 /sbin/route /proc/net/nr_neigh
290 /sbin/route /proc/net/nr_nodes
291 /sbin/route /proc/net/route
292 /sbin/route /proc/net/rt_cache
293 /sbin/route /proc/net/unix
294
295 /sbin/scsi_info /proc/scsi
296 /sbin/scsi_info /proc/scsi/%s
297 /sbin/scsi_info /proc/scsi/scsi
298
299 /sbin/slattach /proc/net/ax25
300 /sbin/slattach /proc/net/nr
301
302 /sbin/swapoff /proc/swaps
303
304 /sbin/swapon /proc/swaps
305
306 /sbin/uugetty /proc/version
307
308 /usr/bin/dig /proc/
309 /usr/bin/dig /proc/interrupts
310 /usr/bin/dig /proc/meminfo
311 /usr/bin/dig /proc/rtc
312 /usr/bin/dig /proc/self/status
313 /usr/bin/dig /proc/stat
314
315 /usr/bin/dnsquery /proc/
316 /usr/bin/dnsquery /proc/interrupts
317 /usr/bin/dnsquery /proc/meminfo
318 /usr/bin/dnsquery /proc/rtc
319 /usr/bin/dnsquery /proc/self/status
320 /usr/bin/dnsquery /proc/stat
321
322 /usr/bin/eject /proc/mounts
323
324 /usr/bin/emacs /proc/loadavg
325
326 /usr/bin/fetchmail /proc/net/dev
327
328 /usr/bin/free /proc/meminfo
329
330 /usr/bin/gmake /proc/loadavg
331
332 /usr/bin/gpm-root /proc/loadavg
333 /usr/bin/gpm-root /proc/meminfo
334
335 /usr/bin/host /proc/
336 /usr/bin/host /proc/interrupts
337 /usr/bin/host /proc/meminfo
338 /usr/bin/host /proc/rtc
339 /usr/bin/host /proc/self/status
340 /usr/bin/host /proc/stat
341
342 /usr/bin/hoststat /proc/loadavg
343
344 /usr/bin/hwdiag /proc/cpuinfo
345 /usr/bin/hwdiag /proc/pci
346 /usr/bin/hwdiag /proc/scsi/scsi
347 /usr/bin/hwdiag /proc/version
348
349 /usr/bin/lsdev /proc/dma
350 /usr/bin/lsdev /proc/interrupts
351 /usr/bin/lsdev /proc/ioports
352
353 /usr/bin/mailq /proc/loadavg
354
355 /usr/bin/make /proc/loadavg
356
357 /usr/bin/mcookie /proc/loadavg
358 /usr/bin/mcookie /proc/stat
359
360 /usr/bin/newaliases /proc/loadavg
361
362 /usr/bin/nslookup /proc/
363 /usr/bin/nslookup /proc/interrupts
364 /usr/bin/nslookup /proc/meminfo
365 /usr/bin/nslookup /proc/rtc
366 /usr/bin/nslookup /proc/self/status
367 /usr/bin/nslookup /proc/stat
368
369 /usr/bin/nsupdate /proc/
370 /usr/bin/nsupdate /proc/interrupts
371 /usr/bin/nsupdate /proc/meminfo
372 /usr/bin/nsupdate /proc/rtc
373 /usr/bin/nsupdate /proc/self/status
374 /usr/bin/nsupdate /proc/stat
375
376 /usr/bin/pgp /proc/version
377 /usr/bin/pgpe /proc/version
378 /usr/bin/pgpk /proc/version
379 /usr/bin/pgps /proc/version
380 /usr/bin/pgpv /proc/version
381
382 /usr/bin/procinfo /proc/cmdline
383 /usr/bin/procinfo /proc/devices
384 /usr/bin/procinfo /proc/dma
385 /usr/bin/procinfo /proc/filesystems
386 /usr/bin/procinfo /proc/interrupts
387 /usr/bin/procinfo /proc/loadavg
388 /usr/bin/procinfo /proc/meminfo
389 /usr/bin/procinfo /proc/modules
390 /usr/bin/procinfo /proc/stat
391 /usr/bin/procinfo /proc/uptime
392 /usr/bin/procinfo /proc/version
393
394 /usr/bin/purgestat /proc/loadavg
395
396 /usr/bin/screen /proc/loadavg
397
398 /usr/bin/strace /proc/%d/stat
399
400 /usr/bin/top /proc/cpuinfo
401 /usr/bin/top /proc/meminfo
402 /usr/bin/top /proc/stat
403
404 /usr/bin/vmstat /proc/%s/stat
405 /usr/bin/vmstat /proc/meminfo
406 /usr/bin/vmstat /proc/stat
407
408 /usr/sbin/atd /proc/loadavg
409
410 /usr/sbin/dnskeygen /proc/
411 /usr/sbin/dnskeygen /proc/interrupts
412 /usr/sbin/dnskeygen /proc/meminfo
413 /usr/sbin/dnskeygen /proc/rtc
414 /usr/sbin/dnskeygen /proc/self/status
415 /usr/sbin/dnskeygen /proc/stat
416
417 /usr/sbin/fuser /proc/%d/stat
418 /usr/sbin/fuser /proc/net/%s
419 /usr/sbin/fuser /proc/net/unix
420
421 /usr/sbin/in.identd /proc/net/tcp
422
423 /usr/sbin/irpd /proc/
424 /usr/sbin/irpd /proc/interrupts
425 /usr/sbin/irpd /proc/meminfo
426 /usr/sbin/irpd /proc/rtc
427 /usr/sbin/irpd /proc/self/status
428 /usr/sbin/irpd /proc/stat
429
430 /usr/sbin/named /proc/
431 /usr/sbin/named /proc/interrupts
432 /usr/sbin/named /proc/meminfo
433 /usr/sbin/named /proc/rtc
434 /usr/sbin/named /proc/self/status
435 /usr/sbin/named /proc/stat
436
437 /usr/sbin/named-xfer /proc/
438 /usr/sbin/named-xfer /proc/interrupts
439 /usr/sbin/named-xfer /proc/meminfo
440 /usr/sbin/named-xfer /proc/rtc
441 /usr/sbin/named-xfer /proc/self/status
442 /usr/sbin/named-xfer /proc/stat
443
444 /usr/sbin/readprofile /proc/profile
445
446 /usr/sbin/rwhod /proc/loadavg
447 /usr/sbin/rwhod /proc/uptime
448
449 /usr/sbin/sendmail /proc/loadavg
450
451 /usr/sbin/setconsole /proc/openprom/options
452 /usr/sbin/setconsole /proc/openprom/options/${console}-mode
453 /usr/sbin/setconsole /proc/openprom/options/input-device
454 /usr/sbin/setconsole /proc/openprom/options/output-device
455
456 Best wishes from Riley.
457
458  * Copyright (C) 1999, Memory Alpha Systems.
459  * All rights and wrongs reserved.
460
461 +----------------------------------------------------------------------+
462 | There is something frustrating about the quality and speed of Linux  |
463 | development, ie., the quality is too high and the speed is too high, |
464 | in other words, I can implement this XXXX feature, but I bet someone |
465 | else has already done so and is just about to release their patch.   |
466 +----------------------------------------------------------------------+
467  * http://www.memalpha.cx/Linux/Kernel/
468
469
470 -
471 To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
472 the body of a message to majordomo@vger.rutgers.edu
473 Please read the FAQ at http://www.tux.org/lkml/
474