TODO: add an item for a chmod optimization
[platform/upstream/coreutils.git] / TODO
diff --git a/TODO b/TODO
index 53e7bc1..0321768 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,18 +1,54 @@
-restore djgpp, eventually
-merge TODO lists
-add unit tests for lib/*.c
-rewrite lib/ftw.c not to use explicit recursion, and then use nftw in
-  chown, chgrp, chmod, du
-
-strip: add an option to specify the program used to strip binaries.
+If you're interested in helping, here are some tasks that we've considered
+over the years.  Beware: some are quite old and no longer valid.  To avoid
+wasting your time by duplicating work or by working on a task that is no
+longer pertinent, please search the mailing list and post your intent
+before embarking on a big project.
+
+==================================================
+Modify chmod so that it does not change an inode's st_ctime
+  when the selected operation would have no other effect.
+  First suggested by Hans Ecke <http://hans.ecke.ws> in
+    http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/2920
+  Discussed more recently on <http://bugs.debian.org/497514>.
+
+document the following in coreutils.texi:
+  runcon
+  chcon
+  mktemp
+  [
+  pinky
+Also document the SELinux changes.
+
+Suggestion from Paul Eggert:
+  More generally, there's not that much use for imaxtostr nowadays,
+  since the inttypes module and newer versions of gettext allow things
+  like _("truncating %s at %" PRIdMAX " bytes") to work portably.
+  I suspect that (if someone cares to take the time) we can remove
+  all instances of imaxtostr and umaxtostr in coreutils and gnulib.
+
+cp --recursive: use fts and *at functions to perform directory traversals
+  in source and destination hierarchy rather than forming full file names.
+  The latter (current) approach fails unnecessarily when the names
+  become very long, and requires space and time that is quadratic in the
+  depth of the hierarchy.  [Bo Borgerson is working on this]
+
+printf:
+  Now that gnulib supports *printf("%a"), import one of the
+  *printf-posix modules so that printf(1) will support %a even on
+  platforms where the native *printf(3) is deficient.
+  Suggestion from Eric Blake.
+
+renice: POSIX utility, needs implementing.
+  suggestion from Karl Berry (among others).
+  Bob Proulx is working on this.
+
+install: add an option to specify the program used to strip binaries.
   suggestion from Karl Berry
 
 doc/coreutils.texi:
   Address this comment: FIXME: mv's behavior in this case is system-dependent
   Better still: fix the code so it's *not* system-dependent.
 
-implement --target-directory=DIR for install (per texinfo documentation)
-
 ls: add --format=FORMAT option that controls how each line is printed.
 
 cp --no-preserve=X should not attempt to preserve attribute X
@@ -23,26 +59,9 @@ And once that's done, add an exclusion so that `cp --link'
 no longer incurs the overhead of saving src. dev/ino and dest. filename
 in the hash table.
 
-Apply suggestion from Paul Jarc to use something along the
-lines of http://cr.yp.to/daemontools/setuidgid.html to avoid
-kludges (as in tests/rm/fail-2eperm) when running tests as root.
-
-See if we can be consistent about where --verbose sends its output:
-  These all send --verbose output to stdout:
-    head, tail, rm, cp, mv, ln, chmod, chown, chgrp, install, ln
-  These send it to stderr:
-    shred mkdir split
-  readlink is different
-
 Write an autoconf test to work around build failure in HPUX's 64-bit mode.
 See notes in README -- and remove them once there's a work-around.
 
-after 5.0, change doc strings (like df, ls, etc) not to use `,'
-as thousands separator in e.g. 1,000,000.  Instead, do this:
-
-  SIZE may be (or may be an integer optionally followed by) one of following:
-  kB 1000, K 1024, MB 1000*1000, M 1024*1024 and so on for G, T, P, E, Z, Y.
-
 Integrate use of sendfile, suggested here:
   http://mail.gnu.org/archive/html/bug-fileutils/2003-03/msg00030.html
 I don't plan to do that, since a few tests demonstrate no significant benefit.
@@ -55,30 +74,118 @@ printf: consider adapting builtins/printf.def from bash
 
 df: add `--total' option, suggested here http://bugs.debian.org/186007
 
-seq: give better diagnostics for invalid formats:
-   e.g. no or too many % directives
-seq: consider allowing format string to contain no %-directives
+tail: don't use xlseek; it *exits*.
+  Instead, maybe use a macro and return nonzero.
+
+tr: support nontrivial equivalence classes, e.g. [=e=] with LC_COLLATE=fr_FR
+
+lib/strftime.c: Since %N is the only format that we need but that
+  glibc's strftime doesn't support, consider using a wrapper that
+  would expand /%(-_)?\d*N/ to the desired string and then pass the
+  resulting string to glibc's strftime.
+
+unexpand: [http://www.opengroup.org/onlinepubs/007908799/xcu/unexpand.html]
+  printf 'x\t \t y\n'|unexpand -t 8,9 should print its input, unmodified.
+  printf 'x\t \t y\n'|unexpand -t 5,8 should print "x\ty\n"
+
+Let GNU su use the `wheel' group if appropriate.
+  (there are a couple patches, already)
+
+sort: Investigate better sorting algorithms; see Knuth vol. 3.
+
+  We tried list merge sort, but it was about 50% slower than the
+  recursive algorithm currently used by sortlines, and it used more
+  comparisons.  We're not sure why this was, as the theory suggests it
+  should do fewer comparisons, so perhaps this should be revisited.
+  List merge sort was implemented in the style of Knuth algorithm
+  5.2.4L, with the optimization suggested by exercise 5.2.4-22.  The
+  test case was 140,213,394 bytes, 426,4424 lines, text taken from the
+  GCC 3.3 distribution, sort.c compiled with GCC 2.95.4 and running on
+  Debian 3.0r1 GNU/Linux, 2.4GHz Pentium 4, single pass with no
+  temporary files and plenty of RAM.
+
+  Since comparisons seem to be the bottleneck, perhaps the best
+  algorithm to try next should be merge insertion.  See Knuth section
+  5.3.1, who credits Lester Ford, Jr. and Selmer Johnson, American
+  Mathematical Monthly 66 (1959), 387-389.
+
+Remove suspicious uses of alloca (ones that may allocate more than
+   about 4k)
+
+Adapt these contribution guidelines for coreutils:
+  http://sources.redhat.com/automake/contribute.html
+
+Improve test coverage.
+  See HACKING for instructions on generating an html test coverage report.
+  Find a program that has poor coverage and improve.
+
+Changes expected to go in, someday.
+======================================
+
+  dd patch from Olivier Delhomme
+
+  test/mv/*: clean up $other_partition_tmpdir in all cases
+
+  ls: when both -l and --dereference-command-line-symlink-to-dir are
+  specified, consider whether to let the latter select whether to
+  dereference command line symlinks to directories.  Since -l has
+  an implicit --NO-dereference-command-line-symlink-to-dir meaning.
+  Pointed out by Karl Berry.
+
+  dd: consider adding an option to suppress `bytes/block read/written'
+  output to stderr.  Suggested here:
+    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=165045
+
+  Pending copyright papers:
+  ------------------------
+  getpwnam from Bruce Korb
+
+  pb (progress bar) from Miika Pekkarinen
+
+  ------------------------------
+
+Remove long-deprecated options.  Search case-insensitive for
+`deprecated' and `remove in '.  Automate this.
+
+Add a distcheck-time test to ensure that every distributed
+file is either read-only(indicating generated) or is
+version-controlled and up to date.
+
+remove `%s' notation (now that they're all gone, add a maint.mk sc_
+    rule to ensure no new ones are added):
+  grep -E "\`%.{,4}s'" src/*.c
+
+remove all uses of the `register' keyword: Done.  add a maint.mk rule
+  for this, too.
+
+remove or adjust chown's --changes option, since it
+  can't always do what it currently says it does.
+
+Support arbitrary-precision arithmetic in those tools for which it
+makes sense.  Factor and expr already support this via libgmp.
+The "test" program is covered via its string-based comparison of
+integers.  To be converted: seq.
 
-dd: consider adding an option to suppress `bytes/block read/written'
-output to stderr.  Suggested here:
-  http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=165045
+Adapt tools like wc, tr, fmt, etc. (most of the textutils) to be
+  multibyte aware.  The problem is that I want to avoid duplicating
+  significant blocks of logic, yet I also want to incur only minimal
+  (preferably `no') cost when operating in single-byte mode.
 
-m4: rename all macros that start with AC_ to start with another prefix
+pr's use of nstrftime can make it malloc a very large (up to SIZE_MAX) buffer
 
-document that `true --version' can fail, e.g., like this:
-  ./true --version >&-
-  ./true: write error: Bad file number
-  Reported by Paul Eggert
+-----
 
-resolve RH report on cp -a forwarded by Tim Waugh
+Copyright (C) 2002-2008 Free Software Foundation, Inc.
 
-Martin Michlmayr's patch to provide ls with `--sort directory' option
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
-clean-up: Remove anachronistic casts of xmalloc, xrealloc, and xcalloc
-return values found by this:
-  grep -E '\*\) *x(m|c|re)alloc\>' {lib,src}/*.[ch]
-Fix with this:
-  perl -pi -e 's/\([^(]*?\*\) *(x(m|c|re)alloc)\b/$1/'
-Also remove anachronistic casts of xrealloc's first argument.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
 
-Remove uses of PROTOTYPES
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.