summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--UPDATING6
-rw-r--r--contrib/gnu-sort/ABOUT-NLS716
-rw-r--r--contrib/gnu-sort/AUTHORS86
-rw-r--r--contrib/gnu-sort/COPYING340
-rw-r--r--contrib/gnu-sort/ChangeLog7511
-rw-r--r--contrib/gnu-sort/FREEBSD-upgrade14
-rw-r--r--contrib/gnu-sort/INSTALL229
-rw-r--r--contrib/gnu-sort/NEWS904
-rw-r--r--contrib/gnu-sort/README147
-rw-r--r--contrib/gnu-sort/THANKS463
-rw-r--r--contrib/gnu-sort/THANKS-to-translators36
-rw-r--r--contrib/gnu-sort/TODO171
-rw-r--r--contrib/gnu-sort/lib/__fpending.c30
-rw-r--r--contrib/gnu-sort/lib/__fpending.h17
-rw-r--r--contrib/gnu-sort/lib/argmatch.c278
-rw-r--r--contrib/gnu-sort/lib/argmatch.h112
-rw-r--r--contrib/gnu-sort/lib/closeout.c93
-rw-r--r--contrib/gnu-sort/lib/closeout.h33
-rw-r--r--contrib/gnu-sort/lib/dup-safer.c59
-rw-r--r--contrib/gnu-sort/lib/error.c306
-rw-r--r--contrib/gnu-sort/lib/error.h66
-rw-r--r--contrib/gnu-sort/lib/exit.h32
-rw-r--r--contrib/gnu-sort/lib/exitfail.c27
-rw-r--r--contrib/gnu-sort/lib/exitfail.h20
-rw-r--r--contrib/gnu-sort/lib/fopen-safer.c72
-rw-r--r--contrib/gnu-sort/lib/gettext.h68
-rw-r--r--contrib/gnu-sort/lib/hard-locale.c76
-rw-r--r--contrib/gnu-sort/lib/hard-locale.h26
-rw-r--r--contrib/gnu-sort/lib/human.c485
-rw-r--r--contrib/gnu-sort/lib/human.h88
-rw-r--r--contrib/gnu-sort/lib/inttostr.c49
-rw-r--r--contrib/gnu-sort/lib/inttostr.h47
-rw-r--r--contrib/gnu-sort/lib/long-options.c91
-rw-r--r--contrib/gnu-sort/lib/long-options.h26
-rw-r--r--contrib/gnu-sort/lib/memcoll.c85
-rw-r--r--contrib/gnu-sort/lib/memcoll.h28
-rw-r--r--contrib/gnu-sort/lib/pathmax.h54
-rw-r--r--contrib/gnu-sort/lib/physmem.c307
-rw-r--r--contrib/gnu-sort/lib/physmem.h27
-rw-r--r--contrib/gnu-sort/lib/posixver.c59
-rw-r--r--contrib/gnu-sort/lib/posixver.h1
-rw-r--r--contrib/gnu-sort/lib/quote.c41
-rw-r--r--contrib/gnu-sort/lib/quote.h22
-rw-r--r--contrib/gnu-sort/lib/quotearg.c673
-rw-r--r--contrib/gnu-sort/lib/quotearg.h137
-rw-r--r--contrib/gnu-sort/lib/stat-macros.h255
-rw-r--r--contrib/gnu-sort/lib/stdio-safer.h23
-rw-r--r--contrib/gnu-sort/lib/strnlen.c48
-rw-r--r--contrib/gnu-sort/lib/timespec.h71
-rw-r--r--contrib/gnu-sort/lib/umaxtostr.c3
-rw-r--r--contrib/gnu-sort/lib/unistd-safer.h21
-rw-r--r--contrib/gnu-sort/lib/version-etc.c181
-rw-r--r--contrib/gnu-sort/lib/version-etc.h37
-rw-r--r--contrib/gnu-sort/lib/xalloc-die.c45
-rw-r--r--contrib/gnu-sort/lib/xalloc.h90
-rw-r--r--contrib/gnu-sort/lib/xmalloc.c221
-rw-r--r--contrib/gnu-sort/lib/xmemcoll.c59
-rw-r--r--contrib/gnu-sort/lib/xmemcoll.h2
-rw-r--r--contrib/gnu-sort/lib/xstrtol.c291
-rw-r--r--contrib/gnu-sort/lib/xstrtol.h89
-rw-r--r--contrib/gnu-sort/lib/xstrtoul.c6
-rw-r--r--contrib/gnu-sort/lib/xstrtoumax.c33
-rw-r--r--contrib/gnu-sort/man/sort.1113
-rw-r--r--contrib/gnu-sort/src/sort.c3237
-rw-r--r--contrib/gnu-sort/src/system.h831
-rw-r--r--gnu/usr.bin/Makefile1
-rw-r--r--gnu/usr.bin/sort/Makefile46
-rw-r--r--gnu/usr.bin/sort/alloca.h2
-rw-r--r--gnu/usr.bin/sort/config.h1519
-rw-r--r--gnu/usr.bin/sort/localedir.h2
-rw-r--r--gnu/usr.bin/sort/unlocked-io.h2
-rw-r--r--tools/build/options/WITH_GNU_SORT2
-rw-r--r--usr.bin/sort/Makefile8
73 files changed, 6 insertions, 21390 deletions
diff --git a/UPDATING b/UPDATING
index b8a3aaf..58f6dd6 100644
--- a/UPDATING
+++ b/UPDATING
@@ -24,6 +24,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10.x IS SLOW:
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
+20121013:
+ The GNU sort(1) program has been removed since the BSD-licensed
+ sort(1) has been the default for quite some time and no serious
+ problems have been reported. The corresponding WITH_GNU_SORT
+ knob has als gone.
+
20121006:
The pfil(9) API/ABI for AF_INET family has been changed. Packet
filtering modules: pf(4), ipfw(4), ipfilter(4) need to be recompiled
diff --git a/contrib/gnu-sort/ABOUT-NLS b/contrib/gnu-sort/ABOUT-NLS
deleted file mode 100644
index 8ffb467..0000000
--- a/contrib/gnu-sort/ABOUT-NLS
+++ /dev/null
@@ -1,716 +0,0 @@
-Notes on the Free Translation Project
-*************************************
-
-Free software is going international! The Free Translation Project is
-a way to get maintainers of free software, translators, and users all
-together, so that will gradually become able to speak many languages.
-A few packages already provide translations for their messages.
-
- If you found this `ABOUT-NLS' file inside a distribution, you may
-assume that the distributed package does use GNU `gettext' internally,
-itself available at your nearest GNU archive site. But you do _not_
-need to install GNU `gettext' prior to configuring, installing or using
-this package with messages translated.
-
- Installers will find here some useful hints. These notes also
-explain how users should proceed for getting the programs to use the
-available translations. They tell how people wanting to contribute and
-work at translations should contact the appropriate team.
-
- When reporting bugs in the `intl/' directory or bugs which may be
-related to internationalization, you should tell about the version of
-`gettext' which is used. The information can be found in the
-`intl/VERSION' file, in internationalized packages.
-
-Quick configuration advice
-==========================
-
-If you want to exploit the full power of internationalization, you
-should configure it using
-
- ./configure --with-included-gettext
-
-to force usage of internationalizing routines provided within this
-package, despite the existence of internationalizing capabilities in the
-operating system where this package is being installed. So far, only
-the `gettext' implementation in the GNU C library version 2 provides as
-many features (such as locale alias, message inheritance, automatic
-charset conversion or plural form handling) as the implementation here.
-It is also not possible to offer this additional functionality on top
-of a `catgets' implementation. Future versions of GNU `gettext' will
-very likely convey even more functionality. So it might be a good idea
-to change to GNU `gettext' as soon as possible.
-
- So you need _not_ provide this option if you are using GNU libc 2 or
-you have installed a recent copy of the GNU gettext package with the
-included `libintl'.
-
-INSTALL Matters
-===============
-
-Some packages are "localizable" when properly installed; the programs
-they contain can be made to speak your own native language. Most such
-packages use GNU `gettext'. Other packages have their own ways to
-internationalization, predating GNU `gettext'.
-
- By default, this package will be installed to allow translation of
-messages. It will automatically detect whether the system already
-provides the GNU `gettext' functions. If not, the GNU `gettext' own
-library will be used. This library is wholly contained within this
-package, usually in the `intl/' subdirectory, so prior installation of
-the GNU `gettext' package is _not_ required. Installers may use
-special options at configuration time for changing the default
-behaviour. The commands:
-
- ./configure --with-included-gettext
- ./configure --disable-nls
-
-will respectively bypass any pre-existing `gettext' to use the
-internationalizing routines provided within this package, or else,
-_totally_ disable translation of messages.
-
- When you already have GNU `gettext' installed on your system and run
-configure without an option for your new package, `configure' will
-probably detect the previously built and installed `libintl.a' file and
-will decide to use this. This might be not what is desirable. You
-should use the more recent version of the GNU `gettext' library. I.e.
-if the file `intl/VERSION' shows that the library which comes with this
-package is more recent, you should use
-
- ./configure --with-included-gettext
-
-to prevent auto-detection.
-
- The configuration process will not test for the `catgets' function
-and therefore it will not be used. The reason is that even an
-emulation of `gettext' on top of `catgets' could not provide all the
-extensions of the GNU `gettext' library.
-
- Internationalized packages have usually many `po/LL.po' files, where
-LL gives an ISO 639 two-letter code identifying the language. Unless
-translations have been forbidden at `configure' time by using the
-`--disable-nls' switch, all available translations are installed
-together with the package. However, the environment variable `LINGUAS'
-may be set, prior to configuration, to limit the installed set.
-`LINGUAS' should then contain a space separated list of two-letter
-codes, stating which languages are allowed.
-
-Using This Package
-==================
-
-As a user, if your language has been installed for this package, you
-only have to set the `LANG' environment variable to the appropriate
-`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
-and `CC' is an ISO 3166 two-letter country code. For example, let's
-suppose that you speak German and live in Germany. At the shell
-prompt, merely execute `setenv LANG de_DE' (in `csh'),
-`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
-This can be done from your `.login' or `.profile' file, once and for
-all.
-
- You might think that the country code specification is redundant.
-But in fact, some languages have dialects in different countries. For
-example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
-country code serves to distinguish the dialects.
-
- The locale naming convention of `LL_CC', with `LL' denoting the
-language and `CC' denoting the country, is the one use on systems based
-on GNU libc. On other systems, some variations of this scheme are
-used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
-locales supported by your system for your country by running the command
-`locale -a | grep '^LL''.
-
- Not all programs have translations for all languages. By default, an
-English message is shown in place of a nonexistent translation. If you
-understand other languages, you can set up a priority list of languages.
-This is done through a different environment variable, called
-`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
-for the purpose of message handling, but you still need to have `LANG'
-set to the primary language; this is required by other parts of the
-system libraries. For example, some Swedish users who would rather
-read translations in German than English for when Swedish is not
-available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
-
- In the `LANGUAGE' environment variable, but not in the `LANG'
-environment variable, `LL_CC' combinations can be abbreviated as `LL'
-to denote the language's main dialect. For example, `de' is equivalent
-to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
-(Portuguese as spoken in Portugal) in this context.
-
-Translating Teams
-=================
-
-For the Free Translation Project to be a success, we need interested
-people who like their own language and write it well, and who are also
-able to synergize with other translators speaking the same language.
-Each translation team has its own mailing list. The up-to-date list of
-teams can be found at the Free Translation Project's homepage,
-`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
-area.
-
- If you'd like to volunteer to _work_ at translating messages, you
-should become a member of the translating team for your own language.
-The subscribing address is _not_ the same as the list itself, it has
-`-request' appended. For example, speakers of Swedish can send a
-message to `sv-request@li.org', having this message body:
-
- subscribe
-
- Keep in mind that team members are expected to participate
-_actively_ in translations, or at solving translational difficulties,
-rather than merely lurking around. If your team does not exist yet and
-you want to start one, or if you are unsure about what to do or how to
-get started, please write to `translation@iro.umontreal.ca' to reach the
-coordinator for all translator teams.
-
- The English team is special. It works at improving and uniformizing
-the terminology in use. Proven linguistic skill are praised more than
-programming skill, here.
-
-Available Packages
-==================
-
-Languages are not equally supported in all packages. The following
-matrix shows the current state of internationalization, as of December
-2003. The matrix shows, in regard of each package, for which languages
-PO files have been submitted to translation coordination, with a
-translation percentage of at least 50%.
-
- Ready PO files am az be bg ca cs da de el en en_GB eo es
- +-------------------------------------------+
- a2ps | [] [] [] [] |
- aegis | () |
- ant-phone | () |
- anubis | |
- ap-utils | |
- bash | [] [] [] [] |
- batchelor | |
- bfd | [] [] |
- binutils | [] [] |
- bison | [] [] [] |
- bluez-pin | [] [] |
- clisp | |
- clisp | [] [] [] |
- coreutils | [] [] [] [] |
- cpio | [] [] [] |
- darkstat | [] () [] |
- diffutils | [] [] [] [] [] [] [] |
- e2fsprogs | [] [] |
- enscript | [] [] [] [] |
- error | [] [] [] [] [] |
- fetchmail | [] () [] [] [] [] |
- fileutils | [] [] [] |
- findutils | [] [] [] [] [] [] [] |
- flex | [] [] [] [] |
- fslint | |
- gas | [] |
- gawk | [] [] [] [] |
- gbiff | [] |
- gcal | [] |
- gcc | [] [] |
- gettext | [] [] [] [] [] |
- gettext-examples | [] [] [] |
- gettext-runtime | [] [] [] [] [] |
- gettext-tools | [] [] [] |
- gimp-print | [] [] [] [] [] |
- gliv | |
- glunarclock | [] [] |
- gnubiff | [] |
- gnucash | [] () [] [] |
- gnucash-glossary | [] () [] |
- gnupg | [] () [] [] [] [] |
- gpe-aerial | [] |
- gpe-beam | [] [] |
- gpe-calendar | [] [] |
- gpe-clock | [] [] |
- gpe-conf | [] [] |
- gpe-contacts | [] [] |
- gpe-edit | [] |
- gpe-go | [] |
- gpe-login | [] [] |
- gpe-ownerinfo | [] [] |
- gpe-sketchbook | [] [] |
- gpe-su | [] [] |
- gpe-taskmanager | [] [] |
- gpe-timesheet | [] |
- gpe-today | [] [] |
- gpe-todo | [] [] |
- gphoto2 | [] [] [] [] |
- gprof | [] [] [] |
- gpsdrive | () () () |
- gramadoir | [] |
- grep | [] [] [] [] [] [] |
- gretl | [] |
- gtick | () |
- hello | [] [] [] [] [] [] |
- id-utils | [] [] |
- indent | [] [] [] [] |
- jpilot | [] [] [] |
- jtag | |
- jwhois | [] |
- kbd | [] [] [] [] [] |
- latrine | () |
- ld | [] [] |
- libc | [] [] [] [] [] [] |
- libgpewidget | [] [] |
- libiconv | [] [] [] [] [] |
- lifelines | [] () |
- lilypond | [] |
- lingoteach | |
- lingoteach_lessons | () () |
- lynx | [] [] [] [] |
- m4 | [] [] [] [] |
- mailutils | [] [] |
- make | [] [] [] |
- man-db | [] () [] [] () |
- minicom | [] [] [] |
- mysecretdiary | [] [] [] |
- nano | [] () [] [] [] |
- nano_1_0 | [] () [] [] [] |
- opcodes | [] |
- parted | [] [] [] [] [] |
- ptx | [] [] [] [] [] |
- python | |
- radius | [] |
- recode | [] [] [] [] [] [] [] |
- rpm | [] [] |
- screem | |
- scrollkeeper | [] [] [] [] [] [] |
- sed | [] [] [] [] [] |
- sh-utils | [] [] [] |
- shared-mime-info | |
- sharutils | [] [] [] [] [] [] |
- silky | () |
- skencil | [] () [] |
- sketch | [] () [] |
- soundtracker | [] [] [] |
- sp | [] |
- tar | [] [] [] [] |
- texinfo | [] [] [] |
- textutils | [] [] [] [] |
- tin | () () |
- tuxpaint | [] [] [] [] [] [] [] |
- util-linux | [] [] [] [] [] |
- vorbis-tools | [] [] [] [] |
- wastesedge | () |
- wdiff | [] [] [] [] |
- wget | [] [] [] [] [] [] |
- xchat | [] [] [] [] |
- xfree86_xkb_xml | [] |
- xpad | [] |
- +-------------------------------------------+
- am az be bg ca cs da de el en en_GB eo es
- 0 0 8 3 37 38 56 73 15 1 5 12 64
-
- et fa fi fr ga gl he hr hu id is it ja
- +----------------------------------------+
- a2ps | [] [] [] () |
- aegis | |
- ant-phone | |
- anubis | [] |
- ap-utils | [] |
- bash | [] [] |
- batchelor | [] |
- bfd | [] |
- binutils | [] [] |
- bison | [] [] [] [] |
- bluez-pin | [] [] [] [] [] |
- clisp | |
- clisp | [] |
- coreutils | [] [] [] [] [] [] |
- cpio | [] [] [] |
- darkstat | () [] [] [] |
- diffutils | [] [] [] [] [] [] [] |
- e2fsprogs | |
- enscript | [] [] |
- error | [] [] [] [] |
- fetchmail | [] |
- fileutils | [] [] [] [] [] [] |
- findutils | [] [] [] [] [] [] [] [] [] [] |
- flex | [] [] |
- fslint | |
- gas | [] |
- gawk | [] [] [] |
- gbiff | |
- gcal | [] |
- gcc | [] |
- gettext | [] [] |
- gettext-examples | [] [] |
- gettext-runtime | [] [] [] [] |
- gettext-tools | [] [] |
- gimp-print | [] [] |
- gliv | () |
- glunarclock | [] [] [] [] |
- gnubiff | |
- gnucash | () [] |
- gnucash-glossary | [] |
- gnupg | [] [] [] [] [] [] [] |
- gpe-aerial | [] |
- gpe-beam | [] |
- gpe-calendar | [] [] [] |
- gpe-clock | [] |
- gpe-conf | [] |
- gpe-contacts | [] [] |
- gpe-edit | [] [] |
- gpe-go | [] |
- gpe-login | [] [] |
- gpe-ownerinfo | [] [] [] |
- gpe-sketchbook | [] |
- gpe-su | [] |
- gpe-taskmanager | [] |
- gpe-timesheet | [] [] [] |
- gpe-today | [] [] |
- gpe-todo | [] [] |
- gphoto2 | [] [] [] |
- gprof | [] [] |
- gpsdrive | () [] () () |
- gramadoir | [] |
- grep | [] [] [] [] [] [] [] [] [] [] [] |
- gretl | [] |
- gtick | [] [] |
- hello | [] [] [] [] [] [] [] [] [] [] [] [] |
- id-utils | [] [] [] [] |
- indent | [] [] [] [] [] [] [] [] [] |
- jpilot | [] () |
- jtag | |
- jwhois | [] [] [] [] |
- kbd | [] |
- latrine | |
- ld | [] |
- libc | [] [] [] [] [] |
- libgpewidget | [] [] [] [] |
- libiconv | [] [] [] [] [] [] [] [] [] |
- lifelines | () |
- lilypond | [] |
- lingoteach | [] [] |
- lingoteach_lessons | |
- lynx | [] [] [] [] |
- m4 | [] [] [] [] |
- mailutils | |
- make | [] [] [] [] [] |
- man-db | () () |
- minicom | [] [] [] [] |
- mysecretdiary | [] [] |
- nano | [] [] [] [] |
- nano_1_0 | [] [] [] [] |
- opcodes | [] |
- parted | [] [] [] |
- ptx | [] [] [] [] [] [] [] |
- python | |
- radius | [] |
- recode | [] [] [] [] [] [] |
- rpm | |
- screem | |
- scrollkeeper | [] |
- sed | [] [] [] [] [] [] [] [] [] |
- sh-utils | [] [] [] [] [] [] [] |
- shared-mime-info | [] |
- sharutils | [] [] [] [] [] |
- silky | [] () |
- skencil | [] |
- sketch | [] |
- soundtracker | [] [] [] [] |
- sp | [] () |
- tar | [] [] [] [] [] [] [] [] [] |
- texinfo | [] [] [] [] |
- textutils | [] [] [] [] [] |
- tin | [] () |
- tuxpaint | [] [] [] [] [] [] [] [] |
- util-linux | [] [] [] [] () [] |
- vorbis-tools | [] |
- wastesedge | () |
- wdiff | [] [] [] [] [] [] |
- wget | [] [] [] [] [] [] [] |
- xchat | [] [] [] |
- xfree86_xkb_xml | |
- xpad | [] |
- +----------------------------------------+
- et fa fi fr ga gl he hr hu id is it ja
- 21 1 25 86 24 24 8 10 38 31 1 23 32
-
- ko lg lt lv ms nb nl nn no pl pt pt_BR ro
- +-------------------------------------------+
- a2ps | () [] [] () () [] [] |
- aegis | () () |
- ant-phone | [] [] |
- anubis | [] [] [] [] [] |
- ap-utils | [] () [] |
- bash | [] [] |
- batchelor | [] |
- bfd | [] |
- binutils | |
- bison | [] [] [] [] |
- bluez-pin | [] [] [] |
- clisp | |
- clisp | [] |
- coreutils | [] |
- cpio | [] [] [] [] [] |
- darkstat | [] [] [] [] |
- diffutils | [] [] [] [] |
- e2fsprogs | [] |
- enscript | [] [] [] |
- error | [] [] [] |
- fetchmail | [] [] () |
- fileutils | [] [] |
- findutils | [] [] [] [] [] |
- flex | [] [] [] [] |
- fslint | [] [] |
- gas | |
- gawk | [] [] [] |
- gbiff | [] [] |
- gcal | |
- gcc | |
- gettext | [] [] [] |
- gettext-examples | [] [] |
- gettext-runtime | [] [] [] |
- gettext-tools | [] [] [] |
- gimp-print | [] |
- gliv | [] [] [] |
- glunarclock | [] [] [] |
- gnubiff | |
- gnucash | [] [] () |
- gnucash-glossary | [] [] |
- gnupg | [] |
- gpe-aerial | [] [] [] |
- gpe-beam | [] [] [] |
- gpe-calendar | [] [] [] |
- gpe-clock | [] [] [] |
- gpe-conf | [] [] [] |
- gpe-contacts | [] [] [] |
- gpe-edit | [] [] [] |
- gpe-go | [] [] |
- gpe-login | [] [] [] |
- gpe-ownerinfo | [] [] [] |
- gpe-sketchbook | [] [] [] |
- gpe-su | [] [] [] |
- gpe-taskmanager | [] [] [] |
- gpe-timesheet | [] [] [] |
- gpe-today | [] [] [] |
- gpe-todo | [] [] [] |
- gphoto2 | [] |
- gprof | [] [] |
- gpsdrive | () () () [] |
- gramadoir | [] |
- grep | [] [] [] [] |
- gretl | |
- gtick | [] [] |
- hello | [] [] [] [] [] [] [] [] [] [] |
- id-utils | [] [] [] |
- indent | [] [] [] |
- jpilot | () () |
- jtag | |
- jwhois | [] [] [] [] |
- kbd | [] [] [] |
- latrine | [] |
- ld | |
- libc | [] [] [] [] [] |
- libgpewidget | [] [] [] |
- libiconv | [] [] [] [] |
- lifelines | |
- lilypond | |
- lingoteach | |
- lingoteach_lessons | |
- lynx | [] [] |
- m4 | [] [] [] [] |
- mailutils | [] [] |
- make | [] [] [] [] |
- man-db | [] |
- minicom | [] [] [] |
- mysecretdiary | [] [] [] |
- nano | [] [] [] [] |
- nano_1_0 | [] [] [] [] [] |
- opcodes | [] [] |
- parted | [] [] [] [] |
- ptx | [] [] [] [] [] [] [] |
- python | |
- radius | [] |
- recode | [] [] [] |
- rpm | [] [] |
- screem | |
- scrollkeeper | [] [] [] [] |
- sed | [] [] [] |
- sh-utils | [] |
- shared-mime-info | [] |
- sharutils | [] |
- silky | |
- skencil | [] [] |
- sketch | [] [] |
- soundtracker | |
- sp | |
- tar | [] [] [] [] [] [] |
- texinfo | [] [] [] |
- textutils | [] [] |
- tin | |
- tuxpaint | [] [] [] [] [] [] [] [] [] |
- util-linux | [] [] |
- vorbis-tools | [] [] |
- wastesedge | |
- wdiff | [] [] [] [] |
- wget | [] [] |
- xchat | [] [] |
- xfree86_xkb_xml | [] |
- xpad | [] [] |
- +-------------------------------------------+
- ko lg lt lv ms nb nl nn no pl pt pt_BR ro
- 12 0 1 2 12 10 60 4 4 38 25 35 76
-
- ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
- +-------------------------------------------+
- a2ps | [] [] [] [] [] | 16
- aegis | () | 0
- ant-phone | | 2
- anubis | [] [] [] | 9
- ap-utils | () | 3
- bash | [] | 9
- batchelor | | 2
- bfd | [] [] | 6
- binutils | [] [] [] | 7
- bison | [] [] [] | 14
- bluez-pin | [] [] [] | 13
- clisp | | 0
- clisp | | 5
- coreutils | [] [] [] [] [] | 16
- cpio | [] [] [] | 14
- darkstat | [] [] [] () () | 12
- diffutils | [] [] [] [] | 22
- e2fsprogs | [] [] | 5
- enscript | [] [] [] | 12
- error | [] [] [] | 15
- fetchmail | [] [] [] | 11
- fileutils | [] [] [] [] [] [] | 17
- findutils | [] [] [] [] [] [] [] | 29
- flex | [] [] [] | 13
- fslint | | 2
- gas | [] | 3
- gawk | [] [] | 12
- gbiff | | 3
- gcal | [] [] | 4
- gcc | [] | 4
- gettext | [] [] [] [] [] [] | 16
- gettext-examples | [] [] [] [] | 11
- gettext-runtime | [] [] [] [] [] [] [] [] [] | 21
- gettext-tools | [] [] [] [] [] [] | 14
- gimp-print | [] [] | 10
- gliv | | 3
- glunarclock | [] [] [] [] | 13
- gnubiff | | 1
- gnucash | [] [] [] | 9
- gnucash-glossary | [] [] [] | 8
- gnupg | [] [] [] [] | 17
- gpe-aerial | [] [] | 7
- gpe-beam | [] [] | 8
- gpe-calendar | [] [] [] [] [] | 13
- gpe-clock | [] [] [] [] | 10
- gpe-conf | [] [] [] | 9
- gpe-contacts | [] [] [] [] | 11
- gpe-edit | [] [] [] [] [] [] | 12
- gpe-go | [] | 5
- gpe-login | [] [] [] [] [] [] | 13
- gpe-ownerinfo | [] [] [] [] [] | 13
- gpe-sketchbook | [] [] [] | 9
- gpe-su | [] [] [] [] | 10
- gpe-taskmanager | [] [] [] [] | 10
- gpe-timesheet | [] [] [] [] [] | 12
- gpe-today | [] [] [] [] [] [] | 13
- gpe-todo | [] [] [] [] [] | 12
- gphoto2 | [] [] [] | 11
- gprof | [] [] | 9
- gpsdrive | [] [] | 4
- gramadoir | | 3
- grep | [] [] [] [] [] | 26
- gretl | | 2
- gtick | [] | 5
- hello | [] [] [] [] [] | 33
- id-utils | [] [] [] | 12
- indent | [] [] [] [] [] | 21
- jpilot | [] [] [] [] [] | 9
- jtag | [] | 1
- jwhois | () () [] [] | 11
- kbd | [] [] | 11
- latrine | | 1
- ld | [] [] | 5
- libc | [] [] [] [] | 20
- libgpewidget | [] [] [] [] | 13
- libiconv | [] [] [] [] [] [] [] [] [] | 27
- lifelines | [] | 2
- lilypond | [] | 3
- lingoteach | | 2
- lingoteach_lessons | () | 0
- lynx | [] [] [] [] | 14
- m4 | [] [] [] | 15
- mailutils | [] | 5
- make | [] [] [] [] | 16
- man-db | [] | 5
- minicom | [] | 11
- mysecretdiary | [] [] | 10
- nano | [] [] [] [] [] | 17
- nano_1_0 | [] [] [] [] | 17
- opcodes | [] [] | 6
- parted | [] [] [] | 15
- ptx | [] [] [] | 22
- python | | 0
- radius | [] | 4
- recode | [] [] [] [] | 20
- rpm | [] [] [] | 7
- screem | [] [] | 2
- scrollkeeper | [] [] [] [] | 15
- sed | [] [] [] [] [] [] | 23
- sh-utils | [] [] [] | 14
- shared-mime-info | [] [] | 4
- sharutils | [] [] [] [] [] | 17
- silky | () | 2
- skencil | [] | 6
- sketch | [] | 6
- soundtracker | [] [] | 9
- sp | [] | 3
- tar | [] [] [] [] [] | 24
- texinfo | [] [] [] [] | 14
- textutils | [] [] [] [] [] | 16
- tin | | 1
- tuxpaint | [] [] [] [] [] | 29
- util-linux | [] [] [] | 15
- vorbis-tools | [] | 8
- wastesedge | | 0
- wdiff | [] [] [] [] | 18
- wget | [] [] [] [] [] [] [] [] | 23
- xchat | [] [] [] [] [] | 14
- xfree86_xkb_xml | [] [] [] [] [] [] | 8
- xpad | | 4
- +-------------------------------------------+
- 51 teams ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
- 120 domains 59 42 16 25 81 0 56 12 1 10 21 22 1260
-
- Some counters in the preceding matrix are higher than the number of
-visible blocks let us expect. This is because a few extra PO files are
-used for implementing regional variants of languages, or language
-dialects.
-
- For a PO file in the matrix above to be effective, the package to
-which it applies should also have been internationalized and
-distributed as such by its maintainer. There might be an observable
-lag between the mere existence a PO file and its wide availability in a
-distribution.
-
- If December 2003 seems to be old, you may fetch a more recent copy
-of this `ABOUT-NLS' file on most GNU archive sites. The most
-up-to-date matrix with full percentage details can be found at
-`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
-
-Using `gettext' in new packages
-===============================
-
-If you are writing a freely available program and want to
-internationalize it you are welcome to use GNU `gettext' in your
-package. Of course you have to respect the GNU Library General Public
-License which covers the use of the GNU `gettext' library. This means
-in particular that even non-free programs can use `libintl' as a shared
-library, whereas only free software can use `libintl' as a static
-library or use modified versions of `libintl'.
-
- Once the sources are changed appropriately and the setup can handle
-the use of `gettext' the only thing missing are the translations. The
-Free Translation Project is also available for packages which are not
-developed inside the GNU project. Therefore the information given above
-applies also for every other Free Software Project. Contact
-`translation@iro.umontreal.ca' to make the `.pot' files available to
-the translation teams.
diff --git a/contrib/gnu-sort/AUTHORS b/contrib/gnu-sort/AUTHORS
deleted file mode 100644
index 4e8a5d4..0000000
--- a/contrib/gnu-sort/AUTHORS
+++ /dev/null
@@ -1,86 +0,0 @@
-Here are the names of the programs in this package,
-each followed by the name(s) of its author(s).
-
-basename: FIXME unknown
-cat: Torbjorn Granlund and Richard M. Stallman
-chgrp: David MacKenzie
-chmod: David MacKenzie
-chown: David MacKenzie
-chroot: Roland McGrath
-cksum: Q. Frank Xia
-comm: Richard Stallman and David MacKenzie
-cp: Torbjorn Granlund, David MacKenzie, and Jim Meyering
-csplit: Stuart Kemp and David MacKenzie
-cut: David Ihnat, David MacKenzie, and Jim Meyering
-date: David MacKenzie
-dd: Paul Rubin, David MacKenzie, and Stuart Kemp
-df: Torbjorn Granlund, David MacKenzie, Larry McVoy, and Paul Eggert
-dircolors: H. Peter Anvin
-dirname: David MacKenzie and Jim Meyering
-du: Torbjorn Granlund, David MacKenzie, Larry McVoy, and Paul Eggert
-echo: FIXME unknown
-env: Richard Mlynarik and David MacKenzie
-expand: David MacKenzie
-expr: Mike Parker
-factor: Paul Rubin
-false: no one
-fmt: Ross Paterson
-fold: David MacKenzie
-head: David MacKenzie
-hostid: Jim Meyering
-hostname: Jim Meyering
-id: Arnold Robbins and David MacKenzie
-install: David MacKenzie
-join: Mike Haertel
-kill: Paul Eggert
-link: Michael Stone
-ln: Mike Parker and David MacKenzie
-logname: FIXME: unknown
-ls: Richard Stallman and David MacKenzie
-md5sum: Ulrich Drepper and Scott Miller
-mkdir: David MacKenzie
-mkfifo: David MacKenzie
-mknod: David MacKenzie
-mv: Mike Parker, David MacKenzie, and Jim Meyering
-nice: David MacKenzie
-nl: Scott Bartram and David MacKenzie
-od: Jim Meyering
-paste: David M. Ihnat and David MacKenzie
-pathchk: David MacKenzie and Jim Meyering
-pinky: Joseph Arceneaux, David MacKenzie, and Kaveh Ghazi
-pr: Pete TerMaat and Roland Huebner
-printenv: David MacKenzie and Richard Mlynarik
-printf: David MacKenzie
-ptx: François Pinard
-pwd: Jim Meyering
-rm: Paul Rubin, David MacKenzie, Richard Stallman, and Jim Meyering
-rmdir: David MacKenzie
-seq: Ulrich Drepper
-shred: Colin Plumb
-sleep: Jim Meyering and Paul Eggert
-sort: Mike Haertel and Paul Eggert
-split: Torbjorn Granlund and Richard M. Stallman
-stat: Michael Meskes
-stty: David MacKenzie
-su: David MacKenzie
-sum: Kayvan Aghaiepour and David MacKenzie
-sync: Jim Meyering
-tac: Jay Lepreau and David MacKenzie
-tail: Paul Rubin, David MacKenzie, Ian Lance Taylor, and Jim Meyering
-tee: Mike Parker, Richard M. Stallman, and David MacKenzie
-test: FIXME: ksb and mjb
-touch: Paul Rubin, Arnold Robbins, Jim Kingdon, David MacKenzie, and Randy Smith
-tr: Jim Meyering
-true: no one
-tsort: Mark Kettenis
-tty: David MacKenzie
-uname: David MacKenzie
-unexpand: David MacKenzie
-uniq: Richard Stallman and David MacKenzie
-unlink: Michael Stone
-uptime: Joseph Arceneaux, David MacKenzie, and Kaveh Ghazi
-users: Joseph Arceneaux and David MacKenzie
-wc: Paul Rubin and David MacKenzie
-who: Joseph Arceneaux, David MacKenzie, and Michael Stone
-whoami: Richard Mlynarik
-yes: David MacKenzie
diff --git a/contrib/gnu-sort/COPYING b/contrib/gnu-sort/COPYING
deleted file mode 100644
index d60c31a..0000000
--- a/contrib/gnu-sort/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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 2 of the License, or
- (at your option) any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/contrib/gnu-sort/ChangeLog b/contrib/gnu-sort/ChangeLog
deleted file mode 100644
index c027655..0000000
--- a/contrib/gnu-sort/ChangeLog
+++ /dev/null
@@ -1,7511 +0,0 @@
-2004-08-11 Paul Eggert <eggert@cs.ucla.edu>
-
- * tests/install/basic-1: Test for the -d regression.
-
-2004-08-11 Dmitry V. Levin <ldv@altlinux.org>
-
- * src/install.c (main): Fix -d regression introduced with
- --target-directory support at 2004-06-25.
-
-2004-08-11 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/copy.c (copy_internal): When preserving links, unlink
- a destination with link count greater than one. This is so
- that commands like "cp -a" don't get confused when copying into
- a destination that already contains many hard links. Problem
- reported by Tim Waugh in:
- http://lists.gnu.org/archive/html/bug-coreutils/2004-08/msg00053.html
-
-2004-08-10 Paul Eggert <eggert@cs.ucla.edu>
-
- Convert all files to UTF-8.
- * tests/fmt/basic (8-bit-pfx): Use UTF-8, not Latin-1.
- * tests/sort/Test.pm (16a): Likewise.
- * tests/uniq/Test.pm (8): Likewise.
- * tests/misc/printf-hex: Use ASCII, not Latin-1.
-
- * NEWS: Document "sort -o -" and "tee -" POSIX-conformance fixes.
- * src/shred.c (usage): "-" is an operand, not an option.
- * src/sort.c (die, xfopen, mergefps, first_same_file, merge):
- A null file arg means standard output.
- (main): "-o -" means to write to a file named "-",
- not to standard output.
- * src/tee.c (usage, tee): "tee -" writes to standard output, not
- to a file named "-".
-
-2004-08-10 Dmitry V. Levin <ldv@altlinux.org>
-
- * src/install.c (change_timestamps): Fix int->bool conversion
- bugs introduced on 2004-07-29.
-
-2004-08-09 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/shred.c (wipename): Work even if the directory is writeable
- and not readable. Prefer write access, since this should work
- better with fdatasync.
-
- * src/csplit.c (xalloc_die): New function.
- (main): Remove now-obsolete initialization of xalloc_fail_func.
-
- * src/md5sum.c: Adjust to sha->sha1 renaming.
-
-2004-08-08 Dmitry V. Levin <ldv@altlinux.org>
-
- Minor code cleanup.
- * src/readlink.c (canonicalize_fname): Remove unneeded proxy function.
- (can_mode): Make variable local.
-
-2004-08-07 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/system.h (O_BINARY) [!O_BINARY && defined O_BINARY]:
- Do not define, to avoid annoying compiler messages on QNX 6.3.
- Problem reported by Johan in:
- http://lists.gnu.org/archive/html/bug-coreutils/2004-08/msg00050.html
-
-2004-08-04 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/system.h (PRIdMAX, PRIoMAX, PRIuMAX, PRIxMAX):
- Define to a concatenation of string literals, not to an expression;
- needed for concatenation contexts.
- (INTMAX_MAX, INTMAX_MIN): New macros.
-
- * src/stat.c (print_stat): Don't assume st_ino / st_dev fits in
- unsigned long; this isn't true for st_ino on Solaris 9.
-
-2004-08-03 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/uname.c: Do not depend on HAVE_SYSCTL when deciding
- whether to include files. Include <sys/param.h> if
- HAVE_SYS_PARAM_H (not HAVE_SYSCTL).
- (main) [defined __POWERPC__]: Add a kludge to work around a
- Mac OS X bug, so that uname -p defaults to "powerpc" if
- sysctl ((int[]) {CTL_HW, HW_MACHINE_ARCH}, 2, buffer, &bufsize, 0, 0)
- fails. Problem reported by Petter Reinholdtsen in:
- http://lists.gnu.org/archive/html/bug-gnu-utils/2003-02/msg00201.html
-
- * src/uniq.c (hard_LC_COLLATE, ignore_case, different, check_file,
- main): Use bool for booleans.
- (writeline, check_file): Use uintmax_t for line counts.
- (check_file): Check for and report line number overflow,
- when that matters.
- * src/wc.c (iswspace, wc): Use to_uchar rather than a cast.
- (print_lines, print_words, print_chars, print_bytes, print_linelength,
- have_read_stdin, wc, wc_file, main):
- Use bool for booleans.
- (exit_status): Remove.
- (wc, wc_file): Return bool status. All callers changed.
- * src/who.c (scan_entries): 0 -> STDIN_FILENO.
- * src/whoami.c (main): Print uids using unsigned long int, not
- unsigned int.
-
- * src/unexpand.c: Int cleanup and minor reorganization to be more
- like src/expand.c.
- Include quote.h, xstrndup.h.
- (TAB_STOP_SENTINEL): Increase from INT_MAX to INTMAX_MAX.
- (convert_entire_line, have_read_stdin, parse_tabstops, next_file,
- unexpand, main):
- Use bool for booleans.
- (tab_size, tab_list, add_tabstop, validate_tabstops, unexpand):
- Use uintmax_t for column counts.
- (first_free_tab, validate_tabstops, unexpand): Use size_t for sizes.
- (add_tabstop, parse_tabstops, main): Don't reserve UINTMAX_MAX
- as a tab stop.
- (parse_tabstops): Don't use ISBLANK on possibly-signed char.
- Detect overflow in tab stop string.
- (next_file, main): Use EXIT_FAILURE/EXIT_SUCCESS instead of 1/0.
- (unexpand): Concatenate input files the same way expand does.
-
- * src/touch.c (no_create, use_ref, posix_date, amtime_now,
- touch, main): Use bool for booleans.
- (main): Avoid integer overflow when given more than INT_MAX
- options.
- * src/tsort.c (struct item, n_strings): Use size_t for sizes.
- (have_read_stdin, count_items, scan_zeros, detect_loop,
- recurse_tree, walk_tree, tsort, main):
- Use bool for booleans.
- (exit_status): Remove.
- (tsort): Return a success flag instead of storing into a global.
- (main): Use it.
- * src/tty.c (silent, main): Use bool for booleans.
- (main): 0 -> STDIN_FILENO.
- * src/uname.c (print_element): Use bool for booleans.
-
- * src/test.c (TRUE, FALSE, SHELL_BOOLEAN, TRUTH_OR, TRUTH_AND):
- Remove. All uses replaced by C99 boolean primitives.
- (TEST_TRUE, TEST_FALSE): New constants, for readability.
- (test_unop, binop, unary_operator, binary_operator, two_arguments,
- three_arguments, posixtest, expr, term, and, or, is_int, age_of,
- one_argument, main): Use bool for booleans.
- (advance, unary_advance): Now inline procedures rather than a macros.
- (is_int): Renamed from isint, to avoid namespace clash with ctype.h.
- (term, and, or): When it's easy, loop instead of recursing.
- (term): Avoid integer overflow if there are INT_MAX-3 args (!).
- (binary_operator, unary_operator): Simplify by systematically rewriting
- true==FOO to FOO (where FOO is a boolean).
- (unary_operator): Don't consider a file to be a regular file
- merely because its mode&S_IFMT is zero. Just use S_ISREG.
- Remove unnecessary casts. Remove ifdefs for things like
- S_ISSOCK that are no longer needed, since stat-macros.h always
- defines them now.
-
- * src/tac-pipe.c (buf_init_from_stdin, find_bol, tac_mem):
- Use bool for booleans.
- (buf_init_from_stdin, buf_free, find_bol, print_line):
- Use size_t for sizes.
- * src/tac.c (separator_ends_record, tac_seekable, tac_file,
- tac_stdin, tac_stdin_to_mem, main): Use bool for booleans.
- (match_length, G_buffer_size, tac_seekable, main): Use size_t for sizes.
- (tac_seekable): Use ptrdiff_t for pointer subtraction.
- Report an error if the result is out of range.
- (tac_seekable, main): Check for integer overflow in buffer size
- calculations.
- (main): Remove unnecessary casts.
-
- * src/su.c (run_shell): Pass a new n_additional_args arg, so that
- the callee doesn't have to count 'em. All callers changed.
- Don't allocate more space for the arg vector than we'll need.
- Use memcpy to copy the args rather than rolling our own loop.
- Use size_t for sizes.
- (fast_startup, simulate_login, change_environment, log_su,
- correct_password, restricted_shell, main): Use bool for booleans.
- (longopts): Don't assume change_environment is an int.
- Use NULL, not 0, for pointers.
- (xsetenv): New function, replacing xputenv and concat.
- All callers changed.
- (elements): Remove; no longer needed.
- (log_su, correct_passwd, main): Prefer !x to x==NULL.
- (log_su): 2 -> STDERR_FILENO.
- (modify_environment, main): Don't assume that getenv's returned value
- has an indefinite lifetime.
- (modify_environment): Allocate a larger environ.
- (main): Remove an impossible 'case 0'; if it happens now, it'll
- get diagnosed. Don't assume getpwnam results outlive endpwent.
- Check for null or empty pw_name, pw_dir and for null pw_passwd.
-
- * src/stty.c (VA_START): Remove. All callers now use va_start.
- (_POSIX_VDISABLE): Remove unnecessary cast.
- (struct control_info, visible): Use cc_t for control chars.
- (struct control_info): Use size_t for sizes.
- (recover_mode, set_mode, display_speed, display_window_size,
- valid_options, main, display_changed):
- Use bool for booleans.
- (integer_arg): Return unsigned long int, not long int.
- Accept new max arg; all callers changed, to specify a maximum
- value for integer parameters instead of silently overflowing.
- (wrap): Do not overrun the stack buffer if the output contains
- more than 1024 bytes. Instead, malloc a buffer.
- (main): Remove a "what is this?!?" FIXME. Nobody knows what it is.
- Remove unnecessary casts.
- (set_control_char): Allow int values only up to cc_t range.
- (screen_columns): Don't reject INT_MAX.
- (display_changed, display_all, display_speed, recover_mode):
- Don't assume cc_t fits in int.
-
- * src/remove.h: Add copyright notice.
- (struct rm_options): Use bool for booleans.
- * src/rmdir.c (empty_paths, ignore_fail_on_non_empty, verbose,
- errno_rmdir_non_empty, remove_parents, main): Likewise.
- * src/sum.c (have_read_stdin, bsd_sum_file, sysv_sum_file,
- main): Likewise.
- (main): Don't dump core if invoked with argv[0]==NULL.
- * src/tee.c (tee, append, ignore_interrupts, main, tee):
- Use bool for booleans.
- (tee): Use ssize_t for read returns.
-
- * src/ptx.c: Add a FIXME mentioning that there are many
- unchecked integer overflows in this file.
- (gnu_extensions, auto_reference, input_reference, right_reference,
- ignore_case, initialize_regex, fix_output_parameters,
- output_one_roff_line, output_one_text_line, output_one_dumb_line, main):
- Use bool for booleans.
- (SKIP_SOMETHING, compare_words, digest_break_file,
- find_occurs_in_text, fix_output_parameters):
- Use to_uchar instead of a caset.
- (print_field): Rewrite to avoid cast.
-
- * src/printf.c (posixly_correct): Use bool for booleans.
- (verify, main): Use EXIT_FAILURE/EXIT_SUCCESS instead of 1/0.
- (STRTOX): Rewrite to avoid casts.
- (print_esc_char): Arg is char, not int.
- * src/readlink.c (canonicalize): Remove. All uses now merely inspect
- can_mode.
- (no_newline, verbose): Use bool for booleans.
- (can_mode): Now of type int; use -1 to denote otherwise-uninitialized.
- * src/shred.c (struct Options, main): Use bool for booleans.
- (isaac_seed_data, fillpattern, wipefile): Rewrite to avoid casts.
- * src/split.c (cwrite, bytes_split, lines_split, line_bytes_split):
- Use bool for booleans.
- * src/stat.c (G_fail): Remove.
- (print_statfs): Print various gotta-be-nonnegative values using
- unsigned long int, not long int or int.
- (do_statfs, do_stat): Return a boolean success flag.
- (do_stat, main): Use bool for booleans.
-
- * src/pr.c: Add a FIXME mentioning that there are many
- unchecked integer overflows in this file.
- (TRUE, FALSE): Remove. All uses replaced by true and false.
- (struct COLUMN, read_line, print_page, print_stored, open_file,
- skip_to_page, init_fps, parallel_files, align_empty_cols,
- empty_line, FF_only, explicit_columns, extremities, keep_FF,
- print_a_FF, print_a_header, use_form_feed, have_read_stdin,
- print_across_flag, storing_columns, balance_columns,
- truncate_lines, join_lines, untabify_input, failed_opens,
- numbered_lines, skip_count, use_esc_sequence, use_cntrl_prefix,
- double_space, ignore_failed_opens, use_col_separator,
- pad_vertically, last_line, main, init_parameters, skip_read,
- read_line, print_stored):
- Use bool for booleans.
- (struct COLUMN, char_to_clump, store_char, print_char):
- Use char for chars.
- (clump_buff, print_clump): Use char[], not int[], for an array whose
- elements are always chars.
- (first_last_page, main, getoptarg, balance, add_line_number,
- char_to_uclump): Remove unnecessary casts.
- (init_parameters): Allocate chars, not ints, for clump_buff.
- (print_char): Use to_uchar before invoking ISPRINT.
- (char_to_clump): Convert to unsigned char before invoking ISPRINT.
-
- * src/nohup.c (main): Use bool for booleans.
- * src/paste.c (paste_parallel, paste_serial, main): Likewise.
- * src/pathchk.c (validate-path, main, portable_chars_only): Likewise.
- (portable_chars_only): Use to_uchar rather than a cast.
- * src/printenv.c (main): Use bool for booleans.
- Do not assume that the environ has at most one matching entry
- for each option (integer overflow was possible otherwise).
-
- * src/od.c (FMT_BYTES_ALLOCATED): Now an enum, not a decimal
- constant. Do not assume PRIdMAX etc. are strings of length 3 or
- less.
- (struct tspec): Use it. fmt_string is now an array, not
- a pointer, as there's little point to the indirection here.
- (struct tspec, flag_dump_strings,
- traditional, flag_pseudo_start, limit_bytes_to_format,
- abbreviate_duplicate_blocks, have_read_stdin, simple_strtoul,
- decode_one_format, open_next_file, check_and_close,
- decode_format_string, skip, write_block, read_char, read_block,
- parse_old_offset, dump, dump_strings, main):
- Use bool for booleans.
- (struct tspec): Use void *, not char *, for generic pointers.
- (bytes_to_oct_digits, bytes_to_signed_dec_digits,
- bytes_to_unsigned_dec_digits, bytes_to_hex_digits):
- Use char, not unsigned int, since char suffices.
- (print_s_char, print_char, print_s_short, print_short,
- print_int, print_long, print_long_long, print_float,
- print_double, print_long_double): Rewrite to avoid casts.
- These now take void * arguments, instead of char *.
- Use the same body for all functions, except for the choice
- of type. Assume C89 to simplify handling of signed char.
- (dump_hexl_mode_trailer, print_named_ascii, print_ascii):
- Rewrite to avoid casts.
- (print_named_ascii, print_ascii): Now takes void *, not char *.
- (decode_one_format): Use int for printf field widths, not
- unsigned int. Pass void * to subsidiary printers,
- not char *. Simplify handling of floating-point formats
- by factoring out common code dealing with precision and field width.
- (decode_format_string): Avoid need for temporary copy of
- each decoded struct tspec.
- (get_lcm): Remove unnecessary cast.
- (main): Fix bug where more than INT_MAX failed decodes were ignored.
-
-2004-08-02 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/nl.c (TRUE, FALSE): Remove; all uses changed to true, false.
- (enum number_format): Remove.
- (FORMAT_RIGHT_NOLZ, FORMAT_RIGHT_LZ, FORMAT_LEFT): Now strings,
- not enum values.
- (DEFAULT_SECTION_DELIMITERS): Now an array constant, not a macro.
- (section_del): Now const.
- (print_fmt): Remove.
- (starting_line_number, page_incr, blank_join, line_no,
- print_lineno, proc_text, main):
- Use intmax_t for line numbers.
- (reset_numbers, have_read_stdin, build_type_arg, nl_file, main):
- Use bool for booleans.
- (lineno_format): Now a string, not an enum value.
- (build_print_fmt): Remove. All calls removed. This work is
- now done within print_lineno.
- (build_type_arg): Use size_t for sizes.
- (print_lineno): Check for line number overflow.
- (proc_text, main): Remove unnecessary cast.
-
- * src/ln.c (symbolic_link, interactive, remove_existing_files,
- verbose, hard_dir_link, dereference_dest_dir_symlinks,
- do_link, main): Use bool for booleans.
-
- * src/ls.c (struct fileinfo, file_interesting,
- extract_dirs_from_files, color_symlink_as_referent,
- FILE_OR_LINK_MODE, sort_reverse, print_owner, print_group,
- numeric_ids, print_block_size, dired, print_with_color,
- check_symlink_color, print_inode, recursive, immediate_dirs,
- all_files, really_all_files, qmark_funny_chars,
- print_dir_name, format_needs_stat, format_needs_type, visit_dir,
- main, decode_switches, parse_ls_color, print_dir, file_interesting,
- gobble_file, make_link_path, basename_is_dot_or_dotdot,
- extract_dirs_from_files, print_long_format):
- Use bool for booleans.
- (dir_defaulted): Remove; no longer needed.
- (main): Use int to count files, since it suffices for argv.
- Rewrite to avoid need for dir_defaulted.
- (main, print_dir, gobble_file, get_link_name,
- xstrcoll):
- Set exit status to EXIT_SUCCES/EXIT_FAILURE rather than 0/1.
- (decode_switches): Put back check for ws.ws_col <= SIZE_MAX.
- Remove unnecessary cast to int. Use int instead of unsigned
- int to count from 0 to 1.
- (get_funky_string, print_type_indicator): Use char for bytes, not int.
- (make_link_path): Use NULL for null pointers.
- (quote_name): Use to_uchar instead of cast.
-
- * src/id.c (use_name, main, print_user, xgetgroups, print_group_list,
- print_full_info): Use bool for booleans.
- (problems): Remove, replacing with....
- (ok): New var (inverted from old sense).
- (print_user, print_group, print_full_info):
- Print uids/gids with %lu, not %u.
- (xgetgroups): Don't run out of memory if getgroups or getugroups
- returns -1.
- * src/setuidgid.c (main): Print uids/gids with %lu, not %ld.
-
- * src/factor.c (wheel_tab): Use unsigned char instead of unsigned
- int, since it suffices.
- (factor, print_factors): Use size_t for sizes.
- (print_factors, do_stdin, main): Use bool for booleans.
- * src/fold.c (TAB_WIDTH): New macro; use it instead of "8".
- (fold_file, main): Use bool for booleans.
- (fold_file, main): Use size_t for sizes.
- (main): Allow -w options up to SIZE_MAX - TAB_WIDTH - 1, instead
- of prohibiting widths greater than INT_MAX.
- * src/head.c (presume_input_pipe, print_headers, have_read_stdin,
- write_header, elide_tail_bytes_pipe, elide_tail_bytes_file,
- elide_tail_lines_pipe, elide_tail_lines_seekable,
- elide_tail_lines_file, head_bytes, head_lines, head, head_file,
- string_to_integer, main):
- Use bool for booleans.
- (main): Rewrite to avoid cast.
-
- * src/csplit.c (struct line): Use size_t for sizes.
- (main): Remove unnecessary cast.
- * src/cut.c (cut_fields): Use to_uchar rather than a cast.
- * src/cut.c (cut_file, main): Use bool for booleans.
- * src/date.c (show_date, rfc_format, batch_convert, main): Likewise.
- * src/env.c (main): Likewise.
- * src/expr.c (nextarg): Likewise.
- * src/env.c (main): Remove unused and nonstandard envp arg.
-
- * src/fmt.c (COST, MAXWORDS): Add a comment describing some of
- fmt's arbitrary limits.
- (TRUE, FALSE): Remove; all uses changed to (true, false).
- (main): Use bool for booleans.
- Limit maximum width to MAXCHARS / 2. Use xstrtoul, not xstrtol,
- to parse width.
- (copy_rest): Remove unnecessary cast.
- (get_prefix): Rewrite to avoid cast.
- (check_punctuation): Use char *, not unsigned char *; C89 requires
- this. Avoid off-by-one buffer read overrun when line is empty.
- (flush_paragraph): Don't assume wptr-parabuf is <= INT_MAX.
- Remove unnecessary casts.
- * tests/fmt/basic (wide-1, wide-2, bad-suffix): Adjust to above
- changes.
-
- * src/expand.c (convert_entire_line, have_read_stdin, parse_tabstops,
- next_file, expand, main):
- Use bool for booleans.
- (tab_size, tab_list, add_tabstop, parse_tabstops, validate_tabstops,
- expand, main):
- Use uintmax_t for column counts.
- (add_tabstop): Don't reserve -1 (now UINTMAX_MAX) as a special value.
- All callers changed.
- (parse_tabstops): Don't pass a negative char to isblank.
- Avoid memory leak with large tab stops.
- (validate_tabstops, expand): Don't assume number of tab stops is
- <= INT_MAX.
- (next_file, main): Use EXIT_SUCCESS/EXIT_FAILURE rather than 0/1 when
- storing values into exit_status.
- (expand): Use same pattern as unexpand for reading chars.
- Report an error when input line is too long, instead of silently
- screwing up. Do not mishandle tab stops when backspacing left
- over start of line.
-
- * src/dircolors.c (have_read_stdin, append_quoted,
- dc_parse_stream, dc_parse_file, main): Use bool for booleans.
- (dc_parse_stream): Use enum for state, rather than int.
- Use ssize_t to store getline result.
-
- * src/dd.c (translation_needed, parse_integer, scanargs,
- apply_translations, char_is_saved, swab_buffer, skip_via_lseek):
- Use bool for booleans.
- (translate_buffer): Use to_uchar rather than a cast.
- (swab_buffer, copy_simple, copy_with_unblock):
- Use size_t for sizes.
-
- * src/seq.c (equal_width, valid_format, main): Use bool for booleans.
- * src/sleep.c (apply_suffix): Likewise.
- * src/tail.c (struct File_spec, reopen_inaccessible_files, count_lines,
- forever, from_start, print_headers, have_read_stdin, valid_file_spec,
- write_header, file_lines, pipe_lines, pipe_bytes, recheck,
- tail_forever, tail_bytes, tail_lines, tail, tail_file,
- parse_obsolescent_option, parse_options, main): Likewise.
- * src/sleep.c (apply_suffix): Invert sense of result.
- Use int (not unsigned int) for multiplier, as this generates better
- code with some compilers. Simplify code a bit.
- * src/tail.c (struct File_spec, max_n_unchanged_stats_between_opens,
- parse_options): Use uintmax_t, not unsigned int or unsigned long int,
- for state counters.
- (tail_bytes, tail_lines): Redo test of return value (-1, 0, 1) to
- make it a bit clearer.
-
- * src/hostname.c: Include "xgethostname.h".
- (xgethostname): Remove decl; xgethostname.h has it.
- (sethostname) [!defined(HAVE_SETHOSTNAME) && defined(HAVE_SYSINFO)
- && defined (HAVE_SYS_SYSTEMINFO_H) && defined(HAVE_LIMITS_H)]: Use
- prototypes rather than K&R form. Assume any negative value from
- sysinfo denotes failure, not just -1.
- (main): Simplify use of sethostname.
-
- * src/pinky.c (include_idle, include_heading, include_fullname,
- include_project, include_plan, include_home_and_shell, do_short_format,
- include_where, main): Use bool for booleans.
- (count_ampersands, create_fullname, scan_entries, short_pinky):
- Use size_t for sizes.
- (create_fullname): Check for overflow in size calculations.
- (idle_string): Don't assume that the number of idle days
- is less than 10**8 and/or INT_MAX/(24*60*60).
- (main): No need to pass a non-NULL last arg to getopt_long.
- * src/uptime.c (print_uptime, uptime): Use size_t for sizes.
- (print_uptime): Remove unused local variable.
- (main): No need to pass a non-NULL last arg to getopt_long.
- * src/users.c (list_entries_users, users): Use size_t for sizes.
- (list_entries_users): Use char for bytes.
- (main): No need to pass a non-NULL last arg to getopt_long.
- * src/who.c (do_lookup, short_list, short_output, include_idle,
- include_heading, include_mesg, include_exit, need_boottime,
- need_deadprocs, need_login, need_initspawn, need_clockchange,
- need_runlevel, need_users, my_line_only, main): Use bool for booleans.
- (print_runlevel): Use unsigned char for bytes.
- (list_entries_who, scan_entries, who): Use size_t for sizes.
- (main): No need to pass a non-NULL last arg to getopt_long.
-
- * src/install.c (isdir): Remove decl.
- (install_file_to_path): Rely on make_path to fail if the destination
- is not a directory, by passing preserve_existing==true to it.
- Hence we no longer need to call isdir.
- Free dest_dir immediately when it's no longer needed, rather than
- waiting until the end of the function.
- (copy_file): Don't bother calling isdir, as copy will do the
- right thing if the destination is a directory.
-
- * src/du.c (fts_debug, opt_all, apparent_size, opt_count_all,
- print_grand_total, opt_separate_dirs, hash_ins, process_file, main):
- Use bool for booleans.
- (max_depth): Now size_t, not int, to avoid an arbitrary limit
- of INT_MAX on depth.
- (G_fail): Remove: no longer needed, now that the relevant
- functions return bool.
- (process_file): Use return value to signal success rather than
- setting a global. Remove first_call static var; not needed, since
- we can look at n_alloc. Use size_t for depths. Remove FIXME
- about size_t casts, as it's now fixed. Use xnrealloc rather
- than the obsolescent XREALLOC. Don't bother to check whether
- reallocation is needed unless level > prev_level.
- (du_files): Invert sense of result, for consistency with
- other coreutils code. All callers changed.
- (main): Allow --max-depth values up to SIZE_MAX.
-
- * src/df.c (inode_format, show_all_fs, show_local_fs,
- show_listed_fs, posix_format, require_sync, print_type,
- selected_fstype, excluded_fstype, show_dev, show_point, main):
- Use bool for booleans.
- (df_readable, show_dev): Use UINTMAX_MAX instead of -1.
- (show_dev, show_point, main):
- Use EXIT_SUCCESS/EXIT_FAILURE instead of 0/1.
- Don't assume disk name lengths are <= INT_MAX.
- Rewrite pct calculation to avoid cast.
- (show_point): Don't assume resolved length is <= SSIZE_MAX.
-
- * src/cut.c (hash_int) [!defined UINTPTR_MAX]: Use size_t
- instead of uintptr_t.
- * src/shred.c (UINT_MAX_32_BITS): Remove.
- (word32): Remove. All uses changed to uint32_t.
- (isaac_seed_data): Remove unnecessary cast.
- * src/system.h (ptr_align): Use size_t; in practice, this is just as
- good as uintptr_t in checking for alignments, and has fewer
- configuration hassles.
-
- * src/Makefile.am (localedir.h): Make it readonly; this
- undoes part of the 2004-07-27 patch.
-
-2004-07-30 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/sort.c (UCHAR): Remove; all uses changed to to_uchar.
- (IS_THOUSANDS_SEP): Use bool when appropriate.
- (numcompare, main): Use char, not int, when the value is always a char.
- (numcompare): Remove "register"; compilers are smart enough these days.
- * src/system.h (errno, CHAR_BIT): Remove decls;
- no longer needed now we assume C89 or better.
- Include <inttypes.h> before <stdint.h>, as it's the
- Autoconf-recommended pattern.
- (to_uchar): New inline function, moved here from tr.c.
- Use full names for int types, e.g. "long int" rather than "long".
- * src/tr.c (to_uchar): Remove; now in system.h.
- (is_char_class_member): Use bool when appropriate.
-
- * src/mkdir.c (create_parents, main): Use bool when appropriate.
- (main): Use EXIT_SUCCESS/EXIT_FAILURE instead of 0/1.
-
-2004-07-29 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/mkfifo.c (main): Use EXIT_SUCCESS and EXIT_FAILURE, not 0 and 1.
-
- * src/chmod.c (recurse, force_silent, process_file, process_files,
- main): Use bool when appropriate.
- * src/cksum.c (cksum, main): Likewise.
- * src/comm.c (hard_LC_COLLATE, only_file_1, only_file_2, both,
- compare_files, main): Likewise.
-
- * src/copy.h (struct cp_options): Likewise.
- * src/copy.c (copy_internal, is_ancestor, copy_dir, copy_reg,
- same_file_ok, seen_file, copy_internal, valid_options, copy): Likewise.
- * src/cp-hash.h (remember_created): Likewise.
- * src/cp-hash.c (remember_created): Likewise.
- * src/cp.c (struct dir_attr, flag_path, remove_trailing_slashes,
- re_protect, make_path_private, target_directory_operand, do_copy,
- cp_option_init, decode_preserve_arg, main): Likewise.
- * src/install.c (isdir, change_timestamps, change_attributes,
- copy_file, install_file_to_path, install_file_in_dir,
- install_file_in_file, strip_files, dir_arg, cp_option_init, main,
- change_attributes, change_timestamps): Likewise.
- * src/mv.c (remove_trailing_slashes, rm_option_init,
- cp_option_init, do_move, movefile, main): Likewise.
- * src/remove.c (right_justify), full_filename_, AD_pop_and_chdir,
- AD_push, prompt, remove_dir): Likewise.
- * src/rm.c (rm_option_init, main): Likewise.
-
- * src/remove.c (top_dir, pop_dir, full_filename_):
- Use size_t for sizes.
- * src/cp.c (target_directory_operand): Do not clear *NEW_DST if stat
- succeeds. It's not necessary in that case, as *NEW_DST is always
- false already.
- (do_copy): Rewrite slightly to avoid need for "unreachable" comment.
- (main): Use EXIT_SUCCESS, EXIT_FAILURE instead of 0, 1.
- * src/rm.c (main): Likewise.
-
- md5sum, sha1sum integer cleanups.
-
- * src/checksum.h: Don't include config.h, sys/types.h, stdio.h:
- not needed.
- (ALG_UNSPECIFIED): Remove.
- (ALG_MDT): Don't make it equal to CHAR_MAX + 1; this isn't necessary.
- * src/md5.c: Don't include any files other than checksum.h.
- * src/sha1sum.c: Likewise.
- * src/md5sum.c (OPENOPTS, have_read_stdin, status_only, warn,
- bsd_split_3, split_3, hex_digits, digest_file, digest_check, main):
- Use bool when appropriate.
- (digest_check): Increase limit of number of input lines to
- UINTMAX_MAX from INT_MAX. Diagnose any overflows of this counter.
- Use ngettext instead of hard-to-i18nize hardcoded stuff for plurals.
-
-2004-07-28 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/cat.c (exit_status): Remove. Now done by passing a boolean
- 'ok' flag around.
- (simple_cat, cat): Return true if successful. All callers changed.
- (simple_cat, cat, main): Use bool for booleans.
- (simple_cat): Use size_t for sizes.
- (cat, main): Use the same names for parameters that we use for
- long options, to avoid confusion. This inverts the sense of the
- show_tabs (formerly output_tabs) and number_nonblank
- (formerly numbers_at_empty_lines) variables.
- (main): Don't mess up (due to integer overflow) if we are given
- INT_MAX - INT_MIN + 1 options.
- [O_BINARY]: Don't invoke isatty unless the other options require it.
- (main): When deciding whether to use simple_cat, don't worry
- about binary option; it's irrelevant.
-
- * src/dcgen: Remove comments, trailing white space, and empty
- lines from the output strings, to save space.
- Use a narrower type like 'unsigned char' for line lengths, if
- that will do.
- Make the output variables static, not extern.
-
- * src/chgrp.c (parse_group): Require base 10 when parsing
- groups as integers.
- (main): int -> bool when appropriate.
- * src/chown.c (main): Likewise.
- * src/chown-core.c: Include inttostr.h.
- (UINT_MAX_DECIMAL_DIGITS, uint_to_string): Remove.
- (gid_to_name, uid_to_name): Use imaxtostr/umaxtostr
- instead of uint_to_string).
- (describe_change): Instead of an int flag, use a char *
- auxiliary; this avoids the need for casts.
- Assume free (NULL) works.
- (change_file_owner): Return true/false, not 0/-1, since
- we don't set errno. All callers changed.
- Use bool when appropriate.
- (chown_files): Likewise.
- * src/chown-core.h (chown_files): Likewise.
-
- * tests/chown/basic: Test for proper handling of uids like
- "010", which must be parsed as decimal.
-
- * tests/misc/pwd: Don't assume that Perl's getpwd agrees with our
- pwd when there are multiple names for the working directory
- (which can happen with an automounter, sigh).
-
- * src/Makefile.am ($(SCRIPTS)): Don't depend on Makefile;
- this causes Solaris 8 'make' to refuse to build "groups".
- (localedir.h): Don't depend on Makefile: this causes Solaris
- 8 'make' to build localedir.h unnecessarily. The dependence
- on Makefile is ineffective anyway, since $(localedir) might
- change even if Makefile hasn't.
-
- * src/remove.c (remove_dir): If we can't save the state of the
- working directory, pretend we started from "/", not ".".
- This avoids a bug on hosts like Solaris that don't let you
- remove the working directory.
-
-2004-07-27 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/printf.c (strtiomax, strtoumax): Declare if not already
- declared: this fixes a portability bug with Solaris 8 + GCC.
- (STRTOX): Parenthesize use of macro arg as expression.
- (vstrtoimax, vstrtoumax, vstrtold): Remove now-unnecessary
- parentheses.
- * configure.ac: Check for declaration of strtoumax, for
- src/printf.c.
-
- * src/Makefile.am (cp_LDADD, ginstall_LDADD, mv_LDADD,
- pathchk_LDADD, rm_LDADD, test_LDADD): New vars, for eaccess.
-
- * tests/readlink/can-e: Don't assume that we can remove the
- working directory: this isn't possible under Solaris 8, say.
- * tests/readlink/can-f: Likewise.
- * tests/readlink/can-m: Likewise.
-
- * src/copy.c (copy_internal): find_backup_file_name no longer
- returns NULL, so don't bother to check for this.
- * src/cp.c (do_copy): Likewise.
- * src/ln.c (do_link): Likewise.
-
-2004-07-25 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/nice.c (GET_NICE_VALUE): Renamed from GET_PRIORITY.
- All uses changed.
- (NZERO): New macro, if system doesn't define it already.
- (usage): Distinguish priorities from nice values.
- Don't assume NZERO is 20.
- (main): Use bool instead of int where appropriate.
- If user specifies an adjustment out of range, always truncate it
- to an inrange value instead of sometimes giving an error message
- and sometimes not.
- Do not assume that -1 is an error return from "nice" or
- "getpriority", as it might be the current nice value minus NZERO.
- If nice/setpriority fails with errno == EPERM, go ahead and run
- the command anyway; POSIX requires this.
-
- * src/pathchk.c: Include euidaccess.h.
- (dir_ok): Use euidaccess, not access.
- * src/test.c (R_OK, W_OK, X_OK, FOK): Remove; system.h defines them.
- (eaccess): Remove. All users changed to use euidaccess instead.
-
-2004-07-24 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/uptime.c (print_uptime) [defined BOOT_MSG]:
- Don't assume ut_line is null-terminated.
- * src/who.c (print_line): New arguments USERLEN and LINELEN,
- since USER and LINE might not be null terminated. All callers
- changed.
-
-2004-07-23 Paul Eggert <eggert@cs.ucla.edu>
-
- Fix bug with "tail -f" reported by Rob Holland in
- <http://lists.gnu.org/archive/html/bug-coreutils/2004-07/msg00054.html>.
- Also, remove the undocumented and unsupported-since-2000
- --max-consecutive-size-changes options. Fix another related bug:
- "tail" got confused if stdin, stdout, or stderr were closed.
- Also, use output buffering even with "tail -f".
-
- * NEWS: Document this, plus yesterday's patch.
- * doc/coreutils.texi (tail invocation): "size has remained the same"
- -> "file has not changed", which is more accurate for fifos.
- * src/tail.c: Include fcntl-safer.h.
- (COPY_TO_EOF): Set to UINTMAX_MAX, not OFF_T_MAX (which was wrong).
- (COPY_A_BUFFER): New macro.
- (struct File_spec): New members mtime, mode, blocking.
- Remove member n_consecutive_size_changes.
- (DEFAULT_MAX_N_CONSECUTIVE_SIZE_CHANGES,
- max_n_consecutive_size_changes_between_opens,
- MAX_CONSECUTIVE_SIZE_CHANGES_OPTION): Remove.
- (long_options, tail_forever, parse_options):
- Remove (non-)support for --max-consecutive-size-changes.
- (record_open_fd): New function.
- (recheck, tail_file): Use it. Don't assume that stdin is open.
- (dump_remainder): Add support for new COPY_A_BUFFER special value.
- Treat errno==EAGAIN like EOF, since it might be a nonblocking read.
- (recheck): New arg BLOCKING, specifying whether to use blocking reads.
- All uses changed.
- (n_live_files): Remove, replacing with...
- (any_live_files): New function. All uses changed.
- (tail_forever): Use nonblocking I/O unless we know that blocking I/O
- is safe; this avoids some hangs when reading from a fifo.
- Avoid invoking fstat or sleep when using blocking I/O.
- Do not check for changes to size if the file is not a regular file,
- as the size is undefined in that case.
- Check for changes to mtime or mode, too; this works for non-regular
- files.
- (tail_forever, main): Redo fflush strategy to work even when input
- is nonblocking. Don't use unbuffered output; just flush when needed.
-
-2004-07-22 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/tail.c (main): Ignore -f if no file operand is specified
- and standard input is a pipe.
- * doc/coreutils.texi (tail invocation): Do not ignore -f for
- all pipes, just for when standard input is a pipe and no
- file operand is specified.
- * tests/tail/Test.pm: Reinstate f-1 test, since we now pass.
- Add a new commented-out f-2 test, which we still fail.
- (test_vector): All f-* tests are special cases, not just f-1.
-
-2004-07-12 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/uptime.c: Include c-strtod.h.
- (print_uptime): Use c_strtod instead of setlocale and sscanf.
- Use long int rather than int to count days (for 64-bit hosts),
- and check for arithmetic overflow when converting double to time_t.
-
-2004-07-11 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/printf.c (vstrtold): Renamed from vstrtod.
- Now returns long double. All uses changed.
- (print_direc): Use "L" length modifier when printing floating point
- numbers, since we're now printing long double.
-
-2004-07-06 Paul Eggert <eggert@cs.ucla.edu>
-
- * Version 5.3.0.
-
- printf cleanup, to avoid undefined behavior, to add support for
- formats that Bash supports, and to support wide integers like
- Bash does.
-
- * NEWS: Document this.
- * src/printf.c (UNSPECIFIED): Remove. All uses now replaced by
- booleans, so that we don't reserve any values for precision or
- width (like Bash).
- (STRTOX): Use prototype, not K&R-style definition.
- (vstrtoimax): Renamed from xstrtol (to avoid confusion with xstrtol
- in ../lib), with type change to intmax_t.
- All uses changed.
- (vstrtoumax): Renamed from xstrtoul, with type change to uintmax_t.
- All uses changed.
- (vstrtod): Renamed from xstrtod. All uses changed.
- (print_direc): Use boolean arg instead of special value to indicate
- a missing precision or width. LENGTH no longer includes
- length modifiers or conversion character. New arg CONVERSION
- now specifies conversion character.
- Use intmax_t-width formatting for integers (like Bash).
- Add support for C99 %a, %A, %F (like Bash).
- Add support for field width with %c (POSIX requires this).
- Add a FIXME for lack of support for field width and precision
- for %b.
- Add support for '\'', '0' flags.
- Check for invalid combinations of flags, field width, precision,
- and conversion, to prevent use of undefined behavior.
- Allow multiple length modifiers, for formats like "%lld" (like Bash).
- Add support for C99 'j', 't', 'z' length modifiers (like Bash).
- In error message, output entire invalid conversion specification,
- instead of merely outputting % followed by the conversion char.
- * tests/misc/printf: Add tests for the above.
-
-2004-04-03 Dmitry V. Levin <ldv@altlinux.org>
-
- Change "readlink -f" to be more compatible with prior implementations.
- Add more canonicalize options, -e and -m.
- Add comprehensive tests for all readlink modes.
-
- * m4/canonicalize.m4 (AC_FUNC_CANONICALIZE_FILE_NAME):
- Do not add canonicalize.c here.
-
- * src/readlink.c (longopts): Add new options.
- (usage): Document them.
- (canonicalize_fname): New proxy function.
- (main): Handle new options.
- * doc/coreutils.texi (readlink invocation): Document new
- "readlink -f" behaviour and new canonicalize options, -e and -m.
-
- * configure.ac (AC_CONFIG_FILES): Add tests/readlink/Makefile.
- * tests/Makefile.am (SUBDIRS): Add readlink.
- * tests/readlink/Makefile.am: New file.
- * tests/readlink/{rl-1,can-e,can-f,can-m}: New readlink tests.
- * tests/misc/Makefile.am (TESTS): Remove basic readlink test.
- * tests/misc/readlink: Remove file.
-
-2004-07-04 Jim Meyering <jim@meyering.net>
-
- * src/copy.c (copy_internal): Add a FIXME comment.
-
-2004-07-02 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/copy.c (copy_dir): Assume path_concat returns non-NULL.
- * src/cp.c (do_copy): Likewise.
- * src/mv.c (movefile): Likewise.
-
- * src/cp.c (make_path_private): 2nd arg is now size_t, not int,
- to avoid problem when path_concat dir name is longer than 2 GiB (!).
-
- * src/nohup.c (main): Don't pass NULL first argument to path_concat.
- This cleans up the semantics a bit, as we no longer try to open the
- same file twice.
-
-2004-07-01 Paul Eggert <eggert@cs.ucla.edu>
-
- * NEWS: Add short names -t and -T for --target-directory
- and --no-target-directory options, respectively.
-
- * src/cp.c (NO_TARGET_DIRECTORY_OPTION, TARGET_DIRECTORY_OPTION):
- Remove. All uses changed to 'T' and 't', respectively.
- * src/install.c, src/ln.c, src/mv.c: Likewise.
-
- * src/cp.c (long_opts, usage, do_copy, main): Add -t and -T as
- aliases for --target-directory and --no-target-directory,
- respectively.
- * src/install.c (long_options, main, usage): Likewise.
- * src/ln.c, src/mv.c: Likewise.
-
-2004-07-01 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (sc_file_system): New target.
- (syntax-check-rules): Add it.
- .x-sc_file_system: New file.
- * Makefile.am (EXTRA_DIST): Add it.
-
- * man/sync.x: Use "file system" rather than "filesystem".
- * man/stat.x, man/df.x: Likewise.
-
-2004-06-30 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/df.c (usage, main): Output "file system" rather than
- "filesystem".
- * src/du.c (usage): Likewise.
- * src/shred.c (usage): Likewise.
- * src/stat.c (usage): Likewise.
- * src/stat.c (long_options, usage): Rename "--filesystem" to
- "--file-system". But keep the old name around, for compatibility
- reasons.
-
-2004-06-29 Paul Eggert <eggert@cs.ucla.edu>
-
- Add support for --no-target-directory option.
-
- * NEWS: Document it.
- * doc/coreutils.texi (Common options, Target directory, cp
- invocation, install invocation, mv invocation, ln invocation):
- Likewise.
- (link invocation): Explain how to rewrite link using ln now
- that we have --no-target-directory.
- (ln invocation): Explain that --no-target-directory subsumes
- --no-dereference.
- (unlink invocation): Modify wording to match new wording in
- link invocation.
-
- * src/cp.c (NO_TARGET_DIRECTORY_OPTION): New constant.
- (long_opts, usage, do_copy, main): Add support for
- --no-target-directory,
- * src/install.c (NO_TARGET_DIRECTORY_OPTION, long_options, main,
- usage): Likewise.
- * src/ln.c (NO_TARGET_DIRECTORY_OPTION, long_options, usage,
- main): Likewise.
- * src/mv.c (NO_TARGET_DIRECTORY_OPTION, long_options, usage,
- main): Likewise.
- * src/mv.c (enum): Sort values.
-
-2004-06-29 Jim Meyering <jim@meyering.net>
-
- Don't let verbose-mode output from a subshell obscure actual differences.
- * tests/rm/inaccessible: Turn off command-echoing just before
- invoking subshell, then turn it back on if VERBOSE=yes afterward.
-
-2004-06-25 Paul Eggert <eggert@cs.ucla.edu>
-
- Add support for 'install --target-directory', an option
- that has been documented for years but not implemented (!).
- * doc/coreutils.texi (install invocation): Document
- --target-directory in synopsis, too.
- * src/install.c (TARGET_DIRECTORY_OPTION): New var.
- (long_options, main, usage): Add --target-directory.
- (target_directory_operand): New function, stolen from mv.c.
- (main): Use it. Check for -d and --target-directory.
- Alter wording of diagnostics to match other programs.
-
-2004-06-28 Jim Meyering <jim@meyering.net>
-
- * src/cp.c (usage): Fix copy+paste error in description of
- --target-directory: s/move/copy/. From Paul Jarc.
-
-2004-06-27 Paul Eggert <eggert@cs.ucla.edu>
-
- Use more-consistent rules among cp, ln, and mv when dealing with
- last operands that are (or look like) directories.
-
- * src/cp.c (target_directory_operand): New, nearly-common function,
- It reports an error if the destination appears to be a directory
- (e.g., because it has a trailing slash) but is not.
- * src/ln.c, src/mv.c: Likewise.
- * src/cp.c (do_copy): Use it.
- * src/ln.c (main): Likewise.
- * src/mv.c (main): Likewise.
-
- * src/cp.c (do_copy): Don't assume argc is positive.
- Don't bother to lstat dest, since copy() will do that for us.
- Use "const" to avoid the need for cast.
-
- * src/cp.c (do_copy): Don't output a usage message because of file
- problems (e.g., an operand is not a directory). Use it only for
- syntax. Standardize on "target %s is not a directory" for the
- diagnostic.
- * src/ln.c (main): Likewise.
- * src/mv.c (main): Likewise.
-
- * src/cp.c (do_copy): Remove test for trailing slash, since
- target_directory_operand now does this.
- * src/ln.c (main): Likewise.
- * src/mv.c (movefile): Likewise.
-
- * src/cp.c (main): Reject multiple target directories.
- Check whether a specified target is a directory when parsing the
- options, using stat. This gives more-accurate diagnostics.
- * src/ln.c (main): Likewise.
-
- * src/ln.c (isdir): Remove decl; no longer needed.
- * src/mv.c (isdir, lstat): Likewise.
-
- * src/ln.c (do_link): New arg dest_is_dir. All uses changed.
- Don't check the destination ourself; rely on dest_is_dir.
- This way we can avoid lstatting the destination in the
- usual case, and in the worst case we lstat 1, not 3 times.
- Don't bother to unlink unless link failed; this saves a syscall.
- Remove unnecessary backup_succeeded flag;
- it was identical to "dest_backup != NULL".
-
- * src/ln.c (main): Use int to count to argc, not unsigned int.
- This handles negative operand counts.
- * src/mv.c (main): Likewise.
-
- * src/mv.c (do_move): Don't call hash_init; expect the caller to
- do it, for consistency with cp.c and ln.c. All callers changed.
- (movefile): dest_is_dir parameter is now bool, not int.
- (main): Standardize on "missing destination file operand after %s"
- for the diagnostic, for consistency with cp.c.
-
- * tests/mv/diag: Don't assume "mv --target=nonexistentdir"
- will complain about the arg count.
- Adjust to new (briefer) diagnostics.
- * tests/cp/fail-perm: Add a test to verify that we get the new
- diagnostic when failing to copy through a symlink-to-inaccessible-dir.
-
-2004-06-27 Paul Eggert <eggert@cs.ucla.edu>
-
- Fix a bug: formerly, if d/x was a directory and x a file, "ln x
- d/" incorrectly created a link d/x/x. It also saves some system
- calls.
-
- * NEWS: Document the fix.
-
- * src/ln.c (main): Don't append basename to dest if this
- results in an existing directory name.
- * tests/ln/misc: See whether a trailing slash is followed too far.
-
-2004-06-26 Jim Meyering <jim@meyering.net>
-
- * src/printf.c (main): When given no arguments, print the standard
- "missing operand\nTry printf --help..." message -- to be consistent.
-
-2004-06-26 Jim Meyering <jim@meyering.net>
-
- * src/mknod.c (main): Add \n at the end of message output via fprintf.
-
-2004-06-25 Jim Meyering <jim@meyering.net>
-
- * tests/ln/misc: Add test for ln subscript error.
-
-2004-06-23 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/ln.c (do_link): Remove unnecessary call to lstat.
- (main): Avoid subscript error when the destination is "".
-
-2004-06-23 Jim Meyering <jim@meyering.net>
-
- * tests/*: Replace all occurrences of `(exit N); exit' with
- `(exit N); exit N'. Otherwise, those many tests could exit with
- improper exit status when exiting via e.g., a trapped interrupt.
- Thanks to a report from Bob Proulx.
-
-2004-06-22 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/who.c (idle_string, print_user): New arg boottime,
- specifying the most recent boot time. All uses changed.
- (idle_string) Consider a line to be "old" if it hasn't been used
- since the last boot time. Watch out for overflow when computing
- times, and for times in the future.
- (idle_string): Record latest boot time.
-
-2004-06-22 Jim Meyering <jim@meyering.net>
-
- * src/test.c (usage): Correct description of `-t FD'. The file
- descriptor, FD, is no longer optional. Reported by Ton Nijkes.
-
-2004-06-21 Paul Eggert <eggert@cs.ucla.edu>
-
- The 2004-06-19 fix for who and pinky was incomplete, as ctime
- has undefined behavior if the year precedes -999 or follows 9999.
- Since we have to stop using ctime anyway, we might as well use
- strftime and fix the FIXME, and support internationalized dates.
-
- * NEWS: Document the new behavior.
- * src/who.c: Include "hard-locale.h".
- (time_format, time_format_width): New vars.
- (time_string, print_line): Use them.
- (main): Set them.
- (time_string): Use localtime + strftime instead of
- ctime, to avoid problems with years before -999 or after 9999.
- * src/pinky.c: Likewise.
-
-2004-06-21 Paul Eggert <eggert@cs.ucla.edu>
-
- Fix bug: GNU 'ls' didn't count columns correctly if user or group
- names contained multibyte characters where the column count
- differed from the byte count. This patch also corrects
- some comments.
-
- * src/ls.c (format_user_or_group): New function, which counts
- columns correctly.
- (format_user, format_group): Use it.
- (format_user_or_group_width): New function, which counts columns
- correctly.
- (format_user_width, format_group_width): Use it.
-
-2004-06-21 Jim Meyering <jim@meyering.net>
-
- * tests/priv-check: Quote "$PATH" in PATH=$PATH.
- Suggestion from Andreas Schwab.
-
- * tests/priv-check: When running as root, be sure to propagate
- PATH through to the process we exec as non-root.
- Reported by michael@aplatform.com.
-
- * src/mknod.c (main): Don't segfault when calculating the
- expected number of operands for `mknod NAME'.
-
-2004-06-20 Jim Meyering <jim@meyering.net>
-
- * src/dd.c (input_seek_errno): Declare file-scoped variable as static.
-
-2004-06-20 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/basename.c (main):
- Standardize on the diagnostics given when someone gives
- too few operands ("missing operand after `xxx'") or
- too many operands ("extra operand `xxx'").
- Include "quote.h" and/or "error.h" if it wasn't already being included.
- * src/chgrp.c (main): Likewise.
- * src/chmod.c (main): Likewise.
- * src/chown.c (main): Likewise.
- * src/chroot.c (main): Likewise.
- * src/comm.c (main): Likewise.
- * src/cp.c (do_copy): Likewise.
- * src/csplit.c (main): Likewise.
- * src/date.c (main): Likewise.
- * src/dircolors.c (main): Likewise.
- * src/dirname.c (main): Likewise.
- * src/du.c (main): Likewise.
- * src/expr.c (main): Likewise.
- * src/hostid.c (main): Likewise.
- * src/hostname.c (main): Likewise.
- * src/id.c (main): Likewise.
- * src/install.c (main): Likewise.
- * src/join.c (add_file_name, main): Likewise.
- * src/link.c (main): Likewise.
- * src/ln.c (main): Likewise.
- * src/logname.c (main): Likewise.
- * src/md5sum.c (main): Likewise.
- * src/mkdir.c (main): Likewise.
- * src/mkfifo.c (main): Likewise.
- * src/mknod.c (main): Likewise.
- * src/mv.c (main): Likewise.
- * src/nohup.c (main): Likewise.
- * src/od.c (main): Likewise.
- * src/pathchk.c (main): Likewise.
- * src/ptx.c (main): Likewise.
- * src/readlink.c (main): Likewise.
- * src/rm.c (main): Likewise.
- * src/rmdir.c (main): Likewise.
- * src/seq.c (main): Likewise.
- * src/setuidgid.c (main): Likewise.
- * src/shred.c (main): Likewise.
- * src/sleep.c (main): Likewise.
- * src/sort.c (main): Likewise.
- * src/split.c (main): Likewise.
- * src/stat.c (main): Likewise.
- * src/test.c (beyond, main): Likewise.
- * src/touch.c (main): Likewise.
- * src/tr.c (main): Likewise.
- * src/tsort.c (main): Likewise.
- * src/tty.c (main): Likewise.
- * src/uname.c (main): Likewise.
- * src/uniq.c (main): Likewise.
- * src/unlink.c (main): Likewise.
- * src/uptime.c (main): Likewise.
- * src/users.c (main): Likewise.
- * src/who.c (main): Likewise.
- * src/whoami.c (main): Likewise.
-
- * tests/basename/basic: Adjust to new diagnostics.
- * tests/du/files0-from: Likewise.
- * tests/expr/basic: Likewise.
- * tests/mv/diag: Likewise.
- * tests/tsort/basic-1: Likewise.
-
-2004-06-20 Jim Meyering <jim@meyering.net>
-
- * src/ln.c: Remove declaration of yesno.
- Instead, include yesno.h.
- * src/copy.c: Likewise.
-
- * src/remove.c: Remove declaration of yesno.
- Instead, include yesno.h.
- (top_dir): Remove now-unnecessary cast of obstack_base.
- (pop_dir): Likewise.
- (full_filename_): Likewise.
-
-2004-06-19 Paul Eggert <eggert@cs.ucla.edu>
-
- Don't dump core if ctime returns NULL; this is possible on
- hosts with 64-bit time_t and 32-bit int.
- * src/who.c: Include "inttostr.h".
- (time_string): If ctime fails, print the raw time as an integer
- instead of dumping core.
- * src/pinky.c: Likewise, as follows:
- Include "inttostr.h".
- (time_string): New function, copied from who.c.
- (print_entry): Use it.
-
-2004-06-19 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/who.c (print_line): Don't truncate user names at 8 bytes.
- Problem reported by Guido Leenders in:
- http://lists.gnu.org/archive/html/bug-coreutils/2004-06/msg00056.html
- * NEWS: document this.
-
-2004-06-19 Jim Meyering <jim@meyering.net>
-
- * src/system.h (case_GETOPT_VERSION_CHAR): Switch back to
- using GNU_PACKAGE (from PACKAGE) once again. This restores
- `GNU' to the parenthesized package name in --version output.
- Before, the first argument from AC_INIT, `GNU coreutils', would
- be propagated to the PACKAGE variable. Now, `GNU ' is trimmed.
- Reported by Richard Stallman.
-
-2004-06-17 Jim Meyering <jim@meyering.net>
-
- * src/tr.c (to_uchar): Rename function from `uchar'. The latter
- would clash with a typedef in Tru64's <sys/types.h>. From Albert Chin.
-
-2004-06-15 Paul Eggert <eggert@cs.ucla.edu>
-
- * NEWS: Remove more special cases for POSIXLY_CORRECT when POSIX
- allows the GNU behavior. "--" is now supported by chroot, hostid,
- hosname, pwd, sync, yes.
- * doc/coreutils.texi (yes invocation, false invocation,
- true invocation): Document this.
- * src/chroot.c (main): Handle "--".
- * src/hostid.c (main): Likewise.
- * src/hostname.c (main): Likewise.
- * src/pwd.c (main): Likewise.
- * src/sync.c (main): Likewise.
- * src/yes.c (main): Likewise.
- * src/true.c (main): Recognize --help and --version even if
- POSIXLY_CORRECT is set.
- * src/yes.c (main): Likewise.
-
-2004-06-09 Paul Eggert <eggert@cs.ucla.edu>
-
- * NEWS: Remove special cases for POSIXLY_CORRECT when POSIX allows
- the GNU behavior.
- * doc/coreutils.texi (pr invocation, unlink invocation): Document this.
- * src/ls.c (decode_switches): Pay attention to TABSIZE even if
- POSIXLY_CORRECT is set. POSIX reserves upper-case environment
- variables to the implementation, so it's OK for ls to depend on
- TABSIZE.
- * src/pr.c: Include "hard-locale.h".
- (main): When in a non-POSIX locale, ignore POSIXLY_CORRECT, since
- POSIX specifies the behavior only in the POSIX locale.
- * src/printf.c (print_esc): Support \x, \u, \U even if POSIXLY_CORRECT,
- since POSIX says the behavior is unspecified here.
- * src/tail.c (parse_obsolescent_option): Support multiple file operands
- even if POSIXLY_CORRECT, since POSIX does not require a diagnostic.
- * src/printf.c (main): Recognize --help, --version even if
- POSIXLY_CORRECT. POSIX does not specify any options, but it
- does not prohibit options either, so "printf" is like "expr" here.
- * src/unlink.c (main): Likewise.
- * tests/misc/printf: Adjust to the new semantics for \x if
- POSIXLY_CORRECT.
-
-2004-06-14 Jim Meyering <jim@meyering.net>
-
- * tests/misc/pwd: New test, for fix of 2004-04-19.
- * tests/misc/Makefile.am (TESTS): Add pwd.
- (BUILD_SRC_DIR): Define BUILD_SRC_DIR.
-
- * src/copy.c: Remove declaration of euidaccess.
- Instead, include "euidaccess.h".
-
-2004-06-13 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/who.c (PIDSTR_DECL_AND_INIT): Don't assume pid_t fits in int.
- (UT_ID) [!HAVE_STRUCT_XTMP_UT_ID]: Remove bogus comment,
- as (sizeof "??") reliably returns 3.
- (print_line): Guard against idle and pid being too long
- (which is possible when printing headers).
- (print_user): Allocate enough bytes for idlestr. Use IDLESTR_LEN.
- Avoid unnecessary cast of sizeof to int.
- (make_id_equals_comment): Do not assume that UT_ID returns
- a string; it might return a non-null-terminated array.
- Use strncat instead. It's not very often where strncat is
- exactly what you want, but this is one of those rare cases.
-
-2004-06-11 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/who.c (list_entries_who): Don't output a trailing space.
-
-2004-06-09 Jim Meyering <jim@meyering.net>
-
- * src/touch.c (usage): Improve wording in description of the
- --time=WORD option. Reported by Dan Jacobson.
-
- * src/chown-core.c (change_file_owner): Change names of parameters
- old_uid and old_gid to required_uid and required_gid respectively.
-
- * src/chmod.c (mode_changed): Return false, not 0, now that the
- function returns `bool'.
-
-2004-06-08 Paul Eggert <eggert@cs.ucla.edu>
-
- Adjust chmod and chown to be similar if -c or -v are given. In
- particular, a no-op chown is no longer reported as a change; this
- reverts to previous behavior. Also, fix both commands so that -v
- report failures even if the failure is not due to the chmod or
- chown syscalls.
-
- * src/chmod.c (CH_NOT_APPLIED): New constant.
- (describe_change): Handle it.
- (process_file): Use it, if a symlink wasn't changed.
- (mode_changed): Return bool, not int. Accept new argument
- NEW_MODE; all callers changed. This lets us avoid statting the
- file unless the new mode has unusual bits.
- (process_file): Return -1 on error. With -v, report all errors
- verbosely, not just some.
-
- * src/chown-core.c (change_file_owner): Return -1 on error, not
- 1 sometimes and -1 on others. Our caller ORs together our results,
- and (-1 | 1) == 0 on ones-complement hosts.
- With -v report all errors verbosely, not just some.
- Fix bug when chopt->root_dev_ino && !chopt->affect_symlink_referent:
- file_stats wasn't set properly in that case.
-
- * tests/chgrp/basic: Adjust to above changes.
-
-2004-05-20 Paul Eggert <eggert@cs.ucla.edu>
-
- * tests/chgrp/basic: Test that chgrp -h does not fail on
- symlinks, even on hosts where that's not supported.
- Test that if -R is specified without -H or L, -h is assumed.
- Test that chown() is not optimized away.
-
-2004-05-18 Paul Eggert <eggert@cs.ucla.edu>
-
- Several fixes to chgrp and chown for compatibility with POSIX and BSD:
-
- Check for incompatible options. When -R and --dereference are
- both used, then either -H or -L must also be used. When -R and -h
- are both used, then -P must be in effect.
-
- -H, -L, and -P have no effect unless -R is also specified.
- If -P and -R are both specified, -h is assumed.
-
- Do not optimize away the chown() system call when the file's owner
- and group already have the desired value. This optimization was
- incorrect, as it failed to updated the last-changed time and reset
- special permission bits, as POSIX requires.
-
- Do not report an error if the owner or group of a
- recursively-encountered symbolic link cannot be updated because
- the file system does not support it.
-
- * NEWS: Document the above.
-
- * src/chgrp.c (main): Check for incompatible options. -R --dereference
- requires either -H or -L, and -R -h requires -P. If -H, specify
- FTS_PHYSICAL as well as FTS_COMFOLLOW; this is faster. Make this
- file as much like chown.c as possible.
- * src/chown.c (main): Likewise.
-
- * src/chown-core.c (change_file_owner): Use ent->fts_statp only if
- needed. Chown a directory only after chowning its children; this
- avoids problems if the new directory ownership doesn't permit
- access to the children. Dereference symlinks before doing
- ROOT_DEV_INO_CHECK, not after, so that we catch symlinks to /.
- Do not optimize away the chown() system call when the file's owner
- and group already have the desired value. POSIX does not permit
- this optimization. Rely on chown and lchown to do the right
- thing with symlinks and/or -1 arguments, now that we have wrappers
- to do this. Use ENOTSUPP not ENOSYS, and ignore all ENOTSUPP
- errors, not just command-line errors.
- (chown_files): Pass FTS_NOSTAT to xfts_open if we don't need file status.
-
- * src/system.h (ENOTSUP): Remove.
-
- * tests/chgrp/basic: Use chown --from to discover whether the
- group changed, since chgrp now changes unconditionally. This
- complicates the sed script a bit. Do not specify --dereference,
- since it's the default (and we want to test this). Adjust output
- to match the fact that chgrp no longer optimizes the case of
- changing a file's group to the same value as before.
- * tests/chgrp/posix-H: Do not attempt to combine -h and -H; these
- options are incompatible, and their behavior is undefined with POSIX.
- (changed, not_changed): Adjust to match the fact that -h is no longer
- specified. Sort names.
- * tests/chown/deref: Adjust error-diagnostic spelling to match new
- behavior.
-
-2004-06-07 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/uname.c (main): Fix typo introduced on 2003-05-10 that
- prevented a diagnostic of any operands.
-
-2004-06-08 Jim Meyering <jim@meyering.net>
-
- * src/shred.c (direct_mode): Turn it on/off with directio, too.
-
-2004-06-07 Jim Meyering <jim@meyering.net>
-
- Enable direct-mode I/O (bypassing the buffer cache), if possible.
- Prompted by a suggestion from Kalle Olavi Niemitalo
- in http://bugs.debian.org/207035.
- * src/shred.c (direct_mode): New function.
- (do_wipefd): Turn on direct-mode I/O.
- (dopass): If a file's first write fails with EINVAL,
- turn off direct-mode I/O and retry the write.
-
-2004-06-05 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/tr.c (main): "tr -d a b" is now a fatal error even if
- POSIXLY_CORRECT is set. The POSIX SYNOPSIS does not allow this
- option combination.
-
-2004-06-04 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/shred.c (dopass): Don't subtract 1 from the offset after
- a write error. Problem reported by Jon Peatfield in:
- http://lists.gnu.org/archive/html/bug-coreutils/2004-06/msg00020.html
-
-2004-06-02 Paul Eggert <eggert@cs.ucla.edu>
-
- Fix bug reported by Buciuman Adrian in
- <http://mail.gnu.org/archive/html/bug-coreutils/2003-08/msg00105.html>
- where 'dd' created a file that was too large. The bug was that dd
- assumed that the input file offset does not advance after a failed
- read; but POSIX says that the input file offset is undefined after
- a failed read.
-
- * src/dd.c (MAX_BLOCKSIZE): New macro.
- (input_seekable, input_seek_errno, input_offset,
- input_offset_overflow): New vars.
- (scanargs): Reject block sizes greater than MAX_BLOCKSIZE.
- (advance_input_offset): New function.
- (skip_via_lseek): Set errno to zero when reporting our failure,
- so that we don't report based on garbage errno.
- (skip): If fdesc is standard input, advance the input offset.
- Do not quit if reading, and if noerror was specified;
- POSIX seems to require this.
- If read fails on output file, report the earlier lseek failure
- instead; this fixes a FIXME in dd_copy.
- (advance_input_after_read_error): New function.
- (dd_copy): Use it, instead of assuming that failed reads
- do not advance the file pointer. Advance input offset
- after nonfailed reads. Advance only a partial block if
- the previous read (before the failed read) succeeded, and
- do not generate an output block of zeros in this case.
- (main): Determine initial input offset, seekability of input,
- and error if it wasn't seekable.
-
-2004-06-02 Jim Meyering <jim@meyering.net>
-
- rm (without -f) could hang unnecessarily when attempting to
- remove a symlink to a file on an off-line NFS-mounted partition.
- Reported by David Howells in https://bugzilla.redhat.com/124699.
- * src/remove.c (write_protected_non_symlink): New function.
- Don't invoke euidaccess on symlinks.
- (prompt): Use write_protected_non_symlink rather than using
- euidaccess directly, being careful not to call lstat twice for a file.
-
- Fix a bug in how the --output-delimiter=D option works with
- abutting byte or character ranges. Reported by David Krider in
- http://lists.gnu.org/archive/html/bug-coreutils/2004-05/msg00132.html
- * src/cut.c (print_kth): Remove special case for open-ended range.
- (set_fields): Record the range start index for an interval even
- when it abuts another interval on its low side.
- Also record the range start index of the longest right-open-interval.
- * tests/cut/Test.pm: Add tests of --output-delimiter=S with
- abutting and overlapping byte ranges.
-
-2004-06-01 Paul Eggert <eggert@cs.ucla.edu>
-
- Some POSIX-conformance cleanups for tr.
-
- * src/tr.c (posix_pedantic): Remove; no longer needed since
- we need to test this in just one place now.
- (usage): Mention -C.
- (unquote): Note that \055, \n, etc are escaped.
- Do not worry about POSIXLY_CORRECT when warning about ambiguous
- escape sequences.
- \ at end of string stands for itself.
- Do not diagnose invalid backslash escapes: POSIX says the behavior
- is unspecified in this case, so we don't need to diagnose it.
- (main): Add support for -C (currently an alias for -c).
- Do not diagnose 'tr [:upper:] [:upper:], as POSIX does not require
- a diagnostic here.
- * tests/tr/Test.pm: New tests bs-055, bs-at-end, repeat-Compl.
- Fix comment for range-a-a.
-
-2004-05-25 Paul Eggert <eggert@cs.ucla.edu>
-
- Improve the efficiency (and in one case, correctness) of code
- that reads symlinks.
-
- * src/copy.c (copy_internal): Don't use alloca, as it can mess up
- royally if the link length is long (e.g., GNU/Hurd). Use
- xreadlink instead, it's safer. Don't bother to read the link if
- it's the wrong size. Add a FIXME because this area is a bit murky
- and undocumented.
- * src/ls.c (get_link_name): Update use of xreadlink.
- * src/readlink.c (main): Likewise.
- * src/stat.c (print_stat): Likewise.
-
-2004-06-01 Jim Meyering <jim@meyering.net>
-
- * src/env.c (main): Prefer the notation `STREQ (a, b)'
- over `!strcmp (a, b)'.
- * src/sort.c (main, sort_buffer_size): Prefer the notation
- `STREQ (a, b)' over `strcmp (a, b) == 0'.
- * src/date.c (batch_convert): Likewise.
- * src/expr.c (nextarg): Likewise.
- * src/su.c (correct_password, restricted_shell, main): Likewise.
- * src/ptx.c (swallow_file_in_memory, main): Likewise.
- * src/test.c (binary_operator, and, or, main): Likewise.
-
-2004-05-13 Paul Eggert <eggert@cs.ucla.edu>
-
- * NEWS: echo compatibility cleanup.
- * doc/coreutils.texi (echo invocation): Document the changes.
- * src/echo.c (V9_ECHO): Remove; always enabled.
- (DEFAULT_ECHO_TO_XPG): Renamed from V9_DEFAULT, so that
- we use the same naming convention as bash. Now an enum,
- not a macro.
- (usage): Reword to mention -e/-E more accurately.
- Mention \0NNN (the POSIX syntax) rather than \NNN (nonstandard).
- (hextobin): New function.
- (main): Use bool rather than int for local vars when appropriate.
- Do not allow options if POSIXLY_CORRECT, unless we are using
- BSD semantics and the first argument is "-n".
- Don't pass unnecessary extra arg to parse_long_options.
- do_v9 now defaults to DEFAULT_ECHO_TO_XPG, not to allow_options.
- Do not look for options if !allow_options.
- Use size_t rather than int when appropriate.
- Open-code option test rather than using strrchr.
- Use faster test for "-".
- Avoid redundant argc test.
- Add support for \x, for Bash compatibility.
- Use e.g. '\a' rather than '\007', for portability to EBCDIC hosts.
- When '\c' is encountered, stop printing immediately, as POSIX
- requires.
- Add support for \xhh syntax.
- Add support for \0ooo syntax; POSIX requires this.
-
-2004-06-01 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.8b. Regenerate dependent files.
-
-2004-05-31 Jim Meyering <jim@meyering.net>
-
- * tests/Makefile.am.in (TESTS_ENVIRONMENT): Define PATH to include
- the build src/ directory -- at the front.
- ($(srcdir)/$x-tests): Depend on Makefile.am.
- Use $x as the program name, except when it would be `test' (test is
- the sole program tested via mk-script that is also a shell built-in).
- In that case, use the old ../../src/$x.
-
-2004-05-30 Jim Meyering <jim@meyering.net>
-
- Work around HPUX /bin/cc compiler bug that is exposed, now that
- sets are arrays of type `bool'. More details here:
- http://lists.gnu.org/archive/html/bug-gnulib/2004-05/msg00094.html
- FIXME: verify that the above URL points to the right message
-
- * src/tr.c (card_of_complement): Use cleaner `sizeof in_set'
- rather than `N_CHARS * sizeof(in_set[0])'. Using HPUX's /bin/cc
- (aC++/ANSI C B3910B A.05.55 [Dec 04 2003]) on an ia64-hp-hpux11.22
- system, those two expressions are not the same (256 vs. 1024).
- The effect of this problem was that `tr -c x y' would fail:
- tr: when not truncating set1, string2 must be non-empty
- (set_initialize): Remove unnecessary initialization of the `in_set'
- buffer; that initialization triggered the same compiler bug as above.
-
-2004-05-29 Paul Eggert <eggert@cs.ucla.edu>
-
- tr cleanup, mostly having to do with integer type ranges.
- Remove all casts.
-
- * tests/tr/Test.pm: Add a few tests for the below. Alas, most of
- the test cases wouldn't be portable, or would take too much CPU
- time, or both.
-
- * src/tr.c (N_CHARS, N_CHAR_CLASSES): Now an enum, not a macro.
- This is safe since the code already assumes N_CHARS fits in int.
- (Filter): Remove: we want to prototype everything.
- (ORD, CHR): Remove. All uses removed. Some replaced with:
- (uchar): New function. All places where a char must be converted
- to an unsigned char are now done this way, not by ad-hoc methods.
- (count): New type. Use it whenever counts or states are needed.
- (BEGIN_STATE): Increase from INT_MAX - 1 (which was bogus, anyway,
- since we used it in an unsigned int context) to UINTMAX_MAX - 1.
- (REPEAT_COUNT_MAXIMUM): New macro. Use it in place of BEGIN_STATE
- whenever appropriate.
- (NOT_A_CHAR): Remove global macro; now a local enum.
- (UL_LOWER, UL_UPPER, UL_NONE): No longer specify values, since
- the rest of the code no longer depends on them.
- (class_ok): Remove; all uses changed to use inline comparisons.
- (RE_NO_TYPE): Remove; wasn't used or needed.
- (struct List_element): normal_char and equiv_code are now unsigned
- char, not int.
- first_char, last_char, and the_repeated_char are now unsigned char,
- not unsigned int. repeat_count is now count, not size_t.
- All uses changed.
- (struct Spec_list): state is now count, not unsigned int.
- lengthis now count, not size_t.
- n_indefinite_repeats is now size_t, not int.
- has_equiv_class, has_char_class, and has_restricted_char_class
- are now bool, not int. All uses changed.
- (struct E_string): s is now char *, not unsigned char *.
- escaped is now bool *, not int *. All uses changed.
- (ES_MATCH): Remove macro, replacing with:
- (es_match): New inline function. All uses changed.
- (squeeze_repeats, complement, posix_pedantic, truncate_set1,
- translating): Now bool, not int.
- (io_buf): Now char array, not unsigned char.
- (SET_TYPE): Remove. All uses replaced with bool.
- (is_equiv_class_member, unquote, append_range, append_char_class,
- append_equiv_class, find_closing_delim, star_digits_closebracket,
- build_spec_list, parse_str, homogeneous_spec_list):
- Now returns bool, not int. All uses changed.
- (is_equiv_class_member): Now inline.
- (is_equiv_class_member, is_char_class_member, make_printable_str,
- append_normal_char, append_range, append_repeated_char,
- get_s2_spec_stats):
- Args are now of proper integer type.
- (unquote, look_up_char_class, make_printable_str,
- append_equiv_class, build_spec_list, squeeze_filter):
- Avoid unsigned char *p; gently convert *p to unsigned char instead.
- (unquote, get_spec_stats): Do not jump past declarations and then
- use them; C doesn't allow this in portable programs.
- (make_printable_str): Check for overflow in size calculations.
- (xmemdup): Remove. All uses rewritten.
- (find_bracketed_repeat): Args are now of proper pointer-to-integer
- type. Do not reject [c*0]. Use xstrtoumax, not xstrtoul.
- (find_bracketed_repeat, star_digits_closebracket): Check that the
- digits are not escaped.
- (build_spec_list): Don't bother to copy opnd_str; not needed.
- (build_spec_list, get_next): Simplify internal logic a bit.
- (card_of_complement): Fix bug due to char overflow.
- (get_spec_stats): Don't assume len fits into int.
- Check for integer overflow. Use abort() rather than assert(0).
- (string2_extend): Fix subscript error: is_char_class_member (..., 255)
- was being invoked.
- (squeeze_filter): READER is never null now; simplify code.
- READER arg now has a simpler type. Remove unnecessary casts.
- (squeeze_filter, main): Calls to fwrite improperly checked result
- against zero, rather than against requested size.
- (plain_read): New function.
- (read_and_delete, read_and_xlate):
- Remove unused filter arg, and don't worry about hit_eof.
- Simplify by using plain_read.
- (set_initialize): Args are bool and bool *, not int and SET_TYPE *.
- (main): Always pass a non-null procedure to squeeze_filter.
- Rewrite so that class_ok isn't needed.
-
-2004-05-29 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/shred.c (dosync): Ignore EBADF errors, as IRIX 6.5
- fdatasync reports EBADF when syncing (unwritable) directories.
- Problem reported by Albert Chin-A-Young in:
- http://lists.gnu.org/archive/html/bug-coreutils/2004-05/msg00165.html
-
-2004-05-29 Jim Meyering <jim@meyering.net>
-
- * tests/chown/deref: Fix typo: use ls -ldo, not ls -ldg.
- Patch from Albert Chin.
-
- * src/ptx.c (text_buffer_maxend): Remove declaration of unused variable.
-
- * src/remove.c (push_dir): Merge declaration and adjacent assignment
- into a single statement.
-
-2004-05-28 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (AD_mark_helper): Eliminate an unnecessary comparison.
-
-2004-05-22 Jim Meyering <jim@meyering.net>
-
- rm -r would get a failed assertion when run from an inaccessible
- directory and with two or more command line arguments including an
- absolute-named directory followed by a relative-named directory.
-
- * src/remove.h (struct rm_options) [require_restore_cwd]: New member.
- * src/remove.c (struct cwd_state): Define.
- (AD_pop_and_chdir): Redesign interface so that a restore_cwd failure
- can be detected by the caller. Instead of returning a malloc'd
- directory name, communicate it to caller via a new parameter, and
- return an indication of whether restore_cwd failed. Update caller.
- Eliminate an unnecessary call to AC_stack_top.
- (remove_dir): Change type of cwd_state parameter to `struct cwd_state'
- so we can now communicate to caller whether/how functions like
- restore_cwd have failed. Update caller.
- (rm_1): Fail if we've failed to restore the working directory
- and the name of the next file to remove is `.'-relative.
- (rm): Fail if the require_restore_cwd flag is true and we've
- failed to restore the working directory.
- * src/mv.c (rm_option_init): Initialize new member,
- x->require_restore_cwd.
- * src/rm.c (rm_option_init): Likewise.
-
-2004-05-21 Jim Meyering <jim@meyering.net>
-
- * tests/rm/inaccessible: New test for the above fix.
- * tests/rm/Makefile.am (TESTS): Add inaccessible.
-
- * src/remove.c (rm): Use free rather than XFREE.
- (remove_dir): Use xmalloc, not XMALLOC.
- (ds_init): Likewise.
-
-2004-05-20 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (sc_unmarked_diagnostics): Now that the unmarked
- diagnostics in shred.c have been fixed, don't exempt shred.c from
- this check.
-
- * src/shred.c: Use translatable diagnostics, e.g.
- change "%s: remove" to _("%s: failed to remove") and
- change "%s: close" to _("%s: failed to close").
-
-2004-05-17 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/shred.c (names): Bring back lower-case letters, "_", and
- ".". But continue to omit +, =, %, @, #, as they're either
- shell metacharacters (for some shells) or are not in some
- character sets, or (in the case of '%') must be a
- metacharacter somewhere.
-
-2004-05-16 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/cut.c (cut_fields): Adjust to new signature of getndelim2.
-
-2004-05-17 Jim Meyering <jim@meyering.net>
-
- * src/shred.c (incname): Decrement `len' only once per loop iteration.
-
- chgrp and chown now dereference symlinks by default, per POSIX.
- Reported by Michal Politowski as http://bugs.debian.org/249177.
-
- * src/chown-core.c (chopt_init): Affect each symlink referent by default.
- * src/chown.c (usage): Update to reflect this.
- * src/chgrp.c (usage): Likewise.
- * NEWS: Describe the change.
- Adapt tests accordingly.
- * tests/chgrp/basic: Use -h where necessary to retain semantics.
- * tests/chgrp/deref: Likewise.
- * tests/chgrp/posix-H: Likewise.
-
-2004-05-15 Paul Eggert <eggert@cs.ucla.edu>
-
- In shred, check for errors from fdatasync more carefully. If
- fdatasync fails with errno==EINVAL, it means this implementation
- does not support synchronized I/O for this file. Do not report
- this as an error, as (for example) AIX 5.2 fdatasync reports it
- for raw disk devices. Problem reported by Albert Chin in
- <http://mail.gnu.org/archive/html/bug-gnu-utils/2004-05/msg00028.html>.
-
- Check for write errors, though: the old code ignored them.
- Improve error checking in a few other cases, too (e.g., close of a
- directory).
-
- Also, change several 'int' values to 'bool', so that the error
- checking is a bit clearer. Similarly, change unsigned values
- to size_t where appropriate.
-
- * src/shred.c: Include "dirname.h".
- (datasync) [!HAVE_FDATASYNC]: Remove.
- (dosync): New function.
- (dopass): Use it. Return 1 on write error, -1 on other error.
- All callers changed. Report write error if dosync does.
- (do_wipefd, wipefd, wipename, wipefile): Return bool (true/false),
- not int (0/-1). All callers changed. Return false if there's a
- write error.
- (incname): Return bool (true/false), not int (0/1). Accept
- size_t length, not unsigned. All callers changed. Do not
- bother checking for non-digits; it can't happen. Replace
- recursion with iteration.
- (wipename): Use dir_name, base_name, etc. instead of assuming
- Unix file names. Use size_t for length, not unsigned.
- Report error if unlink or close fails.
- (wipename, main): Use bool for booleans.
-
- (names): Use only digits and uppercase letters, for greater
- portability.
-
-2004-05-16 Jim Meyering <jim@meyering.net>
-
- * tests/chown/deref: New test for the yesterday's change.
- * tests/chown/Makefile.am (TESTS): Add deref.
-
-2004-05-15 Jim Meyering <jim@meyering.net>
-
- chown --dereference did nothing when the owner/group of a
- symlink matched the desired owner/group. Reported by David Malone.
- Also reported in 1999 as http://bugs.debian.org/39642.
-
- * src/chown-core.c (change_file_owner): When --dereference has
- been specified, and when processing a symlink, stat it to get the
- owner and group of the referent.
-
-2004-05-14 Jim Meyering <jim@meyering.net>
-
- * man/pwd.x, man/echo.x, man/printf.x: Fix typo:
- s/supercede/supersede/ reported by Andrew Fabbro.
-
-2004-05-13 Paul Eggert <eggert@cs.ucla.edu>
-
- Improve performance of `sort -m' on large files, at the cost of
- making some contrived examples unsafe. POSIX allows this
- optimization. Performance problem reported by Jonathan Baker in
- <http://mail.gnu.org/archive/html/bug-coreutils/2004-05/msg00071.html>.
-
- * src/sort.c (first_same_file): Do not treat input pipes
- differently from other files.
- * doc/coreutils.texi (sort invocation): Document that "sort -m -o F"
- might write F before reading all the input.
- * NEWS: Likewise.
-
-2004-05-12 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/od.c (print_ascii, dump_strings): Use e.g. '\a' rather than
- '\007', for portability to EBCDIC hosts.
- * src/printf.c (print_esc_char): Likewise.
- * src/tr.c (unquote, make_printable_str): Likewise.
-
-2004-05-12 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (AD_pop_and_chdir): Move lstat-`.' into if-block
- where the result is used. This avoids one unnecessary lstat call
- per command line argument.
-
-2004-05-12 Paul Eggert <eggert@cs.ucla.edu>
-
- Don't assume that "make -C" works; Solaris "make" doesn't have -C.
-
- * src/Makefile.am (all_programs.list): New rule, copied from
- man/Makefile.am and tests/Makefile.am, except that we use the
- system tr rather than ./tr and we don't use tr -s.
- * tests/Makefile.am (all_programs): Use it.
- * man/Makefile.am (all_programs): Likewise. Renamed from programs,
- for consistency. All uses changed.
-
-2004-05-11 Jim Meyering <jim@meyering.net>
-
- * tests/rm/unread3: New test, for the above fix and today's
- lib/save-cwd.c improvement.
- * tests/rm/Makefile.am (TESTS): Add unread3.
-
- * src/rm.c: Don't include "save-cwd.h". It's no longer used.
-
-2004-05-10 Jim Meyering <jim@meyering.net>
-
- * tests/install/trap: New file. Test for bug fix of 2004-04-18.
- * tests/install/Makefile.am (TESTS): Add trap.
-
- * src/remove.c (AD_push): Don't use errno in diagnostic about
- `changed dev/ino'.
-
- Remove these generated files from CVS.
- * tests/cut/cut-tests, tests/date/date-tests, tests/join/join-tests:
- * tests/ls/ls-tests, tests/pr/pr-tests, tests/tac/tac-tests:
- * tests/tail/tail-tests, tests/test/test-tests, tests/tr/range-tests:
- * tests/tr/tr-tests, tests/wc/wc-tests:
-
-2004-05-09 Jim Meyering <jim@meyering.net>
-
- * src/tr.c (unquote): Use xcalloc rather than xmalloc and
- a loop initializing the just-allocated memory to zero.
-
-2004-05-08 Jim Meyering <jim@meyering.net>
-
- * tests/rm/no-give-up: New file; check for today's fix.
- * tests/rm/Makefile.am (TESTS): Add no-give-up.
-
-2004-05-08 Paul Eggert <eggert@cs.ucla.edu>
-
- Fix bug where "rm" gave up too easily, reported by Dan Jacobsen in
- <http://mail.gnu.org/archive/html/bug-coreutils/2004-05/msg00013.html>.
-
- * src/remove.c (remove_entry): Check for errno values like ENOENT
- that show the file cannot be directory, instead of for errno
- values like EPERM that show the file might be a directory. This
- is necessary because, when a single unlink() call has multiple
- reasons to fail, it can set errno to any of those reasons; it's
- only the rare errno value like ENOENT that excludes all the other
- possible reasons to fail even when the file is a directory.
- (remove_cwd_entries): Don't attempt chdir if the file is known
- to not be a directory.
- (remove_dir): Use the same method that remove_cwd_entries uses
- (for some reason they differed). Don't assert that saved_errno
- must be EPERM; it might be just about anything.
-
-2004-05-06 Jim Meyering <jim@meyering.net>
-
- * src/id.c (xgetgroups): Use xnmalloc, rather than xmalloc.
- Don't add `1' to the buffer size (it was to protect against malloc
- implementations that fail to allocate a buffer of size zero).
- That is no longer necessary, since we use a malloc wrapper
- on such systems.
-
- * src/wc.c (get_input_fstatus): Use xnmalloc, rather than xmalloc.
- * src/head.c (elide_tail_bytes_pipe): Likewise.
- * src/df.c (main): Likewise.
- * src/shred.c (do_wipefd): Likewise.
- * src/users.c (list_entries_users): Likewise.
- * src/tail.c (main): Likewise.
- * src/md5sum.c (main): Likewise.
-
-2004-04-29 Paul Eggert <eggert@cs.ucla.edu>
-
- * src/df.c (show_disk, show_point): If several filesystems are
- mounted on the same mount point, prefer the last one, not the first.
- Problem reported by Christian Jones in
- <http://mail.gnu.org/archive/html/bug-coreutils/2004-04/msg00200.html>.
- (show_disk): Remove unused statp arg. Return bool, not int.
- (show_point): Rewrite to avoid gotos. Use the same algorithm
- for lofs and dummies for each pass through the mount table,
- rather than subtly different algorithms (which are probably
- inadvertent).
-
-2004-05-03 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (EXTRA_DIST): Add m4/ChangeLog, now that we no longer
- have m4/Makefile*.
-
-2004-05-01 Jim Meyering <jim@meyering.net>
-
- When chown or chgrp is modifying the referent of a symlink,
- use the chown(2) function, if possible.
- * src/chown-core.c (change_file_owner): Don't hard-code the
- open/fchown/close kludge here. Use `chown' instead.
- The chown function works just fine on conforming systems.
- Other systems now go through the new chown wrapper that
- resorts to the old kludge.
-
- * src/chown-core.c (change_file_owner): Add a comment.
-
-2004-04-27 Jim Meyering <jim@meyering.net>
-
- * src/ptx.c: Make over 40 global extern variables `static'.
- (syntax_table, re_syntax_table): Remove declarations of two unused
- variables (they were exposed by the above change).
-
- * src/du.c (G_fail, opt_nul_terminate_output): Declare `static'.
- * src/ln.c (backup_type): Likewise.
-
- * src/remove.c (rm): Add `extern' keyword.
- * src/cp-hash.c (forget_created, remember_created)
- (src_to_dest_lookup, remember_copied, hash_init, forget_all): Likewise.
- * src/copy.c (dest_info_init, src_info_init, copy): Likewise.
- * src/chown-core.c (chopt_init, chopt_free, gid_to_name)
- (uid_to_name, chown_files): Likewise.
-
- * src/Makefile.am (sc_tight_scope): New rule.
- * Makefile.maint (sc_tight_scope): New rule.
- (syntax-check-rules): Add it.
-
-2004-04-26 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.8.4. Regenerate dependent files.
-
- * src/sort.c (limfield): Make a comment clearer.
-
-2004-04-25 Paul Eggert <eggert@twinsun.com>
-
- Fix POSIX-conformance bug: "sort -k 3,3.5b" is supposed to skip
- leading blanks when computing the location of the field end;
- it is not supposed to skip trailing blanks. Solaris 8 "sort"
- does conform to POSIX. Also fix the documentation to clarify
- this and related issues.
-
- * doc/coreutils.texi (sort invocation): Mention -k earlier, so
- that the options are in alphabetical order. Describe how -b works
- more-accurately; this involves fixing some examples, too. Mention
- what happens if the start field falls after an end field or after
- a line end. Warn about using -k without -b, -g, -M, -n, or -t.
- Add an example of how to sort IPv4 addresses and Apache Common
- Log Format dates. Remove a duplicate example.
- (Putting the tools together): Use separate options rather
- than agglomerating them.
- * src/sort.c (limfield): Use skipeblanks, not skipsblanks, to
- decode whether to skip leading blanks.
- (trailing_blanks): Remove.
- (fillbuf, getmonth, keycompare): Don't trim trailing blanks.
-
- * tests/pr/Test.pm: Fix typo in env_default comment.
- * tests/sort/Test.pm: Likewise.
- (18c, 18d): Reverse the order of output lines, so that the
- test cases conform to POSIX.
-
-2004-04-22 Paul Eggert <eggert@twinsun.com>
-
- More signal-handling cleanup for ls.c. Do not allow signals to
- happen between arbitrary output bytes, as the
- restore-default-color sequence can bollix up multibyte chars or
- color-change sequences in the ordinary output. Instead, process
- signals only between printing a file name and changing the color
- back to non_filename_text color. That way, if the signal handler
- changes the color (to the default), 'ls' will change it back when
- 'ls' continues (after being suspended).
-
- Also, do not bother with signal-handling unless stdout is a
- controlling terminal; this lets stdio buffer better when "ls
- --color" is piped or sent to a file.
-
- * src/ls.c (sigprocmask, sigset_t) [!defined SA_NOCLDSTOP]: New macros.
- Do not include "full-write.h"; no longer needed.
- (tcgetpgrp) [! HAVE_TCGETPGRP]: New macro.
- (put_indicator_direct): Remove. All callers changed to use
- put_indicator.
- (caught_signals, interrupt_signal, stop_signal_count): New vars.
- (restore_default_color): Don't bother checking for put_indicator
- failure.
- (sighandler): Don't handle SIGTSTP; that's another handler now.
- Simply set interrupt_signal to the signal, then exit.
- (stophandler, process_signals): New functions.
- (main): Don't output any color changes until _after_ the signal
- handlers are set up. This fixes a race condition where 'ls'
- could be interrupted while initializing colors, and leaving the
- terminal in an undesirable state.
- Don't mess with signal-handling if standard output is not a
- controlling terminal.
- When exiting, restore the default color, then restore the
- default signal handling, then act on any signals that weren't
- acted on yet.
- Do not print //DIRED// etc. in colors; this avoids the need
- to catch signals when printing them.
- (print_name_with_quoting): Process signals just before switching
- color back to non_filename_text.
-
-2004-04-23 Jim Meyering <jim@meyering.net>
-
- Avoid segfault on systems for which SIZE_MAX != (size_t) -1.
- * src/ls.c (quote_name): Use SIZE_MAX, not -1, in calls
- of quotearg_buffer. Patch by Mikulas Patocka.
-
-2004-04-18 Paul Eggert <eggert@twinsun.com>
-
- tee ignored SIGPIPE, but POSIX doesn't allow this.
-
- * src/tee.c (main): Do not ignore SIGPIPE, as POSIX 1003.1-2001
- does not allow this. This undoes the 1996-10-24 patch.
-
-2004-04-18 Paul Eggert <eggert@twinsun.com>
-
- Signal-handling cleanup for coreutils. Here are the highlights:
-
- - csplit sometimes failed to remove files when interrupted.
- - csplit didn't clean up if two signals arrived nearly simultaneously.
- - install -s would infloop on System V if SIGCHLD was ignored.
- - ls could incorrectly restore color if multiple signals
- arrived nearly simultaneously.
-
- * src/csplit.c (sigprocmask, sigset_t) [!defined SA_NOCLDSTOP]:
- Define.
- (filename_space, prefix, suffix, digits, files_created, remove_files):
- Now volatile.
- (caught_signals): New var.
- (cleanup): Block signals while deleting all files.
- (cleanup_fatal, handle_line_error, regexp_error):
- Mark with ATTRIBUTE_NORETURN.
- (create_output_file, close_output_file, interrupt_handler):
- Block signals while changing the number of output files,
- to fix some race conditions.
- (delete_all_files): Do nothing if remove_files is zero.
- Clear files_created.
- (main): Don't mess with signals until after argument processing
- is done.
-
- * src/csplit.c (main): Rewrite signal-catching code to make it
- similar to other coreutils programs. When processing signals,
- block all signals that we catch, but do not block signals that we
- don't catch. Avoid problems with unsigned int warnings.
- * src/ls.c (main): Likewise.
- * src/sort.c (main): Likewise.
-
- * src/csplit.c (interrupt_handler):
- Use void, not (obsolete) RETSIGTYPE.
- * src/shred.c (sigill_handler, isaac_seed_machdep): Likewise.
-
- * src/csplit.c (interrupt_handler) [defined SA_NOCLDSTOP]:
- Use simpler "signal (sig, SIG_DFL)" rather than sigaction equivalent.
- * src/ls.c (sighandler) [defined SA_NOCLDSTOP]: Likewise.
- * src/sort.c (sighandler) [defined SA_NOCLDSTOP]: Likewise.
- * src/nohup.c (main) [!defined _POSIX_SOURCE]: Likewise, except
- for SIG_IGN.
- * src/tee.c (main) [!defined _POSIX_SOURCE]: Likewise.
-
- * src/install.c: Include <signal.h>.
- (main) [defined SIGCHLD]: Set SIGCHLD handler to the default, if -s is
- given, since System V fork+wait does not work if SIGCHLD is ignored.
-
- * src/ls.c (sighandler) [!defined SA_NOCLDSTOP]: Reset signal
- handler to self, not to SIG_IGN, since SIGTSTP can be received
- more than once.
- (main): Use SA_RESTART, as that is simpler than checking for EINTR
- failures all over the place.
-
-2004-04-20 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (is_empty_dir): Clarify comment.
-
- * man/help2man: Accept new option: --program-name=NAME, so that we
- can override the one in --version output. This is needed solely
- so that test.1 doesn't refer to `[' as the program name.
- Reported by Benjamin Cutler as http://bugs.debian.org/205251.
- * man/Makefile.am (.x.1): Use help2man's new --program-name option.
-
- * src/pwd.c: Don't include pathmax.h; system.h already does it.
-
- * src/cut.c (cut_fields): Free buffer upon getndelim2 failure.
-
-2004-04-19 Jim Meyering <jim@meyering.net>
-
- * src/shred.c (isaac_seed_start) [AVOID_USED_UNINITIALIZED_WARNINGS]:
- Initialize a buffer to avoid warnings from tools like valgrind.
-
- * Makefile.maint (sc_trailing_blank): New rule.
- (syntax-check-rules): Add it.
- * .x-sc_trailing_blank: New file.
-
- Make pwd work even if the resulting name is so long that getcwd fails.
- * src/pwd.c: (path_free, path_init, path_prepend): New functions.
- (nth_parent, find_dir_entry, robust_getcwd): New functions.
- (main): First try getcwd, then, upon failure, robust_getcwd.
-
-2004-04-18 Jim Meyering <jim@meyering.net>
-
- * src/who.c (print_user): Use xrealloc here, rather than
- unchecked realloc. Remove anachronistic casts.
-
- * src/remove.c (full_filename_): Don't leak upon failed realloc.
-
- * src/system.h (readdir_ignoring_dot_and_dotdot): New inline function,
- from remove.c.
- * src/remove.c (readdir_ignoring_dotdirs): Move function to system.h,
- renaming it. Update uses.
-
-2004-04-17 Jim Meyering <jim@meyering.net>
-
- * configure.ac: Depend on automake-1.8.3.
-
- * src/join.c (add_file_name): Declare function to be `static'.
- (string_to_join_field): Likewise.
- * src/remove.c (ds_init, ds_free): Likewise.
-
- * Makefile.maint (sc_prohibit_jm_in_m4): New rule.
- (syntax-check-rules): Add to the list.
-
-2004-04-13 Paul Eggert <eggert@twinsun.com>
-
- Use page-aligned buffers whenever we bother to do I/O using buffer
- sizes that are tailored for the files.
-
- * src/cat.c: Include getpagesize.h.
- * src/copy.c: Likewise.
- * src/shred.c: Likewise.
- * src/split.c: Likewise.
- * src/cat.c (main): Align I/O buffers to page boundaries.
- * src/copy.c (copy_reg): Likewise.
- * src/shred.c (dopass): Likewise.
- * src/split.c (main): Likewise.
- * src/dd.c (ROUND_UP_OFFSET, PTR_ALIGN): Remove.
- All uses replaced by ptr_align.
- * src/od.c (gcd, lcm): Remove; now in system.h.
- * src/system.h (gcd, lcm, ptr_align): New functions, moved from od.c.
-
-2004-04-14 Jim Meyering <jim@meyering.net>
-
- Remove m4/Makefile.am: it's no longer needed, with newer automake
- * configure.ac (AC_CONFIG_FILES): Remove m4/Makefile.in from the list.
- * Makefile.am (SUBDIRS): Remove `m4' from the list.
-
-2004-04-13 Jim Meyering <jim@meyering.net>
-
- * configure.ac: Change `jm_' in AC_DEFINE'd names to `gl_'.
-
-2004-03-27 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: cp -pu and mv -u (when copying) now take the destination
- file system time stamp resolution into account.
- * doc/coreutils.texi (mv invocation): Document this.
- (cp invocation): Document -u (it was missing!) with new behavior.
-
- * src/copy.c: Include "utimecmp.h".
- (copy_internal): Compare time stamps using utimecmp rather than
- MTIME_CMP.
-
-2004-04-09 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (.re-list): New rule/file, to replace
- hard-coded list of header file names.
- (sc_system_h_headers): Use the new file.
- Don't look for sys2.h anymore.
-
- * src/system.h: Include new "stat-macros.h" rather than hard-coding
- all of its macro definitions -- the list was slightly out of date.
- Suggestion from Dmitry V. Levin.
-
-2004-04-08 Paul Eggert <eggert@cs.ucla.edu>
-
- * NEWS: Remove noctty flag from dd. Suggested by Philippe Troin.
- * doc/coreutils.texi (dd invocation): Likewise.
- * src/shred.c (O_NOCTTY): Remove redundant decl.
- * src/dd.c (flags, usage): Remove noctty flag.
- (main): Always use O_NOCTTY when opening files.
-
-2004-04-08 Jim Meyering <jim@meyering.net>
-
- * src/dd.c (dd_copy): Mark two diagnostics for translations.
- (set_fd_flags): Undo part of today's change: it's a little
- cleaner -- and more efficient in the common case -- to go
- ahead and OR in the -1 when fcntl fails.
-
- * Makefile.maint (sc_dd_max_sym_length): New target.
- (syntax-check-rules): Add it.
-
- * src/md5sum.c (PROGRAM_NAME) [algorithm == ALG_SHA1]:
- Correct spelling: s/shasum/sha1sum. Reported by Jesse Kornblum.
-
- * src/dd.c (set_fd_flags): Don't OR in -1 when fcntl fails.
- Rename parameter, flags, to avoid shadowing global.
- (LONGEST_SYMBOL): Tweak comment.
-
-2004-04-07 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: New dd conv= symbols nocreat, excl, fdatasync, fsync,
- and new dd options iflag= and oflag=.
- * src/dd.c (usage): Likewise.
- * src/Makefile.am (dd_LDADD, shred_LDADD): Add fdatasync's lib.
- * src/dd.c (fdatasync) [!HAVE_FDATASYNC]: New macro.
- (C_NOCREAT, C_EXCL, C_FDATASYNC, C_FSYNC): New macros.
- (input_flags, output_flags): New vars.
- (LONGEST_SYMBOL): New macro.
- (struct symbol_value): Renamed from struct conversion. Members
- symbol and value renamed from convname and conversion. The
- symbol value is now an array instead of a pointer; this saves
- a bit of space and time in practice. All uses changed.
- (conversions): Add nocreat, excl, fdatasync, fsync. Now const.
- (flags): New constant array.
- (iflag_error_msgid, oflag_error_msgid): New constants.
- (parse_symbols): Renamed from parse_conversion and generalized
- to handle either conversion or flag symbols.
- (scanargs): Adjust uses of parse_symbols accodingly. Add
- support for iflag= and oflag=. Reject attempts to use
- both excl and nocreat.
- (set_fd_flags): New function.
- (dd_copy): Just return X rather than calling quit (X), since our
- caller invokes quit with the returned value. Add support for
- fdatasync and fsync.
- (main): Add support for iflag=, oflag=, and new conv= symbols.
- * src/system.h (O_DIRECT, O_DSYNC, O_NDELAY, O_NOFOLLOW,
- O_RSYNC, O_SYNC): Define to 0 if not already defined.
-
- * NEWS: Remove duplicate mention of BLOCKSIZE.
-
-2004-04-02 Andreas Schwab <schwab@suse.de>
-
- * src/stty.c: Add support for IUTF8 input flag.
-
-2004-04-06 Jim Meyering <jim@meyering.net>
-
- * src/system.h (makedev) [mkdev && !makedev]: Define in terms of mkdev.
- Interix spells it `mkdev'. Reported by Mark Funkenhauser.
-
-2004-04-04 Jim Meyering <jim@meyering.net>
-
- A specified format is no longer automatically newline terminated.
- If you want a newline at the end of your format, use `\n'.
- * src/stat.c (print_it): Don't print a newline at the end of
- every format.
- (do_statfs): Add a newline at end of each default format string.
-
-2004-03-30 Paul Eggert <eggert@twinsun.com>
-
- * src/nohup.c (main): Adjust to new calling convention
- for set_cloexec_flag.
-
-2004-03-31 Jim Meyering <jim@meyering.net>
-
- * tests/Fetish.pm (run_tests): Remove `.orig' file.
- Remove debugging diagnostic.
-
- Specifying an invalid --width=N (-w) or --gap-size=N (-g)
- would not elicit an error.
- * src/ptx.c: Include "xstrtol.h" and "quotearg.h".
- (main): Don't use atoi. Use xstrtoul instead.
-
-2004-03-30 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (sc_prohibit_atoi_atof): New rule.
- (syntax-check-rules): Add it.
- * .x-sc_prohibit_atoi_atof: New file.
-
-2004-03-29 Jim Meyering <jim@meyering.net>
-
- * tests/du/files0-from: Use new OUT_SUBST directive, so that this
- test is not sensitive to system-dependent block size differences.
- Prompted by a report of Solaris 8 differences from Paul Eggert.
-
- * tests/Fetish.pm: Accept new directives: OUT_SUBST, ERR_SUBST.
- Rename `%tmp' to `%actual'. Reverse order of last two args to
- _compare_files (to $actual, $expected) so as to match declaration.
-
-2004-03-28 Paul Eggert <eggert@twinsun.com>
-
- Fix some gotchas encountered when porting to Solaris 8, using
- the Forte 6u2 compiler.
-
- * src/hostname.c [HAVE_SETHOSTNAME && !defined sethostname]:
- Declare sethostname, since no Solaris header does it.
- * src/who.c: Include "vasprintf.h", for asprintf.
-
-2004-03-28 Jim Meyering <jim@meyering.net>
-
- Minor optimization:
- * src/du.c (process_file): Don't record dev/inode for directories.
-
- Under some circumstances, without -c, du would mistakenly count the
- space of hard-linked files, not just the first one it encountered.
- Reported by Anthony Thyssen.
- * src/du.c (du_files): Don't ever clear the set of `seen' dev/inodes.
-
- * src/du.c: Rename global `print_totals' to `print_grand_total'.
-
- * src/du.c (main): Rearrange filtering loop to be a tiny bit
- more efficient.
-
- * src/chown-core.c: Don't include savedir.h -- no longer needed.
- * src/chmod.c: Likewise.
-
-2004-03-25 Jim Meyering <jim@meyering.net>
-
- * src/du.c (main): Remove now-unused declaration of `i'.
-
-2004-03-24 Paul Eggert <eggert@twinsun.com>
-
- * src/du.c (main): Filter out file names of length zero before
- invoking fts, so that they don't cause fatal errors.
-
-2004-03-25 Jim Meyering <jim@meyering.net>
-
- * tests/du/files0-from (zero-len): Add a test for the above.
-
-2004-02-25 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: New environment var BLOCKSIZE.
- * lib/human.c (humblock): Support BLOCKSIZE as well as BLOCK_SIZE.
- * tests/envvar-check: Test for it. Factor the code to simplify it.
-
-2004-03-23 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: Shorten the du --files0-from announcement, and say
- "NUL-terminated" rather than "NUL-separated".
- * src/du.c (EXPECTED_BYTES_PER_FILE_NAME, DEFAULT_PROJECTED_N_FILES):
- Remove: not used.
- (usage): Say "NUL-terminated", not "NUL-separated".
- (main): Check for I/O error when istream is closed.
- Allow --files0-from=F even if F is empty; this specifies no files.
- (du_files): Now that we allow the list of files to be empty,
- handle that case.
- * tests/du/files0-from: Adjust to above changes to src/du.c.
-
-2004-03-24 Jim Meyering <jim@meyering.net>
-
- * tests/tail-2/assert: Avoid race condition that could cause
- spurious failure. Based on a patch from Andreas Schwab.
-
-2004-03-23 Jim Meyering <jim@meyering.net>
-
- * src/du.c (main): Free the hash table, too.
-
-2004-03-22 Jim Meyering <jim@meyering.net>
-
- * man/Makefile.am (.x.1): Remove --info-page= option, reverting
- the change of 2004-01-22. I can no longer reproduce the problem
- that prompted that change, and `info coreutils pr' would display the
- `printing text' section of the manual, not the one on `pr invocation'.
-
- * tests/du/files0-from (nul-1, nul-2): Adjust expected diagnostics
- to match corrected output.
-
- * src/du.c: Include "readtokens0.h" rather than "readtokens.h".
- (main): Use readtoken0 functions rather than readtokens.
- Don't use errno when diagnosing readtokens0 failure.
- Fix off-by-one error in the token number reported in a diagnostic.
- (du_files): Return bool, rather than int.
- (main): Call readtokens0_free.
-
-2004-03-21 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (ds_free): Plug a small leak.
-
- * tests/Fetish.pm: Fix typo in comment.
-
-2004-03-07 Jim Meyering <jim@meyering.net>
-
- * NEWS: du accepts a new option --files0-from=FILE, where FILE
- contains a list of NUL-separated file names.
-
- * src/du.c: Include "readtokens.h".
- (usage): Describe the new option, and adjust the `Usage':
- with this option, no FILE may be specified on the command line.
- (main): Handle the new option.
-
- * tests/du/files0-from: New tests, for the above.
- * tests/du/Makefile.am (TESTS): Add files0-from.
-
- * src/factor.c (do_stdin): Reflect changes in use of readtoken.
- * src/tsort.c (tsort): Likewise.
-
-2004-02-29 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: Add support for a new notation @N to get_date to represent
- the time stamp with numeric value N. Improve support for
- fractional time stamps. date's -d and -f options now accept them.
- Likewise for touch -t. date has a new option --iso-8601=ns.
-
- * doc/coreutils.texi (touch invocation):
- Describe use of fractional seconds.
- (date invocation, Options for date): Likewise.
- * doc/getdate.texi (General date syntax, Time of day items): Likewise.
- * doc/coreutils.texi (date invocation): Mention effect of LC_TIME.
- (Options for date): Describe new --iso-8601=ns option.
-
- * doc/getdate.texi: Add copyright notice. Change getdate to
- get_date when talking about the function name.
- (Seconds since the Epoch): New section, containing the time_t
- info moved from Date input formats section, along with new
- info about the @ syntax. Mention negative time stamps,
- fractional time stamps, and leap seconds.
- (General date syntax): Modernize examples a bit to reflect new
- features.
- (General date syntax, Relative items in date strings):
- Use ' rather than " to quote formats.
- (Time of day items): Add an example with fractional seconds.
- Describe fractional-second syntax.
-
- * src/Makefile.am (touch_LDADD): New macro, since `touch' now
- needs clock_gettime.
-
- * src/date.c (enum Time_spec): New enum TIME_SPEC_NS.
- (time_spec_string, time_spec, show_date): Support it.
- (usage): Remove description of -ITIMESPEC, as it's obsolete and
- confusing. Mention --iso-8601=ns.
- (batch_convert): getline returns ssize_t, not int.
-
- * src/touch.c (newtime): Now an array of two timespecs, one
- for access and one for modification.
- (ref_stats): Remove.
- (get_reldate): Use get_date's parameter profile.
- (touch, main): Adjust to above changes.
- (main): Work even if tm_year == INT_MAX (so long as long int is wider).
- Use gettime instead of gettimeofday, for new get_date signature.
-
- * tests/date/Test.pm (test_vector): New tests epoch, ns-10, ns-max32,
- ns-relative.
-
-2004-03-15 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (alpha beta major): `Make' the emit_upload_commands
- target before updating $(prev_version_file).
-
- * tests/misc/date-sec: New file, to test for just-fixed bug in date.
- See today's change in lib/getdate.y.
- * tests/misc/Makefile.am (TESTS): Add date-sec.
-
-2004-03-14 Jim Meyering <jim@meyering.net>
-
- * announce-gen (print_changelog_deltas): Use `.sig' suffix for
- signature files, not `.asc'. Reported by angico@yahoo.com.
-
-2004-03-13 Jim Meyering <jim@meyering.net>
-
- * src/cp.c (do_copy): Tweak wording in a diagnostic.
- Suggestion from Karl Berry.
- Include "quoatearg.h".
- (do_copy): Use quotearg_colon (not quote) for diagnostics
- that begin with `"%s:'.
-
- * src/nl.c (usage): Specify that nl uses _basic_ regular expressions.
- Suggestion from Dan Jacobson.
-
-2004-03-12 Jim Meyering <jim@meyering.net>
-
- * Version 5.2.1.
-
- Sometimes, when source and destination partition are different,
- mv mistakenly fails to preserve a hard link. Reported by IIDA Yosiaki.
-
- * src/copy.c: When moving a set of N hard-linked files between
- partitions, via two or more command line arguments where the
- command line argument containing the Nth link contains no other
- link to that same file, mv would mistakenly copy the file, rather
- than hard-linking it to the other(s). That happens because when the
- final link is processed, its link count has been reduced to 1 since
- the other links have been `copied' to the destination partition
- and the source links have been removed.
- (copy_internal): When in move mode, use the source dev/inode
- pair to look up destination name even when st_nlink == 1.
- * src/cp-hash.c (src_to_dest_lookup): New function.
- * src/cp-hash.h (src_to_dest_lookup): Add prototype.
- * tests/mv/part-hardlink: New file. Test for the above fix.
- * tests/mv/Makefile.am (TESTS): Add part-hardlink.
-
- * announce-gen: Sync with autoconf.
-
- * tests/ls/time-1: Exit 77 (not 1) if we can't set up for the test.
- This was triggered on a Linux-2.2.19 system using a file system
- NFS-mounted from some sort of Sun.
-
-2004-03-11 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.8.3. Regenerate dependent files.
-
-2004-03-10 Jim Meyering <jim@meyering.net>
-
- * tests/du/deref-args: Also convert sizes in the 70-79 kB range,
- so that this test works with SELinux-enabled systems.
- Based on a patch from Tim Waugh.
-
- `join -1 x' would give a misleading diagnostic
- * src/join.c (string_to_join_field): Report that a non-numeric field
- number is invalid, rather than `so large that it is not representable'.
- * tests/join/Test.pm (invalid-j): New partial test for the above fix.
-
-2004-03-06 Jim Meyering <jim@meyering.net>
-
- cp --sparse=always sparse-image-file.img /dev/hda1 could
- produce an invalid copy on the destination device.
-
- * src/copy.c (copy_reg): Even with --sparse=always, try to
- make `holes' only if the destination is a regular file.
- Reported by Szakacsits Szabolcs.
-
-2004-03-03 Paul Eggert <eggert@twinsun.com>
-
- * src/nohup.c (main): Don't invoke set_cloexec_flag with
- a file descriptor of -1.
-
-2004-03-02 Dmitry V. Levin <ldv@altlinux.org>
-
- * src/nohup.c: Include "cloexec.h".
- (main): Set the copy of stderr to close on exec.
-
-2004-03-01 Paul Eggert <eggert@twinsun.com>
-
- * configure.ac: Include <signal.h> when checking for strsignal,
- sys_siglist, and friends. Problem reported by Tony Leneis in
- <http://mail.gnu.org/archive/html/bug-coreutils/2004-02/msg00136.html>.
-
-2004-02-25 Paul Eggert <eggert@twinsun.com>
-
- * tests/du/deref-args, tests/du/exclude, tests/du/slash:
- * tests/du/trailing-slash: Run envvar-check in case BLOCK_SIZE
- etc. are set.
-
-2004-02-23 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: Document how chown's USER.GROUP argument is now parsed.
-
-2004-02-23 Jim Meyering <jim@meyering.net>
-
- * src/seq.c (usage): Remove stray space after \n in --help output.
-
-2004-02-22 Jim Meyering <jim@meyering.net>
-
- * src/du.c (usage): Separate -H and --si. Say that the meaning
- of -H will soon change to that of --dereference-args (-D).
-
-2004-02-21 Jim Meyering <jim@meyering.net>
-
- * src/comm.c (usage): Tell what comm does when there are no options.
- Reword in terms of FILE1 and FILE2 rather than `left file' and
- `right file'. Suggestion from Dan Jacobson.
-
-2004-02-15 Paul Eggert <eggert@twinsun.com>
-
- Fix some POSIX-conformance bugs in expr.
-
- * NEWS: document the following changes to src/expr.c.
- * doc/coreutils.texi (expr invocation): Likewise.
- Document what forms integers may take, and say "integer"
- consistently instead of "number". Warn about operands
- that "expr" can misinterpret, and how to work around the
- problem.
- * src/expr.c (eval, eval7, eval6, eval5, eval4, eval3, eval2, eval1):
- Accept a bool argument specifying whether to evaluate the
- expression. This is to allow short-circuit evaluation. All
- callers changed.
- (null): Report that a string is zero even if it has
- a form like "-0" or "00".
- (eval1, eval): Use short-circuit evaluation for | and &.
- (eval): Return 0 if both arguments are null or zero, instead
- of returning the first argument.
- * tests/expr/basic: Add some tests for the above.
-
-2004-02-17 Jim Meyering <jim@meyering.net>
-
- * Version 5.2.0.
-
- `make check' from a build inside a chroot environment would fail
- * tests/help-version: Specify an argument (`/') for df, in the
- unusual event that there is no valid entry in /etc/mtab.
- Likewise for id: add the -u option, so we don't get spurious
- failures when there are no user or group names.
- Patch by Tim Waugh.
-
- * src/sort.c (usage) [-u]: Add punctuation so that the description in
- the help2man-generated (line-joined) man page is more readable.
- Reported by Tim Waugh.
- [-T]: Add a semicolon, for the same reason.
-
-2004-02-15 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (dist-hook): Qualify target with $(srcdir)/ prefix.
-
-2004-02-11 Jim Meyering <jim@meyering.net>
-
- * tests/Makefile.am.in ($(srcdir)/Makefile.am): Use more portable
- $(srcdir)/../Makefile.am.in, rather than $<.
- Suggestion from Michael Elizabeth Chastain.
-
-2004-02-10 Jim Meyering <jim@meyering.net>
-
- * config/install-sh: Make this script executable.
- * Makefile.am (dist-hook): New target, to ensure that config/install-sh
- is executable. Otherwise, on systems that lack a suitable install
- binary, `make install' would fail, because of the way this script
- is invoked (without `$SHELL ' prefix).
- Reported by Bob Proulx.
-
-2004-02-08 Jim Meyering <jim@meyering.net>
-
- * Version 5.1.3.
-
- * tests/rm/rm5: Avoid triggering a bug in OSF/Tru64's sed
- that would cause an unwarranted test failure.
- * tests/rm/rm3: Likewise.
-
-2004-02-07 Jim Meyering <jim@meyering.net>
-
- Remove xstat function pointer member. The way it was used was not
- portable, since some systems (OSF V5.1, Solaris 2.5.1) provide static
- inline `stat' and `lstat' functions, thus making the tests of
- `xstat == lstat' in copy.c always fail.
- * src/copy.h (struct cp_options) [xstat]: Remove member.
- (XSTAT): New macro.
- * src/copy.c (copy_dir): Set `.dereference' member, not .xstat.
- (copy_internal): Use `XSTAT (x, ...)' in place of `*(x->xstat) (...)'.
- Use `x->dereference == DEREF_NEVER' in place of `x->xstat == lstat'.
- (valid_options): Remove now-obsolete FIXME comments.
-
- * src/cp.c (re_protect): Use `XSTAT (x, ...)' in place of
- `*(x->xstat) (...)'.
- (do_copy): Declare/use local xstat rather than x->xstat.
- (main): Remove code that set x.xstat.
- * src/mv.c (cp_option_init): Don't initialize xstat member.
- * src/install.c (cp_option_init): Likewise.
-
- * Makefile.cfg (gnu_ftp_host-alpha, etc.): Un-factor .gnu.org suffix,
- so that emit_upload_commands can use these variables, too.
-
-2004-02-06 Jim Meyering <jim@meyering.net>
-
- * tests/rm/deep-1: Remove `du' stack space test.
- Apparently, `ulimit -s N' isn't portable enough.
- This test will be restored (with a guard against losing ulimit)
- in its own file later.
-
- * tests/rm/deep-1 (deep): Remove progress-style diagnostics,
- since this test doesn't take long enough to merit them.
- Run du on $tmp (the containing dir), not $deep, the full path to leaf.
-
- * Makefile.maint (signatures): Remove definition.
- Now, automake's gnupload handles this.
- (%.sig: %): Remove now-unused rule.
- (rel-files): Use automake's $(DIST_ARCHIVES), rather than
- `$(distdir).tar.bz2 $(distdir).tar.gz'.
- (emit-upload-commands): Adjust to use gnupload.
-
-2004-02-05 Jim Meyering <jim@meyering.net>
-
- * src/system.h (ST_TIME_CMP_NS, ST_TIME_CMP): Remove definitions.
- (ATIME_CMP, CTIME_CMP, MTIME_CMP, TIMESPEC_NS): Likewise.
- Now, those are all defined in timespec.h.
- Include timespec.h.
-
- * src/date.c: Don't include timespec.h, now that system.h does it.
-
-2004-02-02 Paul Eggert <eggert@twinsun.com>
-
- Don't dump core if localtime returns NULL (possible on
- hosts with 64-bit time_t and 32-bit int).
- * src/date.c: Include "inttostr.h".
- (batch_convert, main):
- If time conversion fails, exit with nonzero status.
- (show_date): Return int to report conversion failure.
- Print the time as an int if localtime fails.
- * src/uptime.c: Print "??" if the current clock can't
- be converted by localtime. This won't happen until the year
- 2*31 + 1900, but we don't want to dump core even if the current
- clock has the wrong value.
-
- * src/stat.c: Include "inttostr.h".
- (human_time): Print the date/time as a number of seconds since the
- epoch if it can't be converted by localtime. This is better than
- just saying "invalid", and is consistent with what "ls" does.
- Don't dump core if the year has more than 48 digits; this isn't
- possible on any contemporary host, but we might as well do it right.
-
-2004-01-31 Paul Eggert <eggert@twinsun.com>
-
- * src/stat.c (human_time): Accept time rather than
- pointer-to-const-time parameter, for clarity. All callers changed.
-
-2004-02-02 Jim Meyering <jim@meyering.net>
-
- * src/stat.c (do_stat): Remove extra trailing newline from
- default formats. Reported by Nelson H. F. Beebe.
-
- Print actual fractional seconds in time stamps, not just `.00000000'.
- * src/stat.c (human_time): Add and use new parameter, t_ns.
- (print_stat): Update callers.
- * src/ls.c (TIMESPEC_NS): Remove definition.
- * src/system.h (TIMESPEC_NS): Define here, instead, now that stat.c
- also uses this macro.
- Nelson H. F. Beebe noticed that ls --full-time printed nonzero
- fractional seconds for files on an XFS file system, but that stat's
- fractional seconds were always zero.
-
-2004-01-28 Paul Eggert <eggert@twinsun.com>
-
- * src/seq.c (print_numbers): Use 'double' for loop index, not
- 'int', to avoid problems with integer overflow. On almost all
- machines 'double' works in every case where 'int' works, and
- it works on other cases besides.
-
-2004-01-27 Jim Meyering <jim@meyering.net>
-
- * src/seq.c (usage): Mention that if INCREMENT is omitted,
- it defaults to 1, even when FIRST is larger than LAST.
- Reword so as not to exclude the possibility that INCREMENT be zero.
-
-2004-01-25 Jim Meyering <jim@meyering.net>
-
- * Version 5.1.2.
-
- * Makefile.maint (signatures): Comment out definition.
-
-2004-01-23 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (header_regexp): Add exitfail.
-
- * man/Makefile.am (EXTRA_DIST): Add help2man.
- Reported by Nelson H. F. Beebe.
-
- * man/Makefile.am (.x.1): Prefix help2man invocation with `$(PERL) --'
- so it works on systems with Perl installed somewhere other than in
- /usr/bin.
-
- * src/paste.c (paste_parallel): Declare local, chr, to be of type
- `int', not `char', since it must hold EOF. This bug would make
- paste infloop on some systems. Test failures reported by
- Nelson H. F. Beebe and Christian Krackowizer.
-
-2004-01-22 Jim Meyering <jim@meyering.net>
-
- * tests/rmdir/fail-perm: New file. Test for just-fixed rmdir bug.
- * tests/rmdir/Makefile.am (TESTS): Add fail-perm.
-
- * man/help2man: Fix it so using --info-page='coreutils PROG' works.
- * man/Makefile.am (.x.1): Invoke our own (tweaked) copy of help2man.
- Use --info-page='coreutils PROG' option.
- Now, readlink.1 refers the user to `info coreutils readlink'
- rather than to `info readlink'. Reported by Matt Swift.
-
-2004-01-21 Paul Eggert <eggert@twinsun.com>
-
- Exit status cleanup.
-
- * src/basename.c (usage): Use EXIT_SUCCESS, not 0, for clarity.
- * src/cat.c, src/chgrp.c, src/chmod.c, src/chown.c, src/chroot.c,
- * src/cksum.c, src/comm.c, src/cp.c, src/csplit.c, src/cut.c,
- * src/date.c, src/dd.c, src/df.c, src/dircolors.c, src/dirname.c,
- * src/du.c, src/echo.c, src/env.c, src/expand.c, src/expr.c,
- * src/factor.c, src/fmt.c, src/fold.c, src/head.c, src/hostid.c,
- * src/hostname.c, src/id.c, src/install.c, src/join.c, src/kill.c,
- * src/link.c, src/ln.c, src/logname.c, src/ls.c, src/md5sum.c,
- * src/mkdir.c, src/mkfifo.c, src/mknod.c, src/mv.c, src/nice.c,
- * src/nl.c, src/nohup.c, src/od.c, src/paste.c, src/pathchk.c,
- * src/pinky.c, src/pr.c, src/printenv.c, src/printf.c, src/pwd.c,
- * src/rm.c, src/rmdir.c, src/seq.c, src/setuidgid.c, src/shred.c,
- * src/sleep.c, src/sort.c, src/split.c, src/stat.c, src/stty.c,
- * src/su.c, src/sum.c, src/sync.c, src/tac.c, src/tail.c, src/tee.c,
- * src/test.c, src/touch.c, src/tr.c, src/tsort.c, src/tty.c,
- * src/uname.c, src/unexpand.c, src/uniq.c, src/unlink.c, src/uptime.c,
- * src/users.c, src/wc.c, src/who.c, src/whoami.c, src/yes.c: Likewise.
-
- * src/cat.c (usage): Don't bother normalizing exit status
- since the arg is already the correct exit status now.
- * src/cksum.c, src/comm.c, src/csplit.c, src/cut.c,
- * src/dircolors.c, src/expand.c, src/fmt.c, src/fold.c, src/head.c,
- * src/join.c, src/md5sum.c, src/nl.c, src/od.c, src/paste.c,
- * src/pr.c, src/split.c, src/sum.c, src/tac.c, src/tail.c, src/tr.c,
- * src/tsort.c, unexpand.c, src/src/uniq.c, src/src/wc.c: Likewise.
-
- * src/chown.c (main): Removed unused local 'fail'.
-
- * src/chroot.c (CHROOT_FOUND_BUT_CANNOT_INVOKE, CHROOT_FAILURE):
- Remove.
-
- * src/chroot.c (main): Initialize exit_failure to EXIT_FAIL.
- * src/env.c, src/nice.c, src/su.c: Likewise.
- * src/nohup.c (main): Likewise, to NOHUP_FAILURE.
- * src/setuidgid.c (main): Likewise, to SETUIDGID_FAILURE.
- * src/expr.c (main): Use initialize_exit_failure rather than
- setting exit_failure directly; this optimizes away redundant
- assignments.
- * src/printenv.c, src/sort.c, src/test.c, src/tty.c: Likewise.
-
- * src/chroot.c (main): Exit with status 1 rather than 127
- if chroot itself fails, as per documentation.
-
- * src/chroot.c (main): Use EXIT_ENOENT and EXIT_CANNOT_INVOKE
- rather than roll-your-own symbols or integers.
- * src/env.c (main): Likewise.
- * src/nohup.c (main): Likewise.
- * src/su.c (run_shell): Likewise.
-
- * src/cp.c (exit_status): Remove static var....
- (main): Making it local here instead. Use =, not |=, to set it.
-
- * src/cut.c (FATAL_ERROR, main): Exit with status EXIT_FAILURE,
- not 2, on errors.
- * src/date.c (batch_convert, main): Likewise.
- * src/dd.c (dd_copy): Likewise.
- * src/pr.c (first_last_page, main, getoptarg): Likewise.
- * src/tr.c (main): Likewise.
- * src/date.c (main): Don't assume EXIT_FAILURE == 1, as
- POSIX doesn't require it.
- * src/dd.c (write_output, skip, dd_copy): Likewise.
- * src/df.c (main): Likewise.
- * src/id.c (main): Likewise.
- * src/install.c (main): Likewise.
- * src/ln.c (main): Likewise.
- * src/ls.c (main): Likewise.
- * src/mv.c (main): Likewise.
- * src/shred.c (main): Likewise.
-
- * src/env.c (main): Exit with status 1, not 2, on errors detected
- by env proper.
- * src/hostname.c (main): Likewise.
- * src/nl.c (main): Likewise.
- * src/stty.c (main): Likewise.
-
- * src/expr.c (EXPR_FAILURE): Renamed from EXPR_ERROR, for
- consistency with the other programs' naming conventions.
- All uses changed.
-
- * src/factor.c (main): Do not report a usage error simply
- because stdin has bad numbers.
-
- * src/id.c (problems): Now a boolean int, not a counter,
- so that we don't have to worry about int overflow. All uses changed.
- * src/touch.c (err): Likewise.
-
- * src/md5sum.c (main): Use int, not size_t, to store boolean int.
-
- * src/mkfifo.c (main): Exit with status 1, not 4, if not implemented.
- * src/mknod.c: Likewise.
-
- * src/nice.c (main): Exit with status EXIT_FAIL, not EXIT_FAILURE,
- on error; this is in case EXIT_FAILURE is unusual.
- * src/su.c (main): Likewise.
-
- * src/nohup.c (NOHUP_FOUND_BUT_CANNOT_INVOKE): Remove; all uses
- changed to EXIT_CANNOT_INVOKE.
-
- * src/printenv.c (PRINTENV_FAILURE): New constant.
- (main): Exit with status PRINTENV_FAILURE, not EXIT_FAILURE, on
- command-line syntax problems.
-
- * src/rmdir.c (remove_parents): Don't set 'fail' to a negative number.
- (main): Avoid integer overflow when seeing whether errors occurred.
-
- * src/seq.c (print_numbers): Now returns void, not (zero) int.
- All callers changed.
- (main): Remove unused local variable 'errs'. Always exit successfully
- if we reach the end.
-
- * src/setuidgid.c (SETUIDGID_FAILURE): Renamed from FAIL_STATUS,
- for consistency with other programs here. All uses changed.
- (main): Use 'error' to exit rather than invoking 'exit' here.
-
- * src/sort.c: Don't include <assert.h>.
- (SORT_OUT_OF_ORDER, SORT_FAILURE): Now enums, not macros.
- (usage): Don't use 'assert'.
- (main): Remove redundant assignment to exit_failure.
-
- * src/system.h (EXIT_FAIL, EXIT_CANNOT_INVOKE, EXIT_ENOENT):
- New enum values.
- (initialize_exit_failure): New inline function.
- Include exitfail.h here, since we refer to exit_failure.
- All callers changed to not include exitfail.h.
-
- * src/tty.c (TTY_FAILURE, TTY_WRITE_ERROR): New enum values;
- substitute them for the corresponding integer constants.
-
- * tests/help-version (expected_failure_status_date): Remove, as
- 'date' is now normal.
- (expected_failure_status_nohup): New var.
-
-2004-01-21 Jim Meyering <jim@meyering.net>
-
- * tests/touch/relative: Remove `command' syntax.
- Thanks to Nelson H. F. Beebe and Paul Eggert.
-
- * tests/touch/relative: Test only year/month/day, not hours/min/sec,
- so as to avoid problems with systems using TAI clocks.
- Although it's no longer necessary, set TZ=UTC0 also for the
- initial touch command. Reported by Paul Jarc here:
- http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/1504
-
-2004-01-20 Diego Biurrun <diego@biurrun.de>
-
- * src/dircolors.hin: Add .mov to the list of media files.
-
-2004-01-19 Paul Eggert <eggert@twinsun.com>
-
- * tests/touch/relative: Use TZ=UTC0, not TZ=utc (which isn't
- portable). Problem reported by Christian Krackowizer. Also, use
- +0000 rather than +0 to specify a time zone, as the documentation
- requires four digits.
-
-2004-01-19 Jim Meyering <jim@meyering.net>
-
- * tests/mv/hard-4: Run envvar-check in case SIMPLE_BACKUP_SUFFIX is set.
- * tests/mv/backup-is-src: Likewise.
- Problem reported by Peter Horst
-
-2004-01-17 Jim Meyering <jim@meyering.net>
-
- * announce-gen (print_changelog_deltas): Use .sig suffix, not .asc.
-
- * Version 5.1.1.
-
-2003-12-15 Paul Eggert <eggert@twinsun.com>
-
- * NEWS, doc/coreutils.texi: touch -r and -d can now both be specified,
- with -r specifying the origin for -d.
- * src/touch.c (flexible_date): Remove static var.
- (get_reldate): New function.
- (main): Use it, to implement this new behavior.
-
-2004-01-16 Jim Meyering <jim@meyering.net>
-
- * tests/touch/relative: New test for the above.
- * tests/touch/Makefile.am (TESTS): Add relative.
-
-2004-01-13 Jim Meyering <jim@meyering.net>
-
- * src/system.h: Include contents of sys2.h.
- * src/sys2.h: Remove file.
- * src/Makefile.am (noinst_HEADERS): Remove sys2.h.
-
- * Use automake-1.8.2. Regenerate dependent files.
-
- * Update to gettext-0.13.1.
- * configure.ac: Use gettext-0.13.1.
- * .x-sc_space_tab: Add m4/po.m4 to the list of exceptions.
-
-2004-01-12 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (%.sig): Use .sig suffix rather than .asc.
-
- * Makefile.maint (po-check): Ensure that cvsu works before using it.
- Reported by Alexandre Duret-Lutz.
-
- * src/tail.c (main): Warn about following stdin only when it's a tty.
-
- * configure.ac: Use gl_DEFAULT_POSIX2_VERSION.
-
-2004-01-10 Jim Meyering <jim@meyering.net>
-
- * tests/misc/stat-fmt: Use backticks, not `$()' notation.
-
-2004-01-09 Jim Meyering <jim@meyering.net>
-
- * configure.ac: Quote underquoted `jm_DUMMY_1' to avoid new warning.
-
-2004-01-08 Jim Meyering <jim@meyering.net>
-
- * src/stat.c (human_fstype): Use %lx, not %x format for `unsigned long'.
- From Andreas Schwab.
-
- * tests/Makefile.am (TESTS_ENVIRONMENT): Remove `/vg' (prerelease test
- remnant) from PATH component. That would cause tests in this directory
- not to run the just-built binaries, but rather whatever happened
- to be in one's PATH. Reported by Christian Krackowizer.
-
-2004-01-04 Jim Meyering <jim@meyering.net>
-
- * src/csplit.c (new_control_record): Use x2nrealloc
- rather than xrealloc.
-
- * src/cp.c (re_protect): Use ASSIGN_STRDUPA rather than
- alloca and strcpy.
- (make_path_private): Likewise.
-
-2004-01-03 Jim Meyering <jim@meyering.net>
-
- * src/paste.c: Use `bool' (not int) as the type for a few
- global variables.
- (collapse_escapes): Rewrite to set globals rather than modifying
- its parameter.
- Use size_t (not int) for all counters and related index variables.
- (paste_parallel): Remove needless complexity of
- using xrealloc in the loop; just allocate the buffers up front.
- Free the two temporary buffers.
- Move declarations of locals `down' into scope where used.
- (paste_serial): Remove `register' attributes.
- (main): Simplify delim-related code.
- Free `delims', now that it's malloc'd.
-
-2004-01-02 Jim Meyering <jim@meyering.net>
-
- * src/chroot.c: Include "quote.h".
- (CHROOT_FOUND_BUT_CANNOT_INVOKE, CHROOT_FAILURE): Define.
- (main): Exit with status of 127, not 1, for too-few-args,
- chroot failure, or chdir failure.
- Give a better diagnostic upon execvp failure.
-
- * src/du.c (usage): Mention that, with its current meaning,
- -H is deprecated.
-
- * src/tail.c (main): Warn about following stdin when it's a tty.
- Fail when following by name but no names are specified.
-
-2003-12-30 Jim Meyering <jim@meyering.net>
-
- * src/fold.c (main): Use memcpy, not strcpy.
-
- * src/copy.c (copy_internal): Use ASSIGN_STRDUPA rather than
- alloca and strcpy.
-
-2003-12-28 Jim Meyering <jim@meyering.net>
-
- * src/unexpand.c (n_tabs_allocated): New global.
- (add_tabstop): Use x2nrealloc rather than xrealloc.
- * src/expand.c: Likewise.
-
- * tests/misc/expand: New file.
- * tests/misc/Makefile.am (TESTS): Add expand.
-
- * src/sort.c (add_temp_dir): Use x2nrealloc rather than xrealloc.
- (fillbuf): Use x2nrealloc rather than xrealloc.
- (sort): Use xnmalloc rather than xmalloc.
- (main): Likewise.
-
-2003-12-27 Jim Meyering <jim@meyering.net>
-
- * src/tee.c (tee): Use xnmalloc rather than xmalloc.
-
-2003-12-29 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: Remove support for join -j1 FIELD, -j2 FIELD, and -o LIST1
- LIST2 in POSIX 1003.1-2001 hosts, as required by POSIX.
-
- * doc/coreutils.texi (join invocation): Remove documentation
- accordingly. Document that -t makes all separators significant.
-
- * src/join.c: Include posixver.h.
- (obsolete_usage): New var.
- (longopts): Put obsolete options first.
- (OBSOLETE_LONG_OPTIONS): New constant.
- (get_option, add_file_name): New functions.
- (main): Use them to support new behavior.
- (usage): Remove documentation for -j1 FIELD and -j2 FIELD.
- Do not mark -j FIELD as obsolescent; it is longstanding
- UNIX tradition and is a valid extension to POSIX.
-
- * tests/join/Test.pm (tv): Avoid obsolete -o usage.
-
-2003-12-28 Paul Eggert <eggert@twinsun.com>
-
- * src/join.c (add_field_list): Don't use alloca with unbounded
- size; just modify the argument, which is no longer const *.
-
- Various other minor cleanups, mostly to avoid the need for casts.
-
- (extract_field): Renamed from ADD_FIELD, as it's now a function.
-
- (struct field.beg): Now char *, not unsigned char const *. All
- uses changed. It shouldn't be const since xmemcoll writes on its
- arguments.
- (extract_field): Likewise, for 2nd arg.
- (keycmp): Remove now-unnecessary cast of xmemcoll args.
-
- (is_blank): New function, to avoid need to cast arg to unsigned char.
- (extract_field): Use it.
-
- (xfields): Rewrite pretty much from scratch.
-
- (hard_LC_COLLATE): Now bool, not int.
- (get_line, getseq, add_field_list): Now returns bool, not int.
- (decode_field_spec, add_field_list): Return true on success (not
- false), for consistency with the rest of the code. All uses changed.
-
- (tab): Now char, not unsigned char. This wasn't 100% necessary
- but is slightly cleaner.
- (prjoin): Hoist (tab ? tab : ' ') expression, to help the compiler.
-
- (empty_filler): Now const *.
-
- (make_blank): Remove; wasn't needed. Remove all calls.
- (main): Don't set uni_blank.nfields; zero is fine.
-
-2003-12-27 Jim Meyering <jim@meyering.net>
-
- * src/join.c: Include "quote.h".
- (min, max): Remove definitions.
- Make a few function parameters and corresponding
- locals `const'. Use bool for boolean variables.
- Use size_t (not int) for all counters and related index variables.
- (prjoin): Remove now-useless assertion.
- (string_to_join_field): New function.
- (main): Accept join fields as large as SIZE_MAX.
- (keycmp): Rename `min' to MIN and max to MAX.
-
-2003-12-26 Jim Meyering <jim@meyering.net>
-
- fold -s didn't work on e.g., alpha-based systems.
- * src/fold.c (fold_file): Adjust types (int->size_t) so that using
- x2nrealloc works properly on systems with differing sizes for int
- and size_t. Reported by Nelson Beebe.
-
- * src/fold.c: Use `bool' (not int) as the type for a few
- global variables.
-
-2003-12-23 Paul Eggert <eggert@twinsun.com>
-
- * src/ls.c (length_of_file_names_and_frills):
- Remove forward decl; not needed.
- (print_file_name_and_frills, length_of_file_name_and_frills):
- With -m, don't output spaces before inum or size.
- (print_with_commas): Don't output space just before newline.
-
-2003-12-24 Jim Meyering <jim@meyering.net>
-
- * tests/ls/Makefile.am (TESTS): Add m-option.
- * tests/ls/m-option: New file. Test for above fixes.
-
-2003-12-20 Jim Meyering <jim@meyering.net>
-
- * Version 5.1.0.
-
- * src/pr.c: Change type of global, buff_allocated, to size_t.
-
- * src/join.c [struct seq]: Change types of members count and alloc
- from `int' to `size_t'.
-
- * tests/Makefile.am (root-hint): Tweak wording.
-
- * src/du.c: Accept new option (-0, --null) that makes it so each
- output line is NUL-terminated rather than newline-terminated.
-
- * src/dd.c (apply_translations): Don't prohibit conv=unblock,sync.
- Reported by Volker Paul.
- * tests/dd/Makefile.am (TESTS): Add unblock-sync.
- * tests/dd/unblock-sync: New test for the above.
-
-2003-12-19 Jim Meyering <jim@meyering.net>
-
- * tests/misc/nohup: Double quote back-ticked expression,
- in case it ends up having an unexpected value.
-
- * tests/ls/no-arg: Use ls's -1 option in both runs.
-
- * src/du.c (fts_debug): New global.
- (FTS_CROSS_CHECK, DEBUG_OPT): Define.
- (main): Make fts use FTS_TIGHT_CYCLE_CHECK.
- (main) [DU_DEBUG]: Accept -d option.
-
-2003-12-18 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (format_user): Increment dired_pos via two statements,
- `dired_pos += width; dired_pos++;' rather than one,
- `dired_pos += width + 1;' since the latter could conceivably overflow.
- (format_group): Likewise.
- From Paul Eggert.
-
- * configure.ac: Require automake-1.8.
-
-2003-12-12 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.8. Regenerate dependent files.
-
-2003-12-08 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (news-date-check): New rule.
- (alpha beta major): Depend on it.
-
-2003-12-03 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: ls -l (and similar options) now adjust all columns to
- fit the data. Generalized from a suggestion by Leah Q for file sizes.
- * src/ls.c (INODE_DIGITS, LOGIN_NAME_MAX, ID_LENGTH_MAX): Remove.
- (format_user_width, format_group_width, unsigned_file_size,
- format_group): New functions.
- (block_size_width): Renamed from block_size_size.
- (inode_number_width, nlink_width, owner_width, group_width,
- author_width, major_device_number_width, minor_device_number_width,
- file_size_width): New vars.
- (clear_files): Initialize them.
- (gobble_file): Set them. Don't ceiling block_size_width to 7.
- (print_long_file): Use them.
- (gobble_file): Use a new local variable 'f' to make the code
- smaller and more consistent with other functions.
- (format_user): Output to stdout, not to a buffer, so that we
- don't have to worry about buffer overrun. Update dired_pos.
- (print_long_file): Don't put owner, group, author into buffer;
- just print them directly. Don't assume link counts and
- major and minor numbers fit into unsigned long int.
- * tests/cp/same-file, tests/mv/part-symlink: Don't assume that
- 'ls' output is fixed-width.
-
-2003-12-02 Jim Meyering <jim@meyering.net>
-
- * src/md5sum.c: Include sha1.h (reflect renaming: sha.h -> sha1.h.
-
-2003-11-27 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.7f. Regenerate dependent files.
-
-2003-11-24 Paul Eggert <eggert@twinsun.com>
-
- Parse floating-point operands and options in the C locale.
- POSIX requires this for printf, and we might as well be
- consistent elsewhere (tail, sleep, seq).
-
- * src/printf.c: Remove decls of strtod, strtol, strtoul; no longer
- needed now that we assume C89. Include "c-strtod.h".
- (xstrtod): Call c_strtod, not strtod.
- * src/sleep.c: Include "c-strtod.h".
- (main): Update xstrtod call to include new argument, c_strtod.
- * src/seq.c (scan_double_arg): Likewise.
- * src/tail.c (parse_options): Likewise.
-
-2003-11-24 Jim Meyering <jim@meyering.net>
-
- * tests/rm/fail-2eperm: Handle another errno variant (HPUX, EPERM).
- Reported by Mark Conty.
-
-2003-11-22 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (sc_xalloc_h_in_src): Remove rule. Subsumed by...
- (sc_system_h_headers): Do this test only if sys2.h exists.
-
-2003-11-20 Jim Meyering <jim@meyering.net>
-
- * tests/help-version: Ensure that the bug-reporting address is
- included in the --help output for every program.
- * tests/Makefile.am (TESTS_ENVIRONMENT): Add $PACKAGE_BUGREPORT.
-
- * src/ptx.c (usage): Output bug-reporting address.
- Reported by Dan Jacobson.
-
-2003-11-19 Jim Meyering <jim@meyering.net>
-
- * src/join.c (usage): Mention that FILE1 and FILE2 must be sorted
- on the join fields. Suggestion from Bruce Robertson.
-
-2003-11-18 Jim Meyering <jim@meyering.net>
-
- `od -c -w9999999' could segfault
- * src/od.c (dump): Use xnmalloc/free, not alloca.
-
-2003-11-16 Jim Meyering <jim@meyering.net>
-
- * Use autoconf-2.59. Regenerate dependent files.
-
- * tests/du/hard-link: Minor tweak: use mkdir -p.
-
- Fix read-from-free'd-buffer error detected by valgrind.
- * src/csplit.c (remove_line): Don't return a pointer to data in
- a freed buffer. Instead, arrange to free the buffer on the
- subsequent call.
-
- * tests/misc/csplit: New test for above fix.
-
-2003-11-11 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (extract_dirs_from_files): Avoid useless copy operations.
- This avoids a warning from valgrind about memcpy with overlapping
- source and destination.
-
- * configure.ac: Require automake-1.7.8.
-
-2003-11-09 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.7.9. Regenerate dependent files.
-
- * src/rm.c: Support new options: --preserve-root and --no-preserve-root.
- * src/chown.c: Likewise.
-
- * src/chown-core.c: Include "root-dev-ino.h".
- (chopt_init): Initialize new member.
- (change_file_owner): Support rm's new --preserve-root option.
-
- * src/remove.c: Include "root-dev-ino.h".
- (remove_cwd_entries): Remove now-obsolete FIXME comment.
- (remove_dir): Support rm's new --preserve-root option.
-
- * src/chown.c: Include "root-dev-ino.h".
- Add new options: --preserve-root and --no-preserve-root.
-
- * src/chmod.c: Include "root-dev-ino.h".
- (process_file): Use newly-factored-out ROOT_DEV_INO_CHECK and
- ROOT_DEV_INO_WARN macros.
- (get_root_dev_ino): Remove function definition, now that it's
- been moved to a separate file.
- (usage): Describe new options.
-
- * src/mv.c (rm_option_init): Initialized new member.
-
- * src/remove.h: Include "dev-ino.h".
- (struct rm_options): Add new member: root_dev_ino.
- * src/chown-core.h: Include "dev-ino.h".
- (struct Chown_option): Add new member: root_dev_ino.
-
-2003-11-06 Jim Meyering <jim@meyering.net>
-
- * src/paste.c (paste_parallel): Use `sizeof *var' rather than
- hard-coding `sizeof FILE*'.
-
-2003-11-05 Dennis Smit <ds@nerds-incorporated.org>
-
- * src/wc.c (main): Free `fstatus' so there is no confusion about
- whether it's leaked or not.
- * src/who.c (who): Likewise for `utmp_buf'.
-
-2003-11-05 Paul Eggert <eggert@twinsun.com>
-
- Fix 'cut' problems with size_t overflow and unsigned int.
- More generally, resize integer variables to fit use more precisely.
- * src/cut.c (ADD_RANGE_PAIR): Remove unnecessary parens.
- (struct range_pair): Make members to be of type size_t, not unsigned.
- (max_range_endpoint, eol_range_start): Now size_t, not unsigned.
- (suppress_non_delimited, output_delimiter_specified,
- have_read_stdin, print_kth, set_fields): Now bool, nt int.
- (delim): Now unsigned char, not int.
- (mark_printable_field, is_printable_field, is_range_start_index,
- set_fields, set_fields, cut_bytes, cut_fields):
- Use size_t, not unsigned, for field and byte counts.
- (hash_int): Use uintptr_t, not unsigned, for pointers converted
- to integers. This squeezes more info out of them.
- (set_fields, cut_bytes, cut_fields, main):
- Use bool, not int, for booleans.
- (set_fields): Allocate zeroed byte array with xzalloc, not xcalloc.
-
-2003-11-05 Paul Eggert <eggert@twinsun.com>
-
- * man/Makefile.am (check-programs-vs-x):
- Work even if $(programs) contains '$'.
- Work even if 'missing=1' in environment.
- Don't report an error simply because $(programs) outputs nothing.
-
-2003-11-05 Jim Meyering <jim@meyering.net>
-
- * Use autoconf-2.58. Regenerate dependent files.
-
- * src/tr.c (spec_init): Fix typo in last change.
-
- * src/sys2.h (case_GETOPT_VERSION_CHAR): Cast NULL to `(char *)' in
- call to variadic version_etc function, so that it works even on systems
- for which sizeof char* != sizeof int.
- * src/true.c (main): Likewise.
- * basename.c, chroot.c, cksum.c, dd.c, dirname.c, echo.c, expr.c:
- * factor.c, hostid.c, hostname.c, link.c, logname.c, nice.c, nohup.c:
- * pathchk.c, printenv.c, printf.c, pwd.c, setuidgid.c, sleep.c, stty.c:
- * sync.c, test.c, tsort.c, unlink.c, uptime.c, users.c, whoami.c, yes.c:
- Similarly, cast NULL to `(char *)' in call to variadic function,
- parse_long_options, so that it works even on systems for which
- sizeof char* != sizeof int.
- A similar problem was reported by Harti Brandt in
- http://mail.gnu.org/archive/html/bug-gnu-utils/2003-10/msg00320.html.
-
- * src/users.c (users): Free `utmp_buf' explicitly so that people
- don't mistake this for a real leak.
- Patch by Dennis Smit <ds@nerds-incorporated.org.
-
-2003-11-04 Paul Eggert <eggert@twinsun.com>
-
- * README: Document _POSIX2_VERSION.
-
-2003-11-04 Jim Meyering <jim@meyering.net>
-
- * src/tac.c (memrchr): Remove #if-0'd function.
- (tac_stdin_to_mem): Clean up #if-0'd code.
-
- * src/od.c (decode_format_string): Remove unnecessary casts.
- Use more maintainable `sizeof *var'.
- (main): Call decode_format_string rather than decode_one_format,
- now that `spec' may be NULL.
-
- * src/chmod.c (AUTHORS): Add my name.
-
- * src/split.c (next_file_name): Use `sizeof *var' rather than
- hard-coding `sizeof size_t'.
-
- * src/sort.c (new_key): Use xzalloc, not xcalloc (1, ...).
-
- * src/cut.c (ADD_RANGE_PAIR): Use x2nrealloc rather than xrealloc,
- to avoid potential overflow in pointer arithmetic.
- (set_fields): Use not `1', but rather `sizeof *printable_field' as
- second argument to xcalloc.
- * src/od.c (decode_format_string, dump_strings): Use x2nrealloc
- rather than xrealloc.
- * src/date.c (show_date): Likewise.
- * src/join.c (ADD_FIELD, initseq, getseq): Likewise.
- * src/pr.c (store_char): Likewise.
- * src/fold.c (fold_file): Likewise.
-
- * src/copy.c (triple_hash, triple_hash_no_name): Adjust to reflect
- type changes (unsigned int -> size_t) in hash.c.
- * src/cp-hash.c (src_to_dest_hash): Likewise.
- * src/du.c (entry_hash): Likewise.
- * src/ls.c (dev_ino_hash): Likewise.
- * src/cut.c (hash_int): Likewise. Declare function as static.
-
-2003-11-03 Jim Meyering <jim@meyering.net>
-
- * tests/misc/Makefile.am (TESTS_ENVIRONMENT): Define PACKAGE_VERSION.
- * tests/misc/fold: Fail the test immediately if we're not running
- the expected version of fold.
-
-2003-11-02 Jim Meyering <jim@meyering.net>
-
- * src/tr.c (append_normal_char, append_range, append_char_class)
- (append_repeated_char, append_equiv_class, spec_init): Use `sizeof *var'
- rather than `sizeof EXPLICIT_TYPE'. The former is more maintainable
- and usually shorter.
- * src/copy.c (copy_internal): Likewise.
- * src/join.c (initseq, add_field, make_blank): Likewise.
- * src/od.c (main): Likewise.
- * src/cp.c (make_path_private): Likewise.
- * src/tsort.c (new_item, record_relation): Likewise.
-
- * src/df.c (add_fs_type, add_excluded_fs_type, main): Likewise.
- (main): Also remove anachronistic cast of xmalloc return value.
- * src/ptx.c (alloc_and_compile_regex, main): Likewise.
- (main): Also remove anachronistic cast of xmalloc return value.
- * src/sort.c (inittables): Likewise.
- (sort): Also Split a long line.
-
-2003-10-25 Jim Meyering <jim@meyering.net>
-
- * src/copy.c (triple_hash, triple_hash_no_name): Adjust to reflect
- type changes (unsigned int -> size_t) in hash.c.
- * src/cp-hash.c (src_to_dest_hash): Likewise.
- * src/du.c (entry_hash): Likewise.
- * src/ls.c (dev_ino_hash): Likewise.
- * src/cut.c (hash_int): Likewise. Declare function as static.
-
-2003-10-21 Jim Meyering <jim@meyering.net>
-
- Don't fail when run with VERBOSE=yes.
- * tests/chgrp/basic: Do `set +x' before starting the subshell
- from which we invoke chgrp. Otherwise, the output from the
- VERBOSE=yes-induced `set -x' would result in spurious differences.
- Reported by Russel Coker via Michael Stone.
-
-2003-10-19 Jim Meyering <jim@meyering.net>
-
- chmod now uses fts to perform a directory traversal when -R is
- specified. Before, it operated on full path names, and as such
- would encounter the PATH_MAX (often 4096) limit.
-
- * src/chmod.c: Include "xfts.h".
- (process_file): Rename from change_file_mode.
- Adapt to be used with fts.
- (process_files): New function.
-
-2003-10-18 Jim Meyering <jim@meyering.net>
-
- * tests/du/deref-args: Ensure that du -D now dereferences all
- symlinks specified on the command line, not just those that
- reference directories.
-
- * basename.c, cat.c, chroot.c, cksum.c, comm.c, cp.c, csplit.c, cut.c:
- * dd.c, df.c, dirname.c, du.c, echo.c, env.c, expr.c, factor.c, head.c:
- * hostid.c, hostname.c, id.c, link.c, ln.c, logname.c, ls.c, md5sum.c:
- * mv.c, nice.c, nl.c, nohup.c, paste.c, pathchk.c, pinky.c, pr.c:
- * printenv.c, printf.c, pwd.c, rm.c, setuidgid.c, sleep.c, sort.c:
- * split.c, stty.c, sum.c, sync.c, tac.c, tail.c, tee.c, test.c:
- * touch.c, tsort.c, uniq.c, unlink.c, uptime.c, users.c, wc.c:
- * who.c, whoami.c, yes.c (AUTHORS): Revert the WRITTEN_BY/AUTHORS change
- of 2003-09-19. Now, AUTHORS is a comma-separated list of strings.
- Update the call to parse_long_options so that `AUTHORS, NULL' are the
- last parameters.
- * src/true.c (main): Append NULL to version_etc argument list.
- * src/sys2.h (case_GETOPT_VERSION_CHAR): Likewise.
-
-2003-10-17 Andreas Schwab <schwab@suse.de>
-
- * tests/mk-script: Get $srcdir from first parameter instead of
- hardcoding it.
- (main): Update usage.
-
- * tests/Makefile.am.in ($(srcdir)/$x-tests): Pass $(srcdir) as
- first argument of mk-script.
- ($(srcdir)/Makefile.am): Likewise. Prepend $(srcdir) to target.
-
-2003-10-17 Jim Meyering <jim@meyering.net>
-
- * src/mv.c (usage): Tweak descriptions of -i and -f so that the
- generated `man' page is more readable. Suggestion from Dan Jacobson.
-
- * src/chown-core.c (change_file_owner): Handle the cases in
- which fts_info indicates an error with the given entry.
-
- * src/du.c (main): Simply assign to bit_flags.
- Don't bother with bit arithmetic.
-
- * tests/chmod/no-x: New file.
- * tests/chgrp/no-x: New file.
- * tests/chmod/Makefile.am (TESTS): Add no-x.
- * tests/chgrp/Makefile.am (TESTS): Likewise.
-
- * src/du.c: Include "xfts.h".
- (du_files): Use xfts_open, rather than fts_open.
- * src/chown-core.c (chown_files): Likewise.
-
-2003-10-16 Jim Meyering <jim@meyering.net>
-
- * src/chgrp.c (main): Simply assign to bit_flags.
- Don't bother with bit arithmetic.
- * src/chown.c (main): Likewise.
- Rename a couple of local variables.
- Remove unnecessary casts.
-
- * src/tail.c (start_bytes): Rename local, remainder, to avoid
- gcc's warning about shadowing a global.
-
-2003-10-15 Jim Meyering <jim@meyering.net>
-
- chown and chgrp now accept POSIX-mandated -H, -L, -P options and
- use fts to perform a directory traversal when -R is specified.
- Before, they operated on full path names, and as such would
- encounter the PATH_MAX (often 4096) limit.
- They are more efficient. For example, before, chgrp -R would
- take almost 5 seconds to change about 2000 directories and fail
- (with `File name too long'), while now it succeeds on a hierarchy
- of depth 20,000 in 1/10 the time.
-
- * src/chown.c: Include "userspec.h" and "fts_.h".
- (WRITTEN_BY): Add my name.
- (getpwnam, getgrnam, getgrgid): Remove declarations.
- (endpwent): Remove definition.
- (usage): Update.
- (main): Handle new options.
- Call new function, chown_files rather than change_file_owner.
-
- * src/chgrp.c: Include "fts_.h".
- (WRITTEN_BY): Add my name.
- (MAXUID, MAXGID): Remove definitions. Use GID_T_MAX instead of
- the latter.
- (usage): Update.
- (main): Handle new options.
- Call new function, chown_files rather than change_file_owner.
-
- Rewrite to iterate through hierarchies using fts rather than
- via explicit recursion.
- * src/chown-core.c: Include "fts_.h"
- (change_file_owner): Rewrite to use FTS* and FTSENT* and to operate
- on a single file at a time.
- (chown_files): New function.
- * src/chown-core.h [enum Dereference_symlink]: Remove declaration.
- [struct Chown_option] (recurse, force_silent): Change type to `bool'.
- [struct Chown_option] (dereference): Remove member with ambiguous name.
- [struct Chown_option] (affect_symlink_referent): New member.
- (chown_files): New prototype.
-
- * tests/chgrp/recurse: Update tests accordingly.
- * tests/chgrp/posix-H: New tests for the above.
- * tests/chgrp/Makefile.am (TESTS): Add posix-H.
-
- * src/ln.c (usage): Clarify that --directory, -d, -F probably won't
- work even for superuser. Suggestion from Dan Jacobson.
-
-2003-10-14 Paul Eggert <eggert@twinsun.com>
-
- Fix some number-parsing bugs, e.g., "head -n 100k@" wasn't
- properly diagnosed.
- * lib/human.c, lib/xstrtoimax.c, lib/xstrtol.c, lib/xstrtol.h,
- lib/xstrtoul.c, lib/xstrtoumax.c: Sync with gnulib.
- * src/sort.c (parse_field_count): Handle the case where overflow
- and invalid suffix char are both reported.
-
-2003-10-14 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (decode_switches) [TIOCGWINSZ]: Comment out the
- warning-inducing test, ws.ws_col <= SIZE_MAX, since it was always
- true on Linux.
-
-2003-10-13 Paul Eggert <eggert@twinsun.com>
-
- Fix to avoid a denial-of-service attack if the display width is
- enormous. Also, clean up the code a bit by removing duplicate code.
-
- * src/ls.c (init_column_info): Remove forward decl; no longer needed.
- (calculate_columns): New function, that contains code that used
- to be common to print_many_per_line and print_horizontal.
- (print_many_per_line, print_horizontal): Use it.
- (decode_switches): Set max_idx here, not in calculate_columns.
- (print_current_files): Don't call init_column_info; calculate_columns
- now does that.
- (init_column_info): Don't allocate a lot more space than is needed
- to represent the current set of files. Allocate all the new
- size_t cells in one call to xnmalloc, rather than a row at a time.
-
-2003-10-13 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (init_column_info): Add another FIXME comment.
-
-2003-10-13 Paul Eggert <eggert@twinsun.com>
-
- Fix address-arithmetic bug in 'ls', reported by Georgi Guninski.
- Remove several arbitrary limits on hosts where int cannot represent
- all size_t values.
-
- * src/ls.c (struct bin_str.len, length_of_file_name_and_frills, indent,
- nfiles, files_index, tabsize, line_length, struct column_info.line_len,
- struct column_info.col_arr[0], max_idx):
- Now size_t, not int.
- (get_funky_string): Return bool indicating success, instead of
- a negative count to indicate failure. Store number of columns
- through new parameter OUTPUT_COUNT; that way, they can never
- go negative. Change equals_end from int to bool. All uses
- changed.
- (struct column_info.valid_len): Now bool, not int. All uses changed.
- (dired_dump_obstack, get_funky_string, clear_files,
- extract_dirs_from_files, print_current_files,
- print_many_per_line, print_horizontal, init_column_info,
- put_indicator, length_of_file_name_and_frills,
- print_with_commas): Use size_t, not int, for local variables
- that count sizes.
- (decode_switches): Decode sizes using xstrtoul, not xstrtol.
- Check for TIOCGWINSZ returing negative values (or values greater
- than SIZE_MAX!).
- (visit_dir, main, parse_ls_color, queue_directory, add_ignore_pattern,
- init_column_info):
- Use xmalloc and xnmalloc, not XMALLOC.
- (gobble_file): Use xnrealloc, not XREALLOC.
- (print_color_indicator): Remove now-unnecessary cast to size_t.
-
-2003-10-12 Paul Eggert <eggert@twinsun.com>
-
- * tests/du/no-x: Change wording of diagnostic to match latest du.c.
- * tests/sort/sort-tests: Remove from CVS; assume that people
- brave enough to check coreutils out from CVS can rebuild it.
-
-2003-10-12 Jim Meyering <jim@meyering.net>
-
- New options: --preserve-root and --no-preserve-root.
- * src/chmod.c (change_file_mode): Honor new option.
- (change_file_mode): Strip trailing slashes on directory
- argument passed to change_dir_mode.
- (get_root_dev_ino): New function.
- (main): Initialize global, root_dev_ino.
-
- * src/copy.c (copy_internal): Don't #ifdef-out simple uses of
- S_ISLNK or S_ISSOCK. The S_IS* macros are guaranteed to be defined
- via system.h.
- * src/chmod.c (change_file_mode): Likewise.
-
-2003-10-08 Jim Meyering <jim@meyering.net>
-
- * src/csplit.c (main): Remove obsolete FIXME.
-
-2003-10-07 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.7.8. Regenerate dependent files.
-
-2003-09-29 Paul Eggert <eggert@twinsun.com>
-
- csplit cleanup.
-
- * doc/coreutils.texi (csplit invocation):
- The regexp offset need not have a sign; POSIX requires support
- for signless offets.
-
- Be more careful about int widths. For example, remove some
- arbitrary limits by replacing 'unsigned' with 'size_t',
- 'uintmax_t', etc. Use standard bool rather than a homegrown type.
- * lib/Makefile.am (libfetish_a_SOURCES): Add xstrtoimax.c.
- * src/csplit.c (FALSE, TRUE, boolean): Remove. All uses changed
- to <stdbool.h> usage.
- (struct control): offset is now intmax_t, not int.
- repeat_forever is now bool, not int.
- (struct cstring): len is now size_t, not unsigned int.
- (struct buffer_record): bytes_alloc, bytes_used, num_lines are now
- size_t, not unsigned. start_line, first_available are now
- uintmax_t, not unsigned.
- (hold_count, control_used): Now size_t, not unsigned.
- (last_line_number, current_line, bytes_written):
- Now uintmax_t, not unsigned.
- (save_to_hold_area, red_input, keep_new_line, record_line_starts,
- create_new_buffer, get_new_buffer, load_buffer, find_line,
- process_regexp, split_file, new_control_record, extract_regexp,
- get_format_width, get_format_prec, max_out):
- size args, locals, and returned values are now size_t, not unsigned
- or int.
- (get_first_line_in_buffer, find_line, write_to_file,
- handle_line_error, process_line_count, regexp_error, process_regexp,
- split_file):
- File line, byte, and repetition counts are now uintmax_t, not unsigned.
- (check_for_offset): Don't require a sign before the offset.
- Use xstrtoimax to do the real work.
- (extract_regexp): Remove harmful cast of size to unsigned.
- 256 -> 1<<CHAR_BIT, for clarity.
- (get_format_flags): Return at most 3, to avoid worries about overflow.
-
- (bytes_to_octal_digits): Remove.
-
- (cleanup): Don't check whether output_stream is NULL, since
- close_output_file does that for us.
-
- (new_line_control, create_new_buffer): Use "foo *p = xmalloc
- (sizeof *p);" instead of the more long-winded alternatives.
-
- (get_new_buffer): Use O(1) algorithm for resizing a buffer
- to a much larger size, instead of an O(N) algorithm.
-
- (process_regexp): Use plain NULL rather than casted 0.
-
- (make_filename): Use %u, not %d, to format unsigned file number.
-
- (new_control_record): Use xrealloc exclusively, since it handles
- NULL reliably.
-
- (extract_regexp): Change misspelled word in diagnostic.
-
- (get_format_width): Even if a minimum field width is specified,
- allow room for enough octal digits to represent the value of
- the maximum representible integer. This fixes a potential
- buffer overrun. Calculate this room at compile-time, not
- at run-time; this removes the need for bytes_to_octal_digits.
- Check for overflow; this removes a FIXME.
-
- (get_format_prec): Don't allow precision to be signed; it's
- not ANSI. Check for overflow. Remove hardcoded "11" as
- default precision; this fixes a potential buffer overrun
- on hosts with wider size_t.
-
- (get_format_conv_type): Change local variable to be of type
- unsigned char, not int; this removes a potential subscript
- violation on hosts where char is signed.
-
- (max_out): Replace "for (;*p;)" with more-standard "while (*p)".
- Allow "%%" in format. Don't overflow when
- counting lots of percents.
-
- (usage): Default sprintf format is %02u, not %d.
-
-2003-10-05 Jim Meyering <jim@meyering.net>
-
- * src/chown-core.c (change_file_owner): Remove set-but-not-used local.
-
- * src/du.c (du_files): Mark diagnostic for translation.
-
-2003-10-04 Jim Meyering <jim@meyering.net>
-
- * src/du.c (du_files): Ignore any failure of fts_close.
- Give better diagnostics for failed fts_open.
-
- * src/du.c (MAX_N_DESCRIPTORS): Remove now-unused definition.
-
- Deprecate existing use of -H (aka --si).
- * src/du.c (enum) [HUMAN_SI_OPTION]: New member.
- [long_options]: Use HUMAN_SI_OPTION, not 'H'.
- (main): Warn that the meaning of -H will soon change to be
- POSIX compliant.
-
-2003-10-03 Jim Meyering <jim@meyering.net>
-
- * src/du.c: Accept --no-dereference (-P).
-
-2003-10-02 Jim Meyering <jim@meyering.net>
-
- * tests/du/trailing-slash: Adjust for slightly different output.
-
- Rewrite du.c to use fts.
- * src/du.c: Include "fts_.h", not ftw.h.
- (opt_dereference_arguments, arg_length, suffix_length): Remove globals.
- (IS_FTW_DIR_TYPE): Remove definition.
- (IS_DIR_TYPE): Define.
- (is_symlink_to_dir): Remove now-unnecessary function.
- (process_file, du_files): Rewrite to use fts.
-
- * tests/du/inaccessible-cwd: Ensure that even when run from an
- inaccessible directory, du can still operate on accessible
- directories elsewhere.
- * tests/du/Makefile.am (TESTS): Add inaccessible-cwd.
-
- * tests/rm/deep-1: Ensure that du can process a hierarchy
- of depth 400 while using no more than 50KB of stack space.
-
-2003-10-01 Akim Demaille <akim@epita.fr>
-
- * announce-gen (print_news_deltas): New function, extracted from main.
- (main): Make `news_file' an array.
- Use '...=s' => \@var for --news and --url-directory specs.
- Before there were a couple of portability problems.
-
-2003-09-28 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (sc_cast_of_alloca_return_value): New rule.
- (syntax-check-rules): Add it.
-
- * src/copy.c: Remove unnecessary cast of alloca, since now it's
- guaranteed to be (void *).
- * src/cp.c: Likewise.
- * src/join.c: Likewise.
- * src/ln.c: Likewise.
- * src/ls.c: Likewise.
- * src/od.c: Likewise.
- * src/sys2.h (ASSIGN_STRDUPA): Likewise.
-
-2003-09-27 Jim Meyering <jim@meyering.net>
-
- Don't exhaust virtual memory when processing large inputs.
- Fix this by removing csplit's internal free-list management;
- instead rely on malloc for that.
-
- * src/csplit.c (free_list): Remove global.
- (clear_all_line_control): Remove function.
- (get_new_buffer): Always use create_new_buffer to obtain a
- new buffer, rather than searching free_list.
- (free_buffer): Just call free.
- Reported by Nikola Milutinovic.
-
-2003-09-26 Jim Meyering <jim@meyering.net>
-
- * man/rm.x: Also list `chattr' in SEE ALSO section.
- Suggestion from Mark Hubbart.
-
-2003-09-25 Jim Meyering <jim@meyering.net>
-
- * configure.ac: Don't invoke AC_AIX or AC_MINIX explicitly, now
- that we use gl_USE_SYSTEM_EXTENSIONS, since it AC_REQUIREs them.
-
- * Use autoconf-2.57d. Regenerate dependent files.
-
-2003-09-24 Jim Meyering <jim@meyering.net>
-
- Minor efficiency tweak.
- * src/ln.c (PATH_BASENAME_CONCAT): Use memcpy rather than strcpy.
- (do_link): Likewise.
-
-2003-09-23 Jim Meyering <jim@meyering.net>
-
- * src/paste.c (paste_serial): Save errno after input error,
- to report proper errno value.
- Based on a patch from Paul Eggert.
-
- * src/tee.c (tee): Adjust fwrite arguments so that the return
- value is the number of bytes written.
-
-2003-09-16 Paul Eggert <eggert@twinsun.com>
-
- Don't assume ferror sets errno. Bug reported by Bruno Haible.
-
- * src/comm.c (compare_files): Save errno after input error,
- to report proper errno value.
- * src/fold.c (fold_file): Likewise.
- * src/od.c (check_and_close, skip, read_char, read_block): Likewise.
- * src/unexpand.c (unexpand): Likewise.
-
- * src/csplit.c (close_output_file): Don't report bogus errno value
- after ferror discovers an output error. We don't know the proper
- errno value, since it might have been caused by any of a whole
- bunch of calls, and it might have been trashed in the meantime.
- Fixing this problem will require much more extensive changes;
- in the meantime just say "write error".
- * src/od.c (check_and_close, dump, dump_strings): Likewise.
- * src/uniq.c (check_file): Likewise.
-
- * src/join.c (get_line): Report error right away if I/O fails,
- so that the proper errno value is used.
- * src/tac.c (tac_seekable, tac_file, save_stdin): Likewise.
- * src/tee.c (tee): Likewise.
- * src/uniq.c (check_file): Likewise.
-
- * src/od.c (skip): If a read fails, don't retry it later, so
- that we report the proper errno.
-
- * src/tac.c (tac_mem): Don't return a value; nobody uses it.
-
- * src/tee.c (tee): Once a write failure has occurred, don't bother
- writing anything more to that stream.
-
- * src/uniq.c (check_file): Check for ferror (stdout) even if
- ostream == stdout.
-
- * src/yes.c (UNROLL): Remove.
- (main): Exit immediately when write failure is detected.
- Simplify code by assigning to argv when argc == 1.
-
-2003-09-21 Paul Eggert <eggert@twinsun.com>
-
- * src/ptx.c: Switch encoding from Latin-1 to UTF-8.
- (WRITTEN_BY): Change "Franc,ois" (actually using
- c-with-cedilla in Latin-1) to "F.", so that it's ASCII, as
- xgettext requires.
-
-2003-09-19 Jim Meyering <jim@meyering.net>
-
- `du -D symlink-to-dir' would mistakenly omit the slash in
- lines like this: 24 symlink-to-dir/subdir
- * src/du.c (process_file): Fix offset calculation.
- Reported by Jeff Sheinberg as Debian bug #211591;
- http://bugs.debian.org/205251
-
- * tests/du/deref-args: New file/test for the above.
- * tests/du/Makefile.am (TESTS): Add deref-args.
-
- * src/du.c (process_file): Remove useless disjunct.
-
- * src/sys2.h (case_GETOPT_VERSION_CHAR): Rename parameter, Authors,
- to Written_by.
- * nearly all src/*.c files (WRITTEN_BY): Rename from AUTHORS.
- Begin each WRITTEN_BY string with `Written by ' and end it with `.'.
- Mark each WRITTEN_BY string as translatable.
-
- * basename.c, cat.c, chroot.c, cksum.c, comm.c, cp.c, csplit.c, cut.c:
- * dd.c, df.c, dirname.c, du.c, echo.c, env.c, expr.c, factor.c, head.c:
- * hostid.c, hostname.c, id.c, link.c, ln.c, logname.c, ls.c, md5sum.c:
- * mv.c, nice.c, nl.c, nohup.c, paste.c, pathchk.c, pinky.c, pr.c:
- * printenv.c, printf.c, pwd.c, rm.c, setuidgid.c, sleep.c, sort.c:
- * split.c, stty.c, sum.c, sync.c, tac.c, tail.c, tee.c, test.c:
- * touch.c, tsort.c, uniq.c, unlink.c, uptime.c, users.c, wc.c:
- * who.c, whoami.c, yes.c: Revert yesterday's changes.
- Instead, a subsequent change will embed `Written by ' in
- each string along with the author names.
-
- * src/true.c: Revert yesterday's changes.
- * src/sys2.h: Likewise.
-
-2003-09-18 Jim Meyering <jim@meyering.net>
-
- * basename.c, cat.c, chroot.c, cksum.c, comm.c, cp.c, csplit.c, cut.c:
- * dd.c, df.c, dirname.c, du.c, echo.c, env.c, expr.c, factor.c, head.c:
- * hostid.c, hostname.c, id.c, link.c, ln.c, logname.c, ls.c, md5sum.c:
- * mv.c, nice.c, nl.c, nohup.c, paste.c, pathchk.c, pinky.c, pr.c:
- * printenv.c, printf.c, pwd.c, rm.c, setuidgid.c, sleep.c, sort.c:
- * split.c, stty.c, sum.c, sync.c, tac.c, tail.c, tee.c, test.c:
- * touch.c, tsort.c, uniq.c, unlink.c, uptime.c, users.c, wc.c:
- * who.c, whoami.c, yes.c: Update AUTHORS definition to be a
- comma-separated list of strings and/or update the call to
- parse_long_options so that `AUTHORS, NULL' are the last parameters.
- * src/true.c (main): Append NULL to version_etc argument list.
- * src/sys2.h (case_GETOPT_VERSION_CHAR): Likewise.
-
- * src/sort.c (numcompare): Rename local, logb, to log_b to avoid
- shadowing the math function name. Also rename loga to log_a.
-
-2003-09-14 Jim Meyering <jim@meyering.net>
-
- * src/factor.c (print_factors): Give a separate diagnostic
- for numbers that are too large, but otherwise valid.
- Reported by Dániel Varga.
-
-2003-09-10 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.7.7. Regenerate dependent files.
-
- * tests/Makefile.am (all_programs): Use ../src/tr -s ' ' '\n' in place
- of `fmt -1'. Using the just-built tr is a little cleaner.
- Christian Krackowizer reported that HPUX 10.20 doesn't have fmt.
- * man/Makefile.am (programs, check-x-vs-1): Likewise.
-
-2003-09-09 Jim Meyering <jim@meyering.net>
-
- * src/copy.c: Alphabetize includes.
- Remove duplicate inclusion of "same.h".
-
-2003-09-08 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (GZIP_ENV): Remove --rsyncable.
- Didn't give enough of a benefit, mainly because it's not yet
- in wide enough use.
-
- * Version 5.0.91.
-
- * man/Makefile.am (programs): Use ../src, not $(srcdir)/../src.
- (check-programs-vs-x): Fail if $(programs) is empty.
-
- * src/remove.c: Add a comment.
-
-2003-09-07 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (D_INO, ENABLE_CYCLE_CHECK) [D_INO_IN_DIRENT]:
- Don't define. These symbols are no longer used.
-
- * tests/misc/tty-eof: Write ^D as \cD.
- Complete the change of 2003-08-02.
-
- * Makefile.maint (po-check): Use cvsu, so that a temporary source
- file in lib/ or src/ doesn't induce an unwarranted failure.
- Add a kludge to filter out the sole generated source file that
- also has translatable messages: src/false.c.
-
-2003-09-06 Jim Meyering <jim@meyering.net>
-
- * src/tail.c (enum): Add ALLOW_MISSING_OPTION.
- (parse_options): Give a diagnostic for (but still accept) the
- deprecated --allow-missing option.
-
-2003-09-04 Paul Eggert <eggert@twinsun.com>
-
- Don't ignore -S if input is a pipe. Bug report by Michael McFarland in
- <http://mail.gnu.org/archive/html/bug-coreutils/2003-09/msg00008.html>.
-
- * src/sort.c (sort_buffer_size): Omit SIZE_BOUND arg. Compute the
- size_bound ourselves. if an input file is a pipe and the user
- specified a size, use that size instead of trying to guess the
- pipe size. This has the beneficial side effect of avoiding the
- overhead of default_sort_size in that case. All callers changed.
- (sort): Remove static var size; now done by sort_buffer_size.
-
-2003-09-05 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.7.6b and autoconf-2.57b. Regenerate dependent files.
-
- * tests/tail-2/tail-n0f: Wait .5 seconds for backgrounded process
- to start, rather than just .1. Upon failure, print unexpected state.
-
-2003-09-04 Paul Eggert <eggert@twinsun.com>
-
- * src/head.c (elide_tail_lines_pipe): Don't assign 0 or
- SAFE_READ_ERROR to tmp->nbytes.
- * src/tail.c (pipe_lines, pipe_bytes): Likewise.
-
- * src/head.c (struct linebuffer): Change nbytes and nlines
- from unsigned int to size_t. unsigned int is safe (after the
- 2003-09-03 patch) but size_t is cleaner.
- * src/tail.c (struct linebuffer, struct charbuffer): Likewise.
- (pipe_bytes): Likewise for local variable 'i', which was 'int'.
-
- Standardize on BUFSIZ as opposed to other macro names and values.
- * src/head.c (BUFSIZE): Remove. All uses changed to BUFSIZ.
- * src/tail.c (BUFSIZ) [!defined BUFSIZ]: Remove.
- stdio.h has always defined it,
- and other code already assumes it's defined.
- * src/tr.c (BUFSIZ) [!defined BUFSIZ]: Likewise.
- (IO_BUF_SIZE): Remove; replace all uses with sizeof io_buf.
- (io_buf): IO_BUF_SIZE -> BUFSIZ.
-
-2003-09-04 Paul Eggert <eggert@twinsun.com>
-
- * src/seq.c (step): Default to 1.
- (print_numbers): Allow the output to be empty.
- (main): The default step is 1, even if LAST < FIRST;
- as per documentation.
- * tests/seq/basic (onearg-2): Output should be empty.
-
-2003-09-05 Jim Meyering <jim@meyering.net>
-
- * Makefile.cfg (wget_files): Temporarily disable, until master
- versions are restored to ftp.gnu.org.
-
- * configure.ac (AM_INIT_AUTOMAKE): Specify automake-1.7.6.
-
- Make seq's --width (-w) option work properly even when the
- endpoint requiring the larger width is negative and smaller than
- the other endpoint.
- * src/seq.c (get_width_format): Include `-' in the set of bytes
- allowed in a `simple' number (no decimal point, no exponent).
- Reported by Patrick Mauritz.
-
-2003-09-02 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: sort -t '\0' now uses a NUL tab.
- sort option order no longer matters, unless POSIX requires it.
- * src/sort.c (usage): Say "blanks" instead of "whitespace",
- Similar fixes for many comments.
- (TAB_DEFAULT): New constant, so that we can support NUL as
- the field separator.
- (tab): Now int, not char. Initialize to TAB_DEFAULT.
- (specify_sort_size): If multiple sizes are specified, use the largest.
- (begfield, limfield): Support NUL tab char.
- (set_ordering): Do not let -i override -d.
- (main): Report an error if incompatible -o or -t options are given.
- Report an error for "-t ''". Allow "-t '\0'" to specify a NUL tab.
-
-2003-09-05 Jim Meyering <jim@meyering.net>
-
- * tests/sort/Test.pm [o2, nul-tab]: New tests for the above.
-
-2003-09-03 Andreas Schwab <schwab@suse.de>
-
- Bug report and patch here:
- <http://mail.gnu.org/archive/html/bug-coreutils/2003-09/msg00009.html>
- * src/tail.c (pipe_lines): Don't truncate return value from safe_read.
- * src/head.c (elide_tail_lines_pipe): Likewise.
-
-2003-09-03 Jim Meyering <jim@meyering.net>
-
- * src/du.c (AUTHORS): Remove Larry McVoy's name, since the relatively
- small amount of code from him was first moved to lib/human.c, and was
- subsequently rewritten entirely.
- * src/df.c (AUTHORS): Likewise.
-
-2003-08-22 Lawrence Teo <lcteo@uncc.edu>
-
- * src/md5sum.c (split_3): Accept the BSD format for generic
- message digest modes. Currently works with BSD's MD5 and SHA1
- formats since these are the two algorithms presently used in
- coreutils. Updated comments to reflect this change.
- (bsd_split_3): Updated comments.
-
- * tests/md5sum/basic-1: New test to make sure that
- `md5sum --check' doesn't accept the BSD SHA1 format (adapted
- from `check-bsd' test in tests/sha1sum/basic-1).
-
- * tests/sha1sum/basic-1 (check-bsd2, check-bsd3): New tests for
- --check exit status and BSD SHA1 format (adapted from tests
- in tests/md5sum/basic-1).
-
-2003-08-30 Jim Meyering <jim@meyering.net>
-
- * src/ln.c (do_link): Use SAME_INODE rather than open-coding it.
-
- When source and destination arguments refer to the same file, reside
- on a partition (e.g. VFAT) on which distinct names may refer to the
- same directory entry (often due to variations in case), and when the
- link count for the file is 1, mv no longer unlinks the file. Instead,
- it gives the expected diagnostic that the source and destination are
- the same. WARNING: this is an incomplete fix. If the file happens
- to have a link count of 2 or greater, such an erroneous mv command
- will still unlink it.
- Although that is not possible on vfat or umsdos, it is possible on
- other file system types, e.g., ntfs, and hpfs.
- * src/copy.c (same_file_ok): Invoke same_name (which might still
- return false for names that refer to the same directory entry)
- only if the link count is 2 or more.
- * tests/mv/vfat: Show how to demonstrate the above problem.
- This test is not run.
- * tests/mv/Makefile.am (EXTRA_DIST): Add vfat.
-
-2003-08-27 Jim Meyering <jim@meyering.net>
-
- * src/who.c: Change meaning of -l from --lookup to --login, per POSIX.
- who's -l option has been eliciting an unconditional warning about
- this impending change since sh-utils-2.0.12 (April 2002).
-
- * src/paste.c (paste_parallel): Don't output `EOF' (aka -1) as a `char'.
- This would happen for nonempty files not ending with a newline.
- Reported by Dan Jacobson.
- * tests/misc/paste-no-nl: New file. Test for above-fixed bug.
- * tests/misc/Makefile.am (TESTS): Add paste-no-nl.
-
- * src/stat.c (print_it): Avoid buffer overrun that would
- occur when the user-specified format string ends with `%'.
- Patch by Tommi Kyntola.
- * tests/misc/stat-fmt: New file. Test for above-fixed bug.
- * tests/misc/Makefile.am (TESTS): Add stat-fmt.
-
-2003-08-26 Jim Meyering <jim@meyering.net>
-
- Apply changes from bison.
- * GNUmakefile (SHELL): Define to `sh', if necessary.
- Add copyright.
- * Makefile.maint (WGETFLAGS): Define to `-C off'.
- Update all uses of $(WGET).
-
-2003-08-22 Akim Demaille <akim@epita.fr>
-
- * Makefile.cfg (local-checks-to-skip): New.
- * Makefile.maint (local-check): Rename as...
- (local-checks-available): this.
- (local-check): New.
-
-2003-08-26 Akim Demaille <akim@epita.fr>
-
- * announce-gen (print_changelog_deltas): Neutralize "<#" as
- "<\#" to avoid magic from Gnus when posting parts of this script.
-
-2003-08-25 Jim Meyering <jim@meyering.net>
-
- * src/stat.c (main): Warn about use of deprecated `-l' option.
-
-2003-08-22 Jim Meyering <jim@meyering.net>
-
- * src/stat.c (do_stat): For link count at end of line, use %h format,
- instead of %-5h. The latter would make stat emit trailing spaces.
- Reported by Dan Jacobson.
-
-2003-08-20 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (EXTRA_DIST): Add .x-sc_space_tab .x-sc_sun_os_names
-
-2003-08-19 Jim Meyering <jim@meyering.net>
-
- * src/system.h: Include stdlib.h unconditionally,
- as we're now assuming that part of hosted C89.
-
-2003-08-18 Jim Meyering <jim@meyering.net>
-
- * src/sys2.h (textdomain, bindtextdomain) [! ENABLE_NLS]: Define away,
- to avoid warnings from gcc.
-
-2003-08-17 Jim Meyering <jim@meyering.net>
-
- Avoid unnecessary and sometimes time-consuming hostname lookups.
- * src/who.c (print_user): Use strchr, not strrchr.
- * src/pinky.c (print_entry): Likewise.
- Patch by Michael Stone.
- This fixes a typo I introduced in who-users.c on 1996-02-23.
-
- * Makefile.maint (makefile-check): Add 0-9 to the range of characters
- disallowed between `@...@'.
-
-2003-08-16 Paul Eggert <eggert@twinsun.com>
-
- * configure.ac (fu_cv_sys_truncating_statfs): Remove; now
- done by gnulib .m4 files.
- (jm_DUMMY_1): Require gl_READUTMP, not jm_PREREQ_READUTMP.
- * src/sys2.h (strtoull): Remove unused declaration.
-
-2003-08-16 Jim Meyering <jim@meyering.net>
-
- * man/Makefile.am (.x.1): Ensure that generated PROGRAM.1 files
- are read-only.
-
- * src/tail.c (tail_lines): Fix a potential (but very hard to exercise)
- race condition bug. The bug would be triggered when tailing a file
- with file pointer not at beginning of file, and where the file was
- truncated to have a length of less than the initial offset at just
- the right moment (between the two lseek calls in this function).
-
- An invalid initial value for *read_pos would result in
- `tail -n0 -f FILE' and `tail -c0 -f FILE' doing what amounted to a
- busy-wait rather than sleeping between iterations. The bug manifests
- itself only when tailing regular files that are initially nonempty.
- * src/tail.c (tail_bytes): Set *read_pos to new file offset after
- each xlseek call.
- (tail_lines): Likewise, after lseek calls.
- Reported by Nick Estes. See http://bugs.debian.org/205251 for details.
- * tests/tail-2/tail-n0f: New file. Test for above fix.
- * tests/tail-2/Makefile.am (TESTS): Add tail-n0f.
-
-2003-08-15 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (sc_space_tab): Use exclusion list in separate file.
- (sc_sun_os_names): Likewise.
- * .x-sc_space_tab, .x-sc_sun_os_names: New files.
-
- * man/help2man: Remove some SPACEs before TAB.
-
-2003-08-14 Paul Eggert <eggert@twinsun.com>
-
- * Makefile.maint (LC_ALL): Set to C.
- * man/Makefile.am (ASSORT): New var.
- (check-x-vs-1, programs): Use it.
- * src/Makefile.am (ASSORT, check-README, ../AUTHORS): Likewise.
- * tests/Makefile.am (ASSORT, all_programs): Likewise.
-
-2003-08-11 Jim Meyering <jim@meyering.net>
-
- fold -s -wN would infloop for N < 8 with TABs in the input.
- E.g., this would not terminate: printf 'a\tb' | fold -w2 -s
- * src/fold.c (fold_file): Move contents of `else'-block
- out of conditional so it's used also for --spaces (-s).
- * tests/misc/fold: Test for the above fix.
- * tests/misc/Makefile.am (TESTS): Add fold.
-
-2003-08-10 Jim Meyering <jim@meyering.net>
-
- * src/nice.c [!NICE_PRIORITY]: Include <sys/resource.h> after
- system.h so the types from time.h and sys/time.h are available.
- It appears that this is necessary for OpenBSD, NetBSD, and
- Darwin 6.5 (MacOS 10.2.5). Reported by Nelson Beebe.
-
-2003-08-06 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: Add support for setting file timestamps to microsecond
- resolution, on hosts that support this.
- * src/copy.c, src/cp.c, src/install.c, src/touch.c: Include utimens.h.
- * src/copy.c (copy_internal):
- Set file timestamps with utimens, not utime.
- * src/cp.c (re_protect): Likewise.
- * src/install.c (change_timestamps): Likewise.
- * src/touch.c (newtime, touch, main): Likewise.
-
-2003-08-09 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (sc_sun_os_names): New rule based on a regexp
- from Paul Eggert.
- (syntax-check-rules): Add it.
-
- * src/tail.c (main): Tweak Solaris OS version number in comment.
- * src/wc.c (wc): Likewise
- * tests/tail-2/fflush: Likewise.
-
- * src/tail.c: Add new undocumented option, --presume-input-pipe.
- (pipe_lines): Use memchr to skip lines, rather than an explicit loop.
-
-2003-08-08 Paul Eggert <eggert@twinsun.com>
-
- Use new gnulib 'extensions' module.
- * configure.ac: Invoke gl_USE_SYSTEM_EXTENSIONS instead of
- AC_GNU_SOURCE.
-
-2003-08-08 Paul Eggert <eggert@twinsun.com>
-
- * tests/du/basic: Ensure that a/b/F has at least 65 bytes too.
-
-2003-08-09 Jim Meyering <jim@meyering.net>
-
- * tests/misc/split-fail: Reflect that `split -a 0' is now accepted.
- For tests of obsolete behavior, don't presume that unsetting
- _POSIX2_VERSION is equivalent to _POSIX2_VERSION=199209.
-
-2003-08-07 Paul Eggert <eggert@twinsun.com>
-
- * doc/coreutils.texi (split invocation):
- Add -d or --numeric-suffixes option to 'split'.
- From a suggestion by Jesse Kornblum.
- * src/split.c (suffix_alphabet): New var.
- (longopts, usage, next_file_name, main): Support -d.
- (next_file_name, main): Allow -a0, as POSIX requires.
- (next_file_name): Don't assume ASCII-like encoding;
- 'a' through 'z' are not contiguous in EBCDIC.
-
-2003-08-05 Paul Eggert <eggert@twinsun.com>
-
- Merge getline from gnulib.
- * lib/getline.h, lib/getline.c, m4/getline.m4: Merge from gnulib.
- * lib/getndelim2.h, lib/getndelim2.c, m4/getndelim2.m4, m4/ssize_t.m4:
- New files, from gnulib.
- * lib/getdelim2.c, lib/getdelim2.h: Remove.
- * lib/Makefile.am (libfetish_a_SOURCES): Change getdelim2.c and
- getdelim2.h to getndelim2.c and getndelim2.h.
- * m4/jm-macros.m4 (jm_MACROS): Use gl_GETNDELIM2 rather than
- checking for getdelim.
- (jm_CHECK_ALL_TYPES): Use gt_TYPE_SSIZE_T for ssize_t rather
- than rolling our own.
- * src/cut.c: Include getndelim2.h rather than getdelim2.h.
- (cut_fields): Invoke getndelim2 rather than getdelim2.
-
-2003-08-04 Jim Meyering <jim@meyering.net>
-
- * src/sort.c (main): Use unsigned int instead of int for `nsigs'
- and for the indices to iterate through nsigs.
-
-2003-08-02 Paul Eggert <eggert@twinsun.com>
-
- * src/sort.c: Minor code cleanups, mostly to use more accurate
- types and to remove unnecessary casts.
- (min, max): Remove. All uses changed to MIN and MAX.
- (hard_lc_collate, hard_LC_TIME, struct buffer.eof, struct
- keyfield.skipsblanks, struct keyfield.skipeblanks, struct
- keyfield.numeric, struct keyfield.general_numeric, struct
- keyfield.month, struct keyfield.reverse, reverse, unique,
- have_read_stdin): Now bool, not int. All uses changed.
- (eolchar): Now char, not int.
- (struct keyfield.ignore): Now bool const *, not int *.
- (struct keyfield.translate): Now char const *, not char *.
- (struct month.name): Likewise.
- (blanks, nonprinting, nondictionary): Now bool[], not int[].
- (cleanup, inittables, keycompare, check, mergefps, first_same_file,
- check, sort, main): Use const * pointers when possible.
- (month_cmp): Rewrite to avoid casts.
- (inittables): Initialize tables unconditionally, to avoid branches.
- (fillbuf): Return bool, not int. All uses changed.
- (fillbuf, keycompare, new_key, main):
- Use SIZE_MAX rather than (size_t) -1.
- (trailing_blanks): Renamed from trim_trailing_blanks.
- Return the number of blanks to trim. All uses changed.
- (getmonth): Use trailing_blanks rather than open code.
- (keycompare): Do not cast char * to unsigned char *; not needed.
- CMP_WITH_IGNORE converts args to UCHAR, so no need to convert it
- ourselves.
- (compare, main): Use | rather than || to avoid jumps.
- Replace "diff = NONZERO (alen)" with "diff = 1", since alen must
- be nonzero there.
- (check, first_same_file, sort, main):
- Use bool instead of int local vars when possible.
- (check): Merge the old 'checkfp' and 'check' into a single function,
- that returns a boolean (true if the file was ordered).
- All uses changed.
- (main): Use int instead of unsigned for iterating through nsigs.
- Rename local var "posix_pedantic" to "posixly_correct".
-
-2003-08-02 Jim Meyering <jim@meyering.net>
-
- * src/nice.c [!NICE_PRIORITY]: Include <time.h> before <sys/resource.h>
- to avoid compilation error on Ultrix. Reported by Christian Krackowizer.
-
- * src/cut.c (cut_fields): Don't read again after encountering an
- initial EOF. E.g., `cut -f2' would do so.
- * tests/misc/tty-eof: Add a test for the above fix.
-
- * src/sort.c (sortlines): Add description and references.
- From Paul Eggert.
-
- * tests/Makefile.am (TESTS_ENVIRONMENT): Set PATH so that
- the tests in help-version will use the just-built binaries.
- Reported by Christian Krackowizer.
-
-2003-07-31 Paul Eggert <eggert@twinsun.com>
-
- * NEWS: Add --rfc-2822 option to GNU date.
- * doc/coreutils.texi (Time directives, Options for date, Examples
- of date): Likewise.
- * src/date.c (long_options, usage, main): Likewise.
- * doc/getdate.texi (General date syntax): Likewise.
- * doc/coreutils.texi (Options for date): Fix a typo in format:
- it's now %d not %_d. Add URLs.
-
-2003-08-01 Jim Meyering <jim@meyering.net>
-
- * tests/shred/remove: Ensure that $? is 0 for the final `exit 0'.
- Otherwise, with at least the /bin/sh from HPUX 10.20,
- the trap code would end up converting that to exit 1 and thus an
- unexpected test failure. Reported by Christian Krackowizer.
-
-2003-07-31 Paul Eggert <eggert@twinsun.com>
-
- * src/ptx.c: Do not include bumpalloc.h.
- (WORD_TABLE): New member alloc.
- (ALLOC_NEW_WORD): Remove.
- (occurs_alloc): New var.
- (digest_word_file, find_occurs_in_text): Check for arithmetic
- overflow when computing table size. Use xrealloc rather than
- bumpalloc primitives.
-
-2003-07-29 Jim Meyering <jim@meyering.net>
-
- * Version 5.0.90.
-
- * README: When running tests as root, suggest using
- sudo with NON_ROOT_USERNAME=$USER.
-
- * tests/Makefile.am (all_programs): Makefile is in ../src, not
- $(srcdir)/../src.
-
-2003-07-28 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (GZIP_ENV): Try Debian/gzip's new --rsyncable option.
-
-2003-07-28 Paul Eggert <eggert@twinsun.com>
-
- * lib/stdbool.hin (_Bool): Make it signed char, instead of
- an enum type, so that it's guaranteed to promote to int.
- * src/sort.c (sortlines_temp): Undo previous change.
-
-2003-07-28 Jim Meyering <jim@meyering.net>
-
- * src/sort.c (sortlines_temp): Declare local `swap' to be `int', not
- `bool'. Otherwise, at least one buggy compiler (alpha gcc-2.95.4)
- would cause lines[-1 - swap] (with swap = false) to evaluate to
- lines[4294967295].
-
-2003-07-27 Jim Meyering <jim@meyering.net>
-
- * tests/priv-check (my_uid): Use `!', not `^' in case pattern `[!0-9]',
- since /bin/sh of at least NetBSD 1.6 and OpenBSD 3.2 don't accept `^'.
-
- * src/remove.c (prompt) [! recursive]: Don't prompt about unwritable
- directories, as required by POSIX. Reported by Karl Berry.
- * tests/rm/dir-no-w: New file. Test for the above fix.
- * tests/rm/Makefile.am (TESTS): Add dir-no-w.
-
- * tests/mk-script: Emit `$xx', not its expansion.
-
-2003-07-27 Paul Eggert <eggert@twinsun.com>
-
- This change was inspired by a similar proposal by Stepan Kasal.
- * src/sort.c (mergelines, sortlines_temp): New functions.
- (sortlines): Use them, to reduce the number of times that
- we need to copy 'struct line' values. This improved CPU
- performance by about 30% on one 18 MB test.
- (sort): Don't invoke sortlines unless we have 2 or more lines.
-
-2003-07-26 Stepan Kasal <kasal@ucw.cz>
-
- * src/sort.c (sort): Don't require two `struct line's per text line,
- the new sort algorithm requires just 1.5.
-
-2003-07-27 Jim Meyering <jim@meyering.net>
-
- * src/pathchk.c (validate_path): Use %lu, not %ld.
- From Paul Eggert.
- * src/cut.c (is_printable_field): Simplify bit arithmetic.
- From Paul Eggert.
- * src/ls.c (sort_files): Put `volatile' in the right place.
- From Paul Eggert.
-
-2003-07-26 Jim Meyering <jim@meyering.net>
-
- Use only one bit per field/offset in array, not one `int'.
- * src/cut.c (printable_field): Change type to `unsigned char'.
- (mark_printable_field, is_printable_field): New functions.
- Use them in place of all direct accesses of `printable_field'.
-
- * src/expand.c (parse_tabstops): Detect overflow properly.
- * src/cut.c (set_fields): Likewise.
-
- * src/rm.c: Include "dirname.h".
- (usage): Use base_name (program_name) in body of --help output.
- This lets me...
- * man/Makefile.am (.x.1): ...back out the kludge of 2003-07-22.
- Idea from Brendan O'Dea, who suggested using
- `program_name = basename (argv[0]);' everywhere --
- can't do that, but using base_name works just fine here.
-
- * src/Makefile.am (AM_INSTALLCHECK_STD_OPTIONS_EXEMPT): Exempt test.
-
-2003-07-24 Paul Eggert <eggert@twinsun.com>
-
- Fix some POSIX-compliance problems with 'test'. This makes
- 'test' more compatible with Bash.
-
- * NEWS, doc/coreutils.texi: Document the following.
- * src/test.c: Include exitfail.h.
- (TEST_FAILURE): New constant, used for exit status if 'test' fails.
- (test-syntax_error): Use it.
- (binary_operator): Now takes bool arg specifying whether left operand
- is -l ARG, so that caller determines this rather than us.
- All uses changed.
- (term): Use posixtest to evaluate parenthesized subexpressions.
- (unary_operator, one_argument): Remove support for -t without operand.
- (one_argument): Take argument from argv[pos].
- (one_argument, two_arguments, three_arguments): Advance pos.
- All callers changed.
- (three_arguments): Look for binary ops before "!". Then look
- for parenthesized one_argument expressions, instead of trusting
- expr () to do the right thing.
- (posixtest): Now takes number of args. All callers changed.
- Treat "( A B )" like "A B".
- (main): Set exit_failure to TEST_FAILURE. Don't depend on
- POSIXLY_CORRECT, as we now conform to POSIX by default.
- (main) [!LBRACKET]: Do not recognize "--help" or "--verbose" unless.
- * tests/test/Test.pm (test_vector): Add several tests to check
- the above. Syntax errors now exit with status 2, not 1.
- * man/Makefile.am (mapped_name): Use `../src/[' binary to create test.1.
-
-2003-07-26 Jim Meyering <jim@meyering.net>
-
- * tests/help-version: Adjust for above change in test behavior:
- `[' exits with 2, not 1, and test doesn't accept --help or --version.
-
- * Makefile.maint (ME): Don't use trick suggested in Make manual.
- It doesn't work for make-3.79.1. Reported by Christian Krackowizer.
-
- * Makefile.maint (sc_system_h_headers): Another syntax check.
- (syntax-check-rules): Add it to the list.
-
- * src/pathchk.c (validate_path): Cast strlen value to `unsigned long'
- so it matches `%ld' format even on 32-bit systems.
-
- * src/fmt.c (flush_paragraph): Cast field width to `int' to
- avoid warning on 64-bit systems.
-
- * src/ls.c (sort_files): Make `func' volatile, so it can't be
- clobbered by a `longjmp' into this function.
-
-2003-07-25 Jim Meyering <jim@meyering.net>
-
- * src/pathchk.c (validate_path): Use %ld format (not %d) for size_t
- value.
-
- * tests/misc/split-fail: Disable the --line-bytes=$_4gb test,
- because it'd evoke spurious failure on 64-bit systems.
-
-2003-07-24 Jim Meyering <jim@meyering.net>
-
- * src/dd.c (usage): Document the fact that SIGUSR1 makes dd
- output its current record counts. Reported by Jurriaan.
-
- * tests/wc/Test.pm (test_vector): Disable the `PIPE' tests when running
- `wc' with no options. This goes along with the change of 2003-07-20.
-
-2003-07-23 Jim Meyering <jim@meyering.net>
-
- Don't include headers already included by system.h:
- * src/tr.c: Don't include errno.h.
- * src/true.c: Don't include version-etc.h.
- * src/test.c: Don't include limits.h or error.h.
- * src/stat.c: Don't include unistd.h or time.h.
- * src/readlink.c: Don't include stdlib.h, unistd.h, or limits.h.
- * src/pr.c: Don't include time.h.
- * src/pathchk.c: Don't include errno.h.
- * src/nice.c: Don't include sys/time.h.
- * src/ls.c: Don't include stdlib.h.
-
- * basename.c, cat.c, chroot.c, cksum.c, comm.c, csplit.c, cut.c, date.c:
- * dd.c, dirname.c, echo.c, env.c, expand.c, expr.c, factor.c, fmt.c:
- * fold.c, head.c, hostid.c, hostname.c, id.c, join.c, kill.c, logname.c:
- * md5sum.c, nice.c, nl.c, nohup.c, od.c, paste.c, pathchk.c, pinky.c:
- * pr.c, printenv.c, printf.c, ptx.c, pwd.c, seq.c, setuidgid.c, shred.c:
- * sleep.c, sort.c, split.c, stat.c, stty.c, su.c, sum.c, tac.c, tail.c:
- * tee.c, test.c, tr.c, true.c, tsort.c, tty.c, uname.c, unexpand.c:
- * uniq.c, uptime.c, users.c, wc.c, who.c, whoami.c, yes.c:
- Don't include closeout.h.
-
- * tests/rm/fail-2eperm: Add a check for whether $NON_ROOT_USERNAME
- can access the required version of rm.
- * tests/rm/Makefile.am (TESTS_ENVIRONMENT): Define PACKAGE_VERSION.
-
- * tests/cut/Test.pm (out-delim3a): New test.
-
- * man/help2man: Update to version 1.33.
-
- * src/expand.c (parse_tabstops): Detect overflow in tabstop sizes.
-
- * src/dircolors.c: Include xstrndup.h.
- (xstrndup): Remove function, now that it's been factored out into
- it's own file.
-
-2003-07-22 Paul Eggert <eggert@twinsun.com>
-
- * src/wc.c (wc): Fix typo in computation of file from file_x,
- which caused the former to be used uninitialized if file_x was
- nonzero.
-
-2003-07-22 Jim Meyering <jim@meyering.net>
-
- * src/cut.c (set_fields): Use xcalloc in place of xmalloc+memset.
-
- * man/Makefile.am (.x.1): Substitute 's,$t/$*,$*,' on output of
- help2man, to avoid having `rm.td/rm' appear in rm.1. Reported by
- Thomas Luzat. See http://bugs.debian.org/202413 for details.
-
- * src/cut.c (main) [lint]: Initialize spec_list_string to avoid warning.
-
- * src/hostid.c: Don't include <unistd.h>. system.h already does that.
-
- * src/cut.c (set_fields): Mark all selected indices before trying to
- determine range endpoints.
- * tests/cut/Test.pm: New test for the above fix.
-
- Begin to address this comment: What if someone wants to
- extract the 1,000,000-th field of some huge input file?
- The first step is to rearrange things so that the values
- in the printable_field array are all 0/1 rather than 0/1/2.
- * src/cut.c (RANGE_START_SENTINEL): Remove.
- Store range-start indices in a hash table, rather than
- overloading the `printable_field' array.
- (range_start_ht): New global.
- (hash_int, hash_compare_ints, is_range_start_index): New functions.
- (print_kth): Use is_range_start_index; don't test printable_field.
- (set_fields): Detect overflow.
- (set_fields): Insert each range-start index into range_start_ht.
- (main): Call set_fields only once, and only after
- output_delimiter_specified and (if required) range_start_ht have
- been defined.
-
-2003-07-20 Paul Eggert <eggert@twinsun.com>
-
- * src/wc.c (get_input_fstatus): Fix typo: `stat' was being
- invoked with a null pointer when there were no file arguments.
-
-2003-07-20 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (sc_changelog): Add another nit-picky check.
-
- * src/wc.c (write_counts): Add a comment.
- (wc): Rename `file' parameter.
- Set new local, `file', to be the file name, or (when it's NULL)
- _("standard output") so that all uses of `file' use the proper value.
- Use STREQ, not strcmp.
-
-2003-07-20 Paul Eggert <eggert@twinsun.com>
-
- wc count field widths now are heuristically adjusted depending
- on the input size, if known. If only one count is printed, it
- is guaranteed to be printed without leading spaces.
-
- Previously, wc did not align the count fields if
- POSIXLY_CORRECT was set, but POSIX did not actually require
- this undesirable behavior, so it has been removed.
-
- * NEWS: Document this.
- * doc/coreutils.texi (wc invocation): Likewise.
-
- * src/wc.c (number_width): New var.
- (posixly_correct): Remove.
- (struct fstatus): New struct.
- (write_counts): Output fields of width number_width.
- Do not worry about POSIXLY_CORRECT.
- Use null file, not empty-string file, to denote stdin,
- since "" is a valid file name on some hosts.
- (wc, wc_file): New arg fstatus. Use it to avoid invoking fstat
- if possible.
- (wc): Avoid problems if end_pos - current_pos overflows.
- Do not print odd message if stdin has a read error.
- (get_input_fstatus, compute_number_width): New functions.
- (main): Use them to implement the new behavior.
- Ignore POSIXLY_CORRECT.
-
- * tests/wc/Test.pm: Adjust to the new output widths.
-
-2003-07-19 Jim Meyering <jim@meyering.net>
-
- * tests/rm/fail-eperm: Don't create temporary directory --
- we don't use it.
-
- * tests/shred/remove: Don't open-code test for UID != 0.
- Use priv-check's require-non-root instead.
- Update to use newer framework.
-
- * tests/help-version (expected_failure_status_expr): Record that
- expr exits with status of 3 for e.g., a write error.
-
- * tests/priv-check: Use `id -u' to see if we're running as root,
- rather than trying go write to an write-protected file.
- When running as root, ensure $NON_ROOT_USERNAME is valid.
- When running as root with `require-non-root', ensure that `.'
- is writable by $NON_ROOT_USERNAME, then reinvoke $0 set-user-ID
- to $NON_ROOT_USERNAME. If `.' is not writable, then skip the test.
-
- * src/printenv.c: Include "exitfail.h".
- (main): Set exit_failure rather than calling close_stdout_set_status.
- * src/date.c: Likewise.
- * src/sort.c: Likewise.
- * src/tty.c: Likewise.
-
-2003-07-18 Jim Meyering <jim@meyering.net>
-
- * tests/touch/not-owner: Update to use newer framework.
-
- * tests/rm/fail-eperm: Use $srcdir/../priv-check, create a temporary
- directory, and remove Perl-coded `you may not run as root' test.
- * tests/cp/fail-perm: Use $srcdir/../priv-check, rather than
- hard-coding something not quite equivalent.
- Paul Jarc reported the inconsistent diagnostics.
-
- * src/sort.c (main): Use close_stdout via atexit.
- Now `sort --version' and `sort --help' fail, as they should
- when their output is redirected to /dev/full.
-
- * src/su.c (usage): Don't call close_stdout here.
- (main): Use close_stdout via atexit.
- Now `su --version > /dev/full' fails, as it should.
- Somehow, the change of 2000-05-07 that purports to fix this
- was not checked in.
-
- * tests/help-version (--help/--version vs. /dev/full): Special-case
- `[' to protect it from expected_failure_status-`eval'.
-
- * src/uniq.c (writeline): Use a SPACE, not a TAB between the
- count and the corresponding line, as required by POSIX.
- Reported by Clement Wang.
- * tests/uniq/Test.pm (101, 102): Update tests of -c accordingly.
-
- * tests/expr/basic: Add tests for when exit status is 2.
-
- * src/nohup.c (NOHUP_FOUND_BUT_CANNOT_INVOKE, NOHUP_FAILURE):
- Use an anonymous `enum', rather than #define.
-
-2003-07-17 Paul Eggert <eggert@twinsun.com>
-
- * src/expr.c: Include "exitfail.h", "quotearg.h".
- (EXPR_INVALID, EXPR_ERROR): New constants.
- (nomoreargs, null, toarith, nextarg): Return bool, not int.
- (syntax_error): New function, exiting with status 2. Use it
- insteading of printing "syntax error" ourselves.
- (main): Initialize exit_failure to EXPR_ERROR.
- Exit with EXPR_INVALID on syntax error (too few arguments).
- (nextarg): Use strcmp, not strcoll; strcoll might return
- an undesirable 0, or might fail.
- (docolon, eval4, eval3): Exit with status 3 on invalid argument type
- or other such error.
- (eval2): Report an error if strcoll fails in a string comparison.
- * src/sort.c: Include "exitfail.h".
- (main): Set exit_failure, not xalloc_exit_failure and
- xmemcoll_exit_failure.
- * tests/expr/basic: Invalid value exits with status 3, not 2.
-
-2003-07-16 Jim Meyering <jim@meyering.net>
-
- * configure.ac (AC_INIT): Use 5.0.90 as the version, rather than 5.0.2,
- per GNU maintainer guidelines. The next non-beta release will be 5.1.
-
- This script would have caught at least two recent bugs:
- those in [ and kill.
- * tests/help-version: Revive this script.
- It wasn't doing anything useful, since $all_programs wasn't being
- defined by the invoking Makefile.am.
- Reflect that nohup is no longer a script, so don't exclude it.
- Add framework to handle the programs added since it was last run:
- kill, stat, unlink, [, link, readlink.
- Fix path-related problems deriving from the move of this script
- from src/ to its present location.
- * tests/Makefile.am (all_programs): Define.
- (TESTS_ENVIRONMENT): Use it.
-
- * src/kill.c (main): Fix bug introduced on 2003-05-10 (for 5.0.1)
- whereby kill would always attempt to operate on argv[0] and fail.
-
- * src/test.c (integer_expected_error): Improve diagnostic -- now,
- it also matches the one from bash's builtin test.
- (binary_operator): Add \n at end of diagnostic.
-
- * tests/rm/fail-2eperm: Remove setuidgid-related code. Move it to ...
- * tests/priv-check: Move setuidgid-related and
- NON_ROOT_USERNAME-checking code to this file.
-
- * README: Update section on testing as `root'.
- Suggestion from Paul Jarc.
-
- * src/test.c (AUTHORS): Replace 3-letter usernames with the actual
- names of authors that I just found in bash's builtins/test.def.
-
- Running `[' with no arguments would evoke a segfault.
- * src/test.c (main) [LBRACKET]: Move initialization of argv to
- precede potential use via test_syntax_error.
-
- * src/Makefile.am (AM_CPPFLAGS): Rename from `INCLUDES', to avoid
- warning from automake -Wall.
-
-2003-07-15 Jim Meyering <jim@meyering.net>
-
- * Version 5.0.1.
-
- * Makefile.maint (%.asc): Remove target first, so gpg doesn't
- prompt us about it.
-
- * announce-gen (print_changelog_deltas): Relax tests for matching
- version-number line in NEWS.
- Change the .sig suffix to .asc here, too.
-
-2003-07-14 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (%.asc): Renamed from %.sig.
- Generate and use ascii-armored signatures.
- Use gpg's -o option.
-
-2003-07-13 Jim Meyering <jim@meyering.net>
-
- * src/nohup.c (NOHUP_FAILURE, NOHUP_FOUND_BUT_CANNOT_INVOKE): Define.
- (main): Use them.
-
- * Makefile.maint (syntax-check): Move each individual check into
- its own target.
- (syntax-check-rules): This is the list of syntax-check targets.
- (sc_unmarked_diagnostics, sc_cast_of_argument_to_free):
- (sc_cast_of_x_alloc_return_value, sc_space_tab):
- (sc_error_exit_success, sc_xalloc_h_in_src): New targets.
-
-2003-07-12 Jim Meyering <jim@meyering.net>
-
- * configure.ac: Remove uses of OPTIONAL_BIN_ZCRIPTS and last
- traces of the nohup script.
-
- * src/Makefile.am (bin_SCRIPTS): Remove use of just-removed
- $(OPTIONAL_BIN_ZCRIPTS).
-
- * src/Makefile.am (localedir.h): Put the `2>&1' after the redirect
- target, not before the `>'.
-
- * src/remove.c (remove_dir): Give a diagnostic upon failed save_cwd,
- now that that function no longer calls `error'.
-
- * src/df.c (find_mount_point): Emit a diagnostic for each
- failed syscall, rather than relying on caller to do that.
- The caller couldn't do a good job, anyhow -- too many different
- ways to fail (each with a different referent).
- Give a diagnostic upon failed save_cwd, now that that function
- no longer calls `error'.
- (show_point): Don't diagnose find_mount_point's errors, now that
- it handles them itself.
-
- * src/df.c (find_mount_point): Don't let free clobber errno upon
- failed chdir.
-
- * src/sys2.h: Remove alloca-related block.
- * src/system.h: Include <alloca.h> here, instead.
-
- It appears that the `#pragma alloca' included via "system.h" is
- adequate, since join.c uses alloca, yet lacked an in-file #pragma.
- * src/copy.c, src/cp.c, src/df.c, src/install.c, src/ln.c:
- * src/ls.c, src/mv.c, src/remove.c: Remove `#pragma alloca'.
-
- * src/chown-core.c (change_file_owner): Do not restore any special
- permission bits (e.g., set-user-ID, set-group-ID) that are reset
- by chown(2) on some systems. Suggestion and insistence :-) from
- Michael Stone.
-
- * tests/input-tty: Also check `test -t 1'.
- This is necessary on linux-2.4.21. Otherwise, the stty/basic-1
- test would block when run in the background.
-
-2003-07-11 Jim Meyering <jim@meyering.net>
-
- * tests/sample-test: Also fail if cat-to-create-expected-output
- fails. Otherwise, if both `exp' and `out' were to end up empty
- because of e.g., a full disk, they would mistakenly compare equal.
-
- * src/nohup.c: New file. Rewrite of nohup.sh in C.
- This solves a portability problem: on at least Solaris systems,
- when nohup.sh used the vendor /bin/sh, it would exit with status
- of `1' rather than the required 126 or 127 upon failure to exec
- the specified program.
-
- * src/Makefile.am (EXTRA_SCRIPTS): Remove definition.
- (bin_PROGRAMS): Add nohup.
- (EXTRA_DIST): Remove nohup.sh.
- (all_programs): Remove use of $(EXTRA_SCRIPTS).
- * src/nohup.sh: Remove file.
- * man/Makefile.am (nohup.1): Depend on nohup.c, rather than nohup.sh.
-
- * tests/misc/nohup: Tests for the above.
- * tests/misc/Makefile.am (TESTS): Add nohup.
-
- * src/head.c (diagnose_copy_fd_failure): New function, renamed from
- the macro, COPY_FD_DIAGNOSE.
- (diagnose_copy_fd_failure): Enclose diagnostic in _(...).
- (head_file): Likewise.
-
- * src/date.c: Include "quote.h".
- (batch_convert): Use the quote function rather than using literal `...'
- in a diagnostic.
-
- * src/setuidgid.c (main): Enclose diagnostic in _(...).
- * src/fmt.c (main): Likewise.
- * src/mknod.c (main): Likewise.
- * src/tac.c (tac_seekable): Likewise.
- * src/yes.c (main): Likewise.
- * src/od.c (main): Likewise.
- * src/install.c (change_attributes): Likewise.
-
-2003-07-10 Jim Meyering <jim@meyering.net>
-
- * src/head.c (usage): Use 1024*1024 in place of 1048576.
- * src/tail.c (usage): Likewise.
-
- * tests/rm/fail-2eperm: Now that we have setuidgid, use it in
- place of the kludge in this test. Suggestion from Paul Jarc.
-
- * src/Makefile.am (noinst_PROGRAMS): Define to setuidgid.
- * src/setuidgid.c: New program, solely for testing (not installed).
-
- * src/chown-core.c (change_file_owner): Don't leak file descriptors
- when dereferencing symlinks.
-
-2003-07-09 Jim Meyering <jim@meyering.net>
-
- * tests/du/slash: New file/test for today's lib/ftw.c fix.
- * tests/du/Makefile.am (TESTS): Add slash
-
- * src/tail.c (xlseek): Avoid warning about ``return without value
- from function returning non-void''.
-
-2003-07-08 Jim Meyering <jim@meyering.net>
-
- * man/help2man: Update to version 1.29.
-
- * man/help2man: Add END handler to close STDOUT and check for errors.
-
-2003-06-30 Paul Eggert <eggert@twinsun.com>
-
- Add support for a "[" that conforms to the GNU coding standards,
- i.e., that does not depend on its name.
- * src/lbracket.c: New file.
- * README: Add "[".
- * man/Makefile.am (programs): Ignore "[", since it doesn't have
- a separate man page.
- * src/Makefile.am (bin_PROGRAMS): Add "[".
- (__SOURCES): New var.
- * src/test.c (LBRACKET): Define to 0 if not defined.
- (main): Use LBRACKET rather than argv[0].
-
- * src/test.c (one_argument): Do not check for -t if POSIXLY_CORRECT.
- Reported by Paul Jarc and Dan Jacobson.
-
- * src/test.c (main): Do not recognize --help or --version if
- POSIXLY_CORRECT, when invoked as "test". Handle "[ ]" correctly.
- Do not bother testing that margv[margc] is non-null.
-
-2003-07-04 Jim Meyering <jim@meyering.net>
-
- * src/who.c (print_line): Rewrite to use asprintf, in order to be
- able to avoid emitting trailing spaces. Reported by Dan Jacobson.
-
- * tests/misc/head-elide-tail: Add tests of head's new --lines=-N
- option, and perform the +1600 invocations of head IFF the envvar
- RUN_EXPENSIVE_TESTS is set.
-
-2003-07-03 Jim Meyering <jim@meyering.net>
-
- * src/cp.c (do_copy): Give a better diagnostic when failing due
- to nonexistent destination directory. Reported by Dmitry Rutsky.
- See http://bugs.debian.org/199730 for details.
-
-2003-06-27 Jim Meyering <jim@meyering.net>
-
- split's --verbose option did nothing [broken in 4.5.10 and 5.0]
- * src/split.c (longopts): Use `1', not `0' as the value for
- for &verbose. Reported by Keith Thompson.
-
- Test for the above fix.
- * tests/misc/split-a: Also use --verbose and compare stderr
- output with what we'd expect.
-
-2003-06-20 Jim Meyering <jim@meyering.net>
-
- * src/copy.c (copy_internal) [HAVE_STRUCT_STAT_ST_AUTHOR]:
- Use `error_t' (rather than int) as type for local `err'.
- From Alfred M. Szmidt.
-
-2003-06-19 Marcus Brinkmann <marcus@gnu.org>
-
- * src/copy.c (copy_internal) [HAVE_STRUCT_STAT_ST_AUTHOR]:
- Fix author preservation code.
-
-2003-06-19 Jim Meyering <jim@meyering.net>
-
- * src/ln.c (ENABLE_HARD_LINK_TO_SYMLINK_WARNING): Define to 0.
- (do_link): Don't warn about hard link to symlink.
-
-2003-06-18 Jim Meyering <jim@meyering.net>
-
- * src/cut.c: Include "getdelim2.h", not "getstr.h".
- Reflect renaming: getstr -> getdelim2.
-
- * src/comm.c, src/join.c, src/nl.c, src/uniq.c: Reflect renaming:
- readline -> readlinebuffer.
-
-2003-06-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * src/readlink.c: Include <sys/types.h> before system.h (because
- the latter includes <sys/stat.h>). Required on Ultrix 4.3.
-
-2003-06-17 Jim Meyering <jim@meyering.net>
-
- * src/system.h (initialize_main): Define.
- Use it in every `main'. Applied via this:
- p='initialize_main (&argc, &argv);'
- perl -ni -e '/program_name.=.argv.0/ and print " '"$p"'\n"; print' \
- $(grep -l program_name.=.argv.0 *.c)
- test.c uses margc/margv, so I made the change manually for that file.
- Based on a patch from Bernard Giroud.
-
-2003-06-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- Fix for build failure on Ultrix 4.3.
- * src/stat.c: Include sys/statvfs.h in preference to sys/vfs.h.
- Include sys/param.h and sys/mount.h on ultrix.
-
-2003-06-16 Jim Meyering <jim@meyering.net>
-
- * src/touch.c (O_NDELAY, O_NONBLOCK, O_NOCTTY, EISDIR): Remove
- definitions.
- * src/system.h (O_NDELAY, O_NONBLOCK, O_NOCTTY, EISDIR): Define
- them here instead, but with one change: define EISDIR to -1, not 0.
-
- * src/cat.c (cat): Remove `#ifndef ENOSYS', now that it's
- guaranteed to be defined.
- * src/system.h (ENOSYS, ENOTSUP): Define to -1 if not defined.
-
- * README: Mention the CVS repository.
- Encourage addition of test cases.
-
-2003-06-12 Jim Meyering <jim@meyering.net>
-
- * src/touch.c (touch): Call close only if necessary.
- From Bruno Haible.
-
- * src/wc.c (usage): Correct wording: wc prints counts in the order
- `newline, word, byte'. Reported by Keith M. Briggs.
- * man/wc.x: Fix it here, too. And change `lines' to `newlines'.
-
-2003-06-10 Jim Meyering <jim@meyering.net>
-
- * tests/date/Test.pm: Add a test for the new format, e.g., May-23-2003.
-
-2003-06-07 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (syntax-check): Add commented-out (over-aggressive)
- rule.
-
-2003-06-06 Jim Meyering <jim@meyering.net>
-
- * src/extract-magic (main): Avoid newer 3-arg form of open,
- so this script works also with e.g., perl5.005_03.
- Patch by John David Anglin.
-
-2003-06-04 Paul Eggert <eggert@twinsun.com>
-
- * src/system.h: Include <stdbool.h> unconditionally.
-
-2003-06-04 Jim Meyering <jim@meyering.net>
-
- * man/Makefile.am (check-programs-vs-x): Rename target
- from check-programs-vs-1. Adjust rule to check for the
- primary (.x) file, not the generated one (.1).
-
-2003-06-03 Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>
-
- * man/kill.x: New file.
- * man/Makefile.am (dist_man_MANS): Add kill.1.
- (kill.1): New rule.
-
-2003-06-04 Jim Meyering <jim@meyering.net>
-
- Ensure that the .x file for a new program is never forgotten again.
- * man/Makefile.am (programs): Define.
- (check-programs-vs-1): New phony target.
- (check-local): Depend on it.
-
-2003-06-03 Jim Meyering <jim@meyering.net>
-
- Avoid unnecessary copying of environment.
- * src/env.c (main): Rather than clearing the environment and --
- unless told to ignore environment -- copying all settings from
- the saved, original environment, clear the environment only when
- that is requested. Suggested by Jens Elkner.
-
-2003-06-02 Jim Meyering <jim@meyering.net>
-
- * src/system.h: Always include <string.h>, since we assume C89.
- Include <limits.h> without checking for HAVE_LIMITS_H.
-
- * src/test.c [!TEST_STANDALONE]: Remove #if-0'd block.
- (STREQ, S_IXUGO): Remove redundant (in system.h) definitions.
-
-2003-06-01 Jim Meyering <jim@meyering.net>
-
- Avoid a race condition in `tail -f' described by Ken Raeburn in
- http://mail.gnu.org/archive/html/bug-textutils/2003-05/msg00007.html
- * src/tail.c (file_lines): Add new parameter, *read_pos, and set it.
- (pipe_lines, pipe_bytes, start_bytes, start_lines): Likewise.
- (tail_bytes, tail_lines, tail): Likewise.
- (tail_file): Use the new `read_pos' value as the size,
- rather than stats.st_size from the fstat call.
-
-2003-05-28 Jim Meyering <jim@meyering.net>
-
- * src/extract-magic: Allow expansion of `$file' in the here-
- document corresponding to the comment at the top of fs.h.
-
-2003-05-26 Jim Meyering <jim@meyering.net>
-
- * src/stat.c: Fix portability problem on FreeBSD5.0: don't include
- <sys/statvfs.h> on systems without HAVE_STRUCT_STATVFS_F_BASETYPE.
- Use #if/#elif/... cascade so we get only one set of include files.
- Reported by Nelson Beebe.
-
-2003-05-24 Jim Meyering <jim@meyering.net>
-
- * src/md5sum.c (split_3): Accept the BSD format only when in MD5 mode.
- * tests/sha1sum/basic-1: Make sure `sha1sum --check' doesn't
- accept the BSD format.
-
-2003-03-28 Joe Orton <jorton@redhat.com>
-
- * src/md5sum.c (bsd_split_3): New function.
- (split_3): Detect checksums from BSD 'md5' command and handle them
- using bsd_split_3.
-
- * tests/md5sum/basic-1: New tests for --check exit status, and for
- BSD-style checksum files.
-
-2003-05-21 Jim Meyering <jim@meyering.net>
-
- * src/head.c (elide_tail_lines_pipe): Fix a thinko.
- This sort of thing is why it'd be *Really Good* to factor
- out the common code used here and in tail.c.
-
-2003-05-14 Jim Meyering <jim@meyering.net>
-
- * src/head.c (usage): Document new feature: --bytes=-N and --lines=-N.
-
- * tests/du/slink: Skip this test if `.' is on an XFS file system.
-
- * tests/du/fd-leak: New file. Test for the bug in du that
- was fixed by the 2003-05-12 change to lib/ftw.c.
- * tests/du/Makefile.am (TESTS): Add fd-leak.
-
- * src/head.c (AUTHORS): Enclose string in N_(...), now that it
- includes a translatable word, `and'.
-
- * src/dd.c (usage): Don't use `,' as the thousands separator
- in e.g. 1,000,000 and 1,048,576. Instead, do this:
- `SIZE may be ..., MB 1000*1000, M 1024*1024 and so on...'
- * src/df.c (usage): Likewise.
- * src/du.c (usage): Likewise.
- * src/ls.c (usage): Likewise.
-
- * Makefile.maint (syntax-check): Add another check.
-
-2003-05-13 Paul Eggert <eggert@twinsun.com>
-
- Fix uniq to conform to POSIX, which requires that "uniq -d -u"
- must output nothing. Problem reported by Josh Hyman.
-
- * src/uniq.c (enum output_mode, mode): Remove, replacing with:
- (output_unique, output_first_repeated, output_later_repeated):
- New vars. All uses of "mode" changed to use these variables,
- which are not mutually exclusive as "mode" was.
- (writeline): New arg "match", used to control whether to
- obey output_first_repeated or output_later_repeated.
- All callers changed.
- (check_file, main): Adjust to above changes.
-
- * tests/uniq/Test.pm: Test that 'uniq -d -u' outputs nothing.
-
-2003-05-14 Jim Meyering <jim@meyering.net>
-
- * tests/rm/rm3: Use tr's \n notation rather than \012.
- This package can afford to do that, since its tests are guaranteed use
- GNU tr, which has accepted the more modern notation for 10 years.
- * tests/rm/rm5: Likewise.
- * tests/cp/same-file: Likewise.
- * tests/stty/row-col-1: Likewise.
- * tests/stty/basic-1: Likewise.
- * tests/rm/deep-1: Likewise.
- * tests/mv/part-symlink: Likewise.
- * tests/mkdir/perm: Likewise.
- * tests/misc/nice: Likewise.
-
-2003-05-13 Jim Meyering <jim@meyering.net>
-
- * src/copy.c (struct F_triple) [name]: Remove const attribute.
- (triple_free): Don't apply cast to argument of free.
- (seen_file): Add cast here instead.
-
- * src/cp-hash.c (struct Src_to_dest) [name]: Remove const attribute.
- (src_to_dest_free): Don't apply cast to argument of free.
-
- * src/sort.c (zaptemp): Don't apply cast to argument of free.
- * src/pr.c (init_fps, init_store_cols): Likewise.
- * src/join.c (delseq, freeline): Likewise.
- * src/expr.c (OLD): Likewise.
- * src/sort.c (sort): Likewise.
- * src/head.c (elide_tail_lines_pipe): Likewise.
-
- * src/tail.c: Include "quote.h".
- Use quote in diagnostics. Change many error format strings
- from just `%s' to e.g., `error reading %s'.
- (pipe_lines): Change type of parameter, n_lines, to uintmax_t.
- Rewrite newline-counting loop to use memchr.
-
- * src/head.c (elide_tail_lines_pipe): Use `if', not assert.
- Now that assert is no longer used, don't include <assert.h>.
-
-2003-05-12 Jim Meyering <jim@meyering.net>
-
- * src/head.c: Include <assert.h>.
- (AUTHORS): Add my name.
- (elide_tail_lines_pipe): New function.
-
-2003-05-10 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (syntax-check): Check for `error (EXIT_SUCCESS,'.
-
- * src/readlink.c (main): Set program_name before first use.
- Remove that (redundant) first use.
- Don't exit successfully just because --verbose was specified.
- Pass 0, not EXIT_SUCCESS, as first argument to error; when that
- parameter is 0, error does not exit.
-
- * src/uname.c (main): When failing due to too many arguments, also say
- that, rather than just "Try `uname --help' for more information.".
- * src/comm.c (main): Likewise, but for too few arguments.
- * src/logname.c: Include error.h.
- (main): Say why we're failing.
-
- * src/uniq.c (main): Don't segfault when argc < optind.
- * src/who.c (main): Handle argc < optind.
- * src/df.c (main): Likewise.
- * src/install.c (main): Likewise.
- * src/mv.c (main): Likewise.
- * src/pwd.c (main): Likewise.
- * src/tty.c (main): Likewise.
- * src/chroot.c (main): Likewise.
- * src/hostname.c: Likewise.
- * src/du.c (main): Likewise.
- * src/expand.c (main): Likewise.
- * src/env.c (main): Likewise.
- * src/unexpand.c (main): Likewise.
- * src/printenv.c (main): Likewise.
- * src/sync.c (main): Handle argc == 0.
- * src/expr.c (main): Likewise.
- * src/printf.c (main): Likewise.
- * src/basename.c (main): Likewise.
- * src/ln.c (main): Test for `missing argument' before computing n_files.
- * src/tail.c (main): Test for the case of no arguments before
- computing n_files.
-
- * src/kill.c (send_signals): Don't check command line arguments here.
- (main): Check them here instead. Handle argc < optind.
-
- * src/logname.c (main): Use error, rather than fprintf, for the sake
- of consistency.
-
- * src/rm.c (main): Don't overrun array bound if argc is 0.
-
-2003-05-09 Jim Meyering <jim@meyering.net>
-
- * src/sort.c (main): Don't overrun array bound if argc is 0.
- That would happen when invoked via: execl ("/usr/bin/sort", NULL);
- Reported by Wartan Hachaturow.
-
-2003-05-07 Jim Meyering <jim@meyering.net>
-
- Implement support so that `head --lines=-N' works on seekable files.
- * src/head.c (enum Copy_fd_status): Define.
- (COPY_FD_DIAGNOSE): New macro.
- (elide_tail_lines_seekable): New funtion.
- (elide_tail_lines_file): Call it here.
-
-2003-05-06 Jim Meyering <jim@meyering.net>
-
- * src/sys2.h (CHAR_BIT): Remove duplicate definition.
-
-2003-05-04 Jim Meyering <jim@meyering.net>
-
- * tests/head/Test.pm: Remove tests of --bytes=-N; using that framework
- caused the addition of thousands of small files to the tar archive.
- * tests/misc/head-elide-tail: New file. Add them here instead.
- * tests/misc/Makefile.am (TESTS): Add head-elide-tail.
-
-2003-05-04 Paul Eggert <eggert@twinsun.com>
-
- * src/remove.c (HAVE_WORKING_READDIR): Define to 0 if not defined.
- (IF_READDIR_NEEDS_REWINDDIR): Remove.
- (remove_cwd_entries): Rewrite to avoid IF_READDIR_NEEDS_REWINDDIR,
- which was a bit weird because it couldn't be emulated by a function.
-
-2003-05-03 Jim Meyering <jim@meyering.net>
-
- Extend head to accept --lines=-N (--bytes=-N) and to print all
- but the N lines (bytes) at the end of the file.
- * src/head.c: Include full-write.h, full-read.h, inttostr.h, quote.h.
- Use quote() in diagnostics, rather than literal `' marks.
- (copy_fd, elide_tail_bytes_pipe, elide_tail_bytes_file):
- New functions.
- (elide_tail_lines_pipe, elide_tail_lines_file): New functions.
- (head_file): Reorganize so as to call head from only one place.
- (main): Likewise, for head_file.
- Handle new, undocumented option, --presume-input-pipe.
- Handle negative line and byte counts.
- * tests/head/Test.pm: Add lots of tests to exercise --bytes=-N.
-
- * tests/du/8gb: Skip test if the file system of `.' doesn't support
- sparse files -- otherwise it'd create a file of size 8GB.
-
-2003-05-02 Jim Meyering <jim@meyering.net>
-
- * src/fmt.c (usage): Don't mention obsolescent -WIDTH option.
- Instead explain about `-' and standard input.
- (main): Give a proper diagnostic for e.g., `fmt -c -72'.
- Reported by Keith Thompson.
- * tests/fmt/basic: Add test for the above fix.
-
- * src/fmt.c: Include "quote.h".
- Use quote() in diagnostics, rather than literal `' marks.
- (main): Exit nonzero when unable to open an input file.
- * tests/fmt/basic: Add test for the above fix.
-
- * src/fmt.c (main): Diagnose invalid suffix on obsolescent width
- specifications like `-72x'.
- * tests/fmt/basic: Add test for the above fix.
-
- Work around nasty readdir bug on Darwin6.5.
- * src/remove.c (IF_READDIR_NEEDS_REWINDDIR): Define.
- [! HAVE_WORKING_READDIR] (remove_cwd_entries): If readdir has just
- returned NULL and there has been at least one successful unlink or
- rmdir call since the opendir or previous rewinddir, then call
- rewinddir and reiterate the loop.
-
- Factor out common code.
- * src/remove.c (readdir_ignoring_dotdirs): New function.
- (is_empty_dir): Use it here.
- (remove_cwd_entries): Use it here.
-
-2003-05-01 Jim Meyering <jim@meyering.net>
-
- * tests/rm/r-3: Create 500 rather than just 300 files.
- There's a bug in Darwin6.5's readdir that shows up only with
- 338 or more files.
- Fix a bug in this test: `cd $pwd' (not to `..'), now that $tmp
- has two components.
-
- * src/tail.c:
- Change type of n_units, n_bytes, n_lines to be `uintmax_t'.
- (dump_remainder): Move two declarations `down' into the scope
- where they are used.
- (xlseek): Return the resulting offset.
- (file_lines): Rename parameter, file_length, to end_pos.
- (pipe_lines): Don't coerce safe_read return value to `int'.
- Adapt tests accordingly.
- (pipe_bytes) [struct charbuffer] (nbytes): Change type from `int'
- to `unsigned int'.
- Change type of `total_bytes' from `int' to `size_t',
- since the former wouldn't always be wide enough.
- Don't coerce safe_read return value to `int',
- and adapt tests accordingly.
- Now that testing for a read error no longer involves
- using `tmp', handle that case *after* freeing `tmp'.
- (start_bytes): Clean up.
- (tail_bytes): Now that `n_bytes' may be larger than
- OFF_T_MAX, test for that condition and, if it's true, don't
- use lseek optimizations.
- (parse_options): Don't fail just because N_UNITS is larger than
- the maximum size of a file -- tail may be applied to an input
- stream (e.g., a pipe) with more data than that.
-
- * Makefile.maint (syntax-check): Rename from alloc-check.
- Also check for SPACE-TAB sequences.
- Also check for malloc/calloc/realloc casts.
-
-2003-05-01 Jim Meyering <jim@meyering.net>
-
- * src/tail.c (start_lines): Rewrite to use memchr. Clean up.
-
-2003-04-28 Jim Meyering <jim@meyering.net>
-
- * tests/misc/tty-eof: Send two tokens, not just one, so we don't
- make the now-more-picky tsort fail.
-
-2003-04-24 Jim Meyering <jim@meyering.net>
-
- * src/tsort.c (tsort): Remove unnecessary test of have_read_stdin.
- (main): Minor syntactic clean-up.
-
- * src/tsort.c (tsort): Fail if the input contains an odd number of
- tokens. Reported by junkio@cox.net.
-
- * tests/tsort/basic-1: Test for the above fix.
-
-2003-04-21 Jim Meyering <jim@meyering.net>
-
- * tests/misc/printf: Add tests for the printf fixes below.
-
- * Makefile.cfg (cvs_files): Add $(srcdir)/config/depcomp to the list.
-
-2003-04-20 Paul Eggert <eggert@twinsun.com>
-
- Fix printf POSIX compatibility bug reported by Ben Harris in
- <http://mail.gnu.org/archive/html/bug-coreutils/2003-04/msg00070.html>.
- * doc/coreutils.texi (printf invocation): It's \NNN in the format,
- \0NNN in the %b operand.
- * src/printf.c (usage): Likewise.
- (print_esc): New arg OCTAL0 to specify whether \0NNN or \NNN
- is desired. All uses changed. Behave like Bash printf if %b
- operand uses \NNN where the initial N is not 0.
-
-2003-04-17 Jim Meyering <jim@meyering.net>
-
- * src/stty.c: Remove uses of PROTOTYPE macro.
-
-2003-04-15 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint: Remove (or replace-with-TAB(s) to retain alignment)
- each sequence of spaces before a TAB character.
-
-2003-04-13 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (is_empty_dir): Don't closedir (NULL).
-
-2003-04-12 Jim Meyering <jim@meyering.net>
-
- Giving nl an invalid STYLE argument (in --header-numbering=STYLE (-h),
- --body-numbering=STYLE (-b), or --footer-numbering=STYLE (-f)) or
- FORMAT (--number-format=FORMAT (-n)) would not give a useful diagnostic.
- * src/nl.c (main): Fix those problems and remove literal quote marks
- (e.g., "`%s'") from format string; instead use "%s" in each format
- string and `quote (optarg)' as the corresponding argument.
- Also, diagnose all invalid command line options before failing.
-
- * src/nl.c (proc_text): Fix a bug that would make nl output extra
- newlines in some cases. Details here: http://bugs.debian.org/177256.
- This bug was introduced on 2001-11-10 for textutils-2.0.17.
- * tests/misc/nl: Add test for the above-fixed bug.
-
- * tests/misc/readlink: New file. Test the --canonicalize option.
- * tests/misc/Makefile.am (TESTS): Add readlink.
-
-2003-04-11 Jim Meyering <jim@meyering.net>
-
- Clean up.
- * src/chown.c, src/cp.c, src/dircolors.hin, src/du.c, src/ln.c:
- * src/mkfifo.c, src/ptx.c, src/spline.c, src/stty.c, src/tail.c:
- * src/test.c, src/unexpand.c: Remove (or replace-with-TAB(s) to
- retain alignment) each sequence of spaces before a TAB character.
-
- * src/ls.c: Include <stdlib.h> unconditionally.
-
- * Makefile.maint (xalloc-check): Rename from header-check.
-
- * src/yes.c: Include error.h after system.h, not before.
-
- Clean up.
- * src/copy.c, src/cp-hash.c, src/cp.c, src/csplit.c, src/cut.c:
- * src/date.c, src/df.c, src/du.c, src/expand.c, src/expr.c, src/id.c:
- * src/join.c, src/md5sum.c, src/nl.c, src/od.c, src/paste.c, src/pr.c:
- * src/ptx.c, src/sort.c, src/split.c, src/su.c, src/tail.c, src/tee.c:
- * src/tr.c: * src/unexpand.c, src/users.c:
- Remove anachronistic casts of xmalloc, xrealloc, and xcalloc
- return values and of xrealloc's first argument.
- Fix the former with this:
- perl -pi -e 's/\([^(]*?\*\) *(x(m|c|re)alloc)\b/$1/'
-
-2003-04-10 Jim Meyering <jim@meyering.net>
-
- * src/stty.c (wrapf): Declare with format attribute.
-
- The S_MAGIC_... names shouldn't be maintained in two places (prior
- to this change, one would have to keep stat.c and fs.h in sync).
- This change makes it so those names and the corresponding
- hexadecimal constants all reside in stat.c. fs.h is now generated.
- * src/Makefile.am (fs.h): New rule to generate fs.h from stat.c.
- (BUILT_SOURCES): Add fs.h, now that it's generated.
- (EXTRA_DIST): Add extract-magic.
- * src/extract-magic: New script to extract fs.h definitions from stat.c.
- * src/stat.c (human_fstype) [__linux__]: Append each hex constant from
- fs.h in a comment after the corresponding `case S_MAGIC_...:' statement.
-
- * tests/tail-2/big-4gb: Skip this test (don't fail) if creating a
- file with nominal length > 4GB fails. Reported by Michael Deutschmann.
-
- * man/unexpand.x: Add `SEE ALSO' reference to expand.
- * man/expand.x: Add `SEE ALSO' reference to unexpand.
- Suggestion from Dan Jacobson.
-
-2003-04-10 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-
- * src/fs.h (S_MAGIC_DEVPTS): New magic for Linux's devpts.
- * src/stat.c (human_fstype): Handle Linux's devpts.
-
-2003-04-09 Paul Eggert <eggert@twinsun.com>
-
- * src/split.c (line_bytes_split): Arg is of type size_t, since
- that's all that is supported for now.
- (main): Check for overflow in obsolescent line count option.
-
-2003-04-09 Jim Meyering <jim@meyering.net>
-
- * tests/misc/split-fail: Add a new test for the above fix.
-
- * src/split.c (bytes_split): Use size_t temporary (rather than
- uintmax_t original) in remaining computations. From Paul Eggert.
-
- Handle command line option arguments larger than 2^31.
- This allows e.g., splitting into files of size 2GB and larger,
- and running split --lines=N with N=2^31 or more.
- But for --line-bytes=N, the restriction that N <= SIZE_MAX
- remains (for now), due to the way it is implemented.
-
- * src/split.c: Include "inttostr.h".
- (bytes_split, lines_split, line_bytes_split, main):
- Use uintmax_t, not size_t, for file sizes.
- (main): Give a better diagnostic for option arguments == 0.
- Use umaxtostr to print file sizes.
- Reported by Luke Hassell.
-
-2003-04-08 Jim Meyering <jim@meyering.net>
-
- * src/rm.c (usage): Mention that --directory (-d) works only
- on some systems. Suggestion from Samuel Tardieu.
-
- * tests/basename/basic: Run $PERL to see if it is available,
- rather than testing its value.
- * tests/sum/sysv, tests/tsort/basic-1, tests/unexpand/basic-1:
- * tests/basename/basic, tests/dd/skip-seek, tests/dircolors/simple:
- * tests/expr/basic, tests/factor/basic, tests/fmt/basic:
- * tests/ls-2/tests, tests/md5sum/basic-1, tests/md5sum/newline-1:
- * tests/misc/sort, tests/misc/tty-eof, tests/mv/i-1:
- * tests/rm/empty-name, tests/rm/fail-eperm, tests/rm/unreadable:
- * tests/seq/basic, tests/sha1sum/basic-1, tests/sha1sum/sample-vec:
- * tests/sum/basic-1, tests/seq/basic: Likewise.
-
- * tests/misc/Makefile.am (TESTS): Add split-fail.
- * tests/misc/split-fail: New file.
-
- * src/split.c: Rename local variables: nchars -> n_bytes.
- (lines_split): Rename local, nlines -> n_lines.
- (main): Rename local variable: s/accum/n_units/.
- (main): Use STDIN_FILENO, not literal `0'.
-
-2003-04-07 Jim Meyering <jim@meyering.net>
-
- * src/stat.c: Add #include directives for Ultrix 4.4.
- Based on a suggested change from Bert Deknuydt.
-
-2003-04-06 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (makefile-check): New rule.
- (local-check): Add it.
-
-2003-04-05 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (nearly all of them):
- Use $(VAR) rather than @VAR@, now that we can rely on automake to
- emit a definition for each substituted variable.
- * tests/Makefile.am.in: Likewise.
-
- * tests/rm/rm5: Add a comment explaining why this test fails when
- using Tru64's broken sed.
- * tests/rm/rm3: Likewise.
-
- Make `kill -t' output signal descriptions (not `?') on Tru64.
- * src/kill.c (sys_siglist): Also check for __sys_siglist.
- Patch by Tony Leneis.
- * configure.ac: Also check for declaration of __sys_siglist.
- Required for Tru64 4.0D, 4.0F, and 5.1.
- Reported by Tony Leneis.
-
-2003-04-04 Jim Meyering <jim@meyering.net>
-
- * src/Makefile.am (PERL): Remove unnecessary definition.
-
- Because of inappropriate (but POSIX-mandated) behavior of rename,
- `mv a b' would not remove `a' in some unusual cases. Work around
- this by unlinking `a' when necessary.
-
- * src/copy.c (same_file_ok): Add an output parameter.
- Set it in the offending case.
- (copy_internal): When necessary, unlink SRC_PATH and inform caller.
- Reported by Ed Avis.
- * tests/mv/hard-4: New test for the above.
- * tests/mv/Makefile.am (TESTS): Add hard-4.
-
- Clean up rules for automatically generated sources:
- * src/Makefile.am (dircolors.h, wheel-size.h, wheel.h, false.c):
- Make each generated file be read-only.
- Add each file name to BUILT_SOURCES separately.
- (MAINTAINERCLEANFILES): Set to $(BUILT_SOURCES).
-
- Put LOCALEDIR macro definition in new file: localedir.h.
- * src/Makefile.am (DEFS): Remove definition.
- (localedir.h): New rule.
- (BUILT_SOURCES, DISTCLEANFILES): Add localedir.h.
- * src/system.h: Include "localedir.h".
-
-2003-04-02 Jim Meyering <jim@meyering.net>
-
- * Version 5.0.
-
- * tests/misc/Makefile.am (TESTS): Add false.
-
- * Makefile.maint (TMPDIR): Make sure it's defined.
- (my-distcheck): Build in $(TMPDIR), not `.'.
-
- * src/Makefile.am (false.c): Change all occurrences of
- `(EXIT_SUCCESS)' to `(EXIT_FAILURE)' so that false exits
- unsuccessfully also with --help. Reported by Paul Jarc,
- * tests/misc/false: New test for the above.
-
-2003-03-30 Jim Meyering <jim@meyering.net>
-
- * NEWS: Note the location of older NEWS files.
-
- * src/remove.c (is_empty_dir): Don't let a failing closedir
- clobber errno. Spotted by Arnold Robbins.
-
- * src/env.c: Fix typo in comment. From Arnold Robbins.
-
-2003-03-29 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.12.
-
- * README: Note to expect build problems for stat.c on Ultrix 4.3.
- Note that there are some harmless test failures when running
- `make check' as root on some systems.
-
-2003-03-28 Jim Meyering <jim@meyering.net>
-
- * tests/stty/row-col-1: Skip this test if stty can't get window size.
- This happens when connecting to sparc-solaris5.7 via ssh from within
- emacs. Reported by Karl Berry.
-
- * tests/du/basic: Use seq, not `yes' to generate 4KB of data.
- Otherwise, on systems (DJGPP) that emulate pipes using files,
- this test would never complete, waiting for `yes' to terminate.
- * tests/du/slink: As above, use seq, not `yes' to generate link target.
- * tests/rm/hash: As above, use seq, not `yes' to generate dir name.
- Reported by Rich Dawe.
-
-2003-03-27 Jim Meyering <jim@meyering.net>
-
- * src/id.c: Remove Arnold Robbins' obsolete e-mail address
- from `written by...' comment, at his request.
-
-2003-03-24 Paul Eggert <eggert@twinsun.com>
-
- Fix buffer overrun problem reported by TAKAI Kousuke, along
- with some other POSIX incompatibilities.
-
- * src/printf.c (print_esc): Do not treat \x specially if
- POSIXLY_CORRECT. Avoid buffer overrun if the format ends
- in backslash. Treat incomplete escape sequences as strings
- of characters, as POSIX requires.
- (print_formatted): Allow multiple flags. Avoid buffer overrun
- if the format is incomplete.
-
-2003-03-24 Jim Meyering <jim@meyering.net>
-
- * tests/misc/printf: Add tests for the above fixes and changes.
-
-2003-03-26 Jim Meyering <jim@meyering.net>
-
- * src/copy.h (struct cp_options): Add a comment.
-
-2003-03-23 Jim Meyering <jim@meyering.net>
-
- * README: Describe problem with 64-bit mode on HPUX 11.x,
- with patch for /usr/include/inttypes.h.
- * TODO: Plan to add an autoconf test to work around the bug.
-
-2003-03-22 Jim Meyering <jim@meyering.net>
-
- * src/stat.c: Don't include <sys/sysmacros.h>.
- That is already done via system.h. Otherwise, the multiple
- inclusion would evoke redefinition warnings from Cray's /bin/cc,
- aka Cray Standard C Version 4.0.3 (057126) Mar 22 2003 22:02:28.
- (human_fstype): Factor some directives `up', out of this function.
- Cast away `const' to avoid error from Cray's /bin/cc.
-
-2003-03-20 Jim Meyering <jim@meyering.net>
-
- * announce-gen (print_changelog_deltas): Ensure that a newline
- precedes each row of `*'s.
-
-2003-03-20 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.11.
-
- * src/seq.c (valid_format): Also accept ` ' and `'' as valid
- format flag characters.
- Do not require that a field width be specified.
- Do not fail when given a field width of `0'.
- Reported by Dan Jacobson.
- * tests/seq/basic: Add new tests for the above-fixed bug.
-
- * src/Makefile.am (all-local): Append $(EXEEXT) to use of `su'
- (install-root): Likewise.
- (install-exec-local): Likewise.
- Based on a patch from Richard Dawe.
-
-2003-03-19 Jim Meyering <jim@meyering.net>
-
- * man/Makefile.am (.x.1): Use $(LN_S) instead of 'ln -s',
- because the DJGPP 2.03 port of 'ln -s' doesn't work.
- Include $(EXEEXT) in program names.
- Since $(LN_S) may degenerate to `cp -p', be careful
- to invoke it from the destination directory.
- Mostly from Richard Dawe.
- * configure.ac: Use AC_PROG_LN_S.
-
- * tests/mv/part-symlink: Unset CDPATH. Otherwise, having the
- CDPATH shell variable set could cause this test to fail.
- Reported by Karl Berry.
-
-2003-03-18 Jim Meyering <jim@meyering.net>
-
- * src/fmt.c [struct Word] (paren, period, punct, final): Change the
- type of each member from bool <MEMBER>:1 to unsigned int <MEMBER>:1.
- AIX 5.1's xlc could not compile the former.
- Patch by Petter Reinholdtsen. Also reported by Mike Jetzer.
-
-2003-03-17 Richard Dawe <rich@phekda.freeserve.co.uk>
-
- * configure.ac: Include $(EXEEXT) in OPTIONAL_BIN_PROGS'
- program names, since automake only adds $(EXEEXT) to programs
- in its *_PROGRAMS.
-
-2003-03-16 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (rm): Put two local variables in static storage,
- so they can't be clobbered by the potential longjmp.
-
-2003-03-15 Jim Meyering <jim@meyering.net>
-
- * Makefile.cfg (gnu_rel_host): Fix code to match the comment
- so that a version number with a two-digit component can still count
- as an alpha release. Reported by Richard A Downing.
- (gnu_rel_host): Define in terms of $(RELEASE_TYPE) instead.
-
-2003-03-14 Jim Meyering <jim@meyering.net>
-
- * src/ansi2knr.c: Remove no-longer-used file.
- * src/ansi2knr.1: Likewise.
-
- * Makefile.maint (prev_version_file): Don't use ?= for this particular
- assignment, since it causes trouble with old versions of GNU make
- (e.g. 3.76.1). The other uses of `?=' are inoffensive. Details here.
- http://mail.gnu.org/archive/html/bug-coreutils/2003-03/msg00028.html
- Patch from Alexandre Duret-Lutz.
-
- * Use patched automake-1.7.3. Regenerate Makefile.in files in
- subdirectories so that each includes a definition of ACLOCAL_M4.
-
- * announce-gen (main): Label the compressed source URLs.
-
- * Version 4.5.10.
-
- * tests/du/slink: Relax the test for the `local'ness of a file system,
- so that now it works also for tmpfs.
-
- * tests/du/hard-link: Transform output from first du, so that this
- test doesn't fail on file systems like tmpfs that order directory
- entries differently.
-
-2003-03-13 Jim Meyering <jim@meyering.net>
-
- * tests/du/8gb: Work around what appears to be an NFS failure that
- would make this test fail on some systems.
-
-2003-03-11 Jim Meyering <jim@meyering.net>
-
- * tests/du/basic: Make the test file exactly 4k bytes long.
-
- * src/split.c (longopts): Don't hard-code `2' here.
- Instead, just specify `&verbose', and ...
- (main): ... remove the `case 2:' block for --verbose.
-
- * tests/du/basic: Make the test file larger than 64 bytes, so that
- we don't immediately disqualify file systems (e.g., NetApp) on which
- smaller files take up zero disk blocks. Reported by Vin Shelton.
-
-2003-03-10 Jim Meyering <jim@meyering.net>
-
- Don't segfault for a negative field width or precision in format string.
- Note that this is just a stopgap fix. The longer term solution may
- involve adapting bash's builtins/printf.def.
-
- * src/printf.c: (UNSPECIFIED): Define.
- (print_direc): Use the special value, UNSPECIFIED, to indicate
- that field_width or precision has not been specified.
- (print_formatted): Fail if field_width or precision is the
- special value, UNSPECIFIED.
- Reported by Oliver Kiddle <okiddle@yahoo.co.uk>
-
- * src/sys2.h (INT_MIN): Define, if necessary.
- * tests/misc/printf: Add a test for the above-fixed bug.
-
-2003-03-09 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (AD_stack_pop): Cast sizeof... to int before
- changing its sign. This avoids a warning from gcc on 64-bit systems.
- Reported by Bob Proulx.
- (pop_dir): Reverse order of sign change and cast, to be consistent
- with the above.
-
-2003-03-08 Jim Meyering <jim@meyering.net>
-
- * tests/Makefile.am (evar-check): Check for POSIXLY_CORRECT not as a
- shell variable, but only in the environment. With /bin/sh->bash, the
- shell variable is set to `y', and that would cause a spurious warning.
- Reported by Bob Proulx.
-
- * tests/Makefile.am (check-root): Remove touch/fifo.
- It doesn't appear to have to be run as root.
-
- * tests/rm/fail-2eperm: Rather than simply using the first non-root
- user name, make sure that the selected user name has a usable shell.
- Reported by Paul Jarc.
-
- Before, when using shred on a device, one had to specify --exact,
- or be careful to choose a size that would not be rounded up and
- exceed the maximum value; that could result in a failure of
- the final write.
- * src/shred.c (do_wipefd): --exact is now the default for non-regular
- files. Suggestion from Ben Elliston.
- (usage): Say it.
-
- * tests/misc/tty-eof: Require at least version 1.11 of Expect.pm.
- Old versions of Expect.pm (e.g., 1.07) lack the log_user function.
- Patch by Bob Proulx.
-
- * src/Makefile.am (check-misc): Check for use of `defined' in
- #define directives.
- Change to $(srcdir) before running grep.
-
- * src/sleep.c: Remove now-unused #include and #define directives.
-
- * src/du.c (process_file): If a file's size is not being counted
- e.g., because it's a hard link to a file we've already counted,
- then don't print a line for it.
-
- * tests/du/hard-link: New test for the above-fixed bug.
- * tests/du/Makefile.am (TESTS): Add hard-link.
-
- `du -S' didn't work
- * src/du.c: Revert most of the `reorganization' change of 2003-02-20,
- and make the two-array approach work.
-
- * tests/du/basic: Correct/add tests for the above fix.
- Set LC_ALL, etc., now that we use sort.
- Check the block/size of a small file, too.
- Correct expected results for simple dir1/dir2/file case.
- Add another test of du -S.
-
-2003-03-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- Avoid build failure with gcc on hppa1.1-hp-hpux10.20 (see GCC PR
- middle-end/9986). As one of GCC's optimizations, it transforms a
- fputs_unlocked call to a fputc_unlocked call when the string is
- one character long. However, hpux doesn't have fputc_unlocked.
-
- * expr.c (usage): Use putchar, not fputs, to output a single character.
- * ls.c (dired_dump_obstack): Likewise.
- * ptx.c (output_one_tex_line, output_one_dumb_line): Likewise.
- * stat.c (print_it): Likewise.
-
-2003-03-07 Jim Meyering <jim@meyering.net>
-
- * src/cp.c: Remove everything associated with mmap-stack.c.
- This reverts the two changes of 2003-02-21.
- * src/du.c: Remove everything associated with mmap-stack.c.
- This reverts the change of 2003-02-19.
-
-2003-03-06 Jim Meyering <jim@meyering.net>
-
- * tests/cp/same-file: Unset CDPATH. Otherwise, having the
- CDPATH shell variable set could cause this test to fail.
- Reported by Karl Berry.
-
-2003-03-05 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.9.
-
- * src/printf.c (print_esc): Remove pointless comparison of unsigned
- integer with zero, to avoid a warning from Intel's ecc.
- Reported by Nelson Beebe.
-
- * src/du.c (process_file): Sizes must all be of type uintmax_t.
- Otherwise, for files or totals that are too big, numbers would
- be truncated. Patch mostly by Michael Stone.
- Reported by Ingo Saitz as Debian bug #183210.
-
- * tests/du/8gb: New test for the above-fixed bug.
- * tests/du/Makefile.am (TESTS): Add 8gb.
-
- * src/du.c (MAX_N_DESCRIPTORS): Use 3 * UTILS_OPEN_MAX / 4
- rather than UTILS_OPEN_MAX - 10.
-
-2003-03-04 Jim Meyering <jim@meyering.net>
-
- * README: Refer new feature discussion to bug-coreutils@gnu.org,
- rather than bug-gnu-utils, now that the former is better known.
- Suggestion from Göran Uddeborg.
-
- * src/stat.c (usage): Capitalize consistently.
- Reported by Göran Uddeborg.
-
- * Makefile.maint (rel-files): Include $(signatures), so that
- those files are also copied into $(release_archive_dir).
-
- * src/df.c (find_mount_point): Call error here, now that restore_cwd
- no longer does it.
- * src/remove.c (AD_pop_and_chdir): Likewise.
-
- * tests/Makefile.am (check-root): Add fail-2eperm.
-
-2003-03-03 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (remove_cwd_entries): Include the full filename of
- the offending file, not just the basename.
-
- * tests/misc/tty-eof: Set $ME properly.
-
- * Makefile.maint (THIS_VERSION_REGEXP, PREV_VERSION_REGEXP):
- Remove now-unused variables.
- (tag-prev-version, prev-cvs-tag): Likewise.
-
- * src/remove.c (remove_cwd_entries) [!ROOT_CAN_UNLINK_DIRS]: Give an
- accurate diagnostic when failing to remove a file owned by some other
- user. Reported by Ivo Timmermans via Michael Stone.
- This fixes Debian bug# 178471.
-
- * tests/rm/Makefile.am (TESTS): Add fail-2eperm.
- * tests/rm/fail-2eperm: New test, for the above-fixed bug.
- Based on a report from Ivo Timmermans.
-
-2003-03-02 Jim Meyering <jim@meyering.net>
-
- * src/copy.c (copy_internal) [un_backup]: When recovering from a
- failure to create a hard link, do not remove the entry associating
- the source dev/ino with the destination file name.
- * tests/mv/Makefile.am (TESTS): Add hard-3.
- * tests/mv/hard-3: New test, for the above-fixed bug.
- Inspired by a report from Iida Yosiaki.
-
-2003-03-01 Jim Meyering <jim@meyering.net>
-
- * src/df.c (print_header): Don't embed spaces in a separate `Type'
- header string. Instead, put `Filesystem' and `Type' headers in the
- same string, so translators can use horizontal space as needed.
- Reported by Jean Charles Delepine.
-
-2003-02-28 Jim Meyering <jim@meyering.net>
-
- * src/copy.c (copy_internal): When link fails because of an
- existing destination file, unlink that file and try again.
- Reported by Iida Yosiaki.
-
- * tests/mv/Makefile.am (TESTS): Add hard-2.
- * tests/mv/hard-2: New test for the above-fixed bug.
- Based on a test case from Iida Yosiaki.
-
-2003-02-26 Jim Meyering <jim@meyering.net>
-
- * tests/du/basic: Don't test du's -b option here. Directory byte
- counts are smaller (512 rather than 4096) on at least OSF/1 5.1
- and IBM AIX 4.2. Reported by Nelson Beebe.
-
-2003-02-25 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (announcement): Now that ChangeLog entries
- are output by announce-gen, don't do it here.
- * announce-gen (print_changelog_deltas): New function.
- (main): Use it.
-
-2003-02-22 Jim Meyering <jim@meyering.net>
-
- * announce-gen: New option: --release-type=TYPE
- * Makefile.maint (beta, major): New targets. Remove `release'.
- Put them all together on a line.
- Pass the release type (via RELEASE_TYPE envvar) to the MAKE
- invocation of `announcement'.
- (announcement): Invoke announce-gen with --release-type=$RELEASE_TYPE.
-
- * announce-gen: New option: --news=NEWS_FILE.
- Extract NEWS entries here, not via rules in Makefile.maint.
- * Makefile.maint (announcement): Now that NEWS entries are
- extracted by announce-gen, don't do it here.
- (news-r1, news-r2): Remove now-unused definitions.
-
-2003-02-21 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.8.
-
- Merge in changes from autoconf's version of this file.
- * Makefile.maint (www-gnu): Define.
- (standards.texi-url_prefix): Use $(www-gnu).
- (make-stds.texi-url_prefix): Likewise.
-
- * src/cp.c: Include "mmap-stack.h".
- (main): Invoke `run' through a macro that (when possible) runs it
- with a large, mmap'd stack.
-
- * src/cp.c (run): New function, preparing for the above.
- Exit from this function, not from main
- (main): Call run.
-
- * src/du.c: New option: --apparent-size.
- (enum) [APPARENT_SIZE_OPTION]: New member.
- (long_options): Add it.
- (usage): Describe it.
- (main): Handle it.
- ['b']: Set apparent_size.
- David Eisner reported that the behavior of --bytes had changed.
- Paul Eggert proposed the use of a new option, --apparent-size.
-
- * src/du.c (apparent_size): New global.
- (print_only_size): Reflect the fact that we're printing byte counts,
- not ST_NBLOCKSIZE-byte-block counts.
- (print_size): Call print_only_size rather than duplicating its code.
- (process_file): Accumulate byte counts, rather than block counts.
-
- * src/du.c (process_file): Always reset size_to_propagate_to_parent
- for --separate-dirs (-S).
-
-2003-02-20 Jim Meyering <jim@meyering.net>
-
- * Use automake-1.7.3. Regenerate dependent files.
-
- * src/stat.c (print_stat): New format: %B (to print ST_NBLOCKSIZE).
- This makes %b (number of ST_NBLOCKSIZE-byte blocks) more useful.
- (usage) [%B]: Describe it.
- [%b]: Refer to %B.
-
- * src/du.c (process_file): Reorganize the code to use only
- one `sum' array, and change how -S works back to the way it was
- before 2003-01-31. Patch by Bruno Haible.
-
- * tests/du/basic: New test.
- * tests/du/Makefile.am (TESTS): Add basic.
-
- * tests/envvar-check: Add checks for the following:
- BLOCK_SIZE, DU_BLOCK_SIZE, DF_BLOCK_SIZE, LS_BLOCK_SIZE.
-
- * tests/Makefile.am: Rename phony target envvar-check to evar-check
- so as not to conflict with the distributed file by the same name.
-
- * src/du.c (process_file): Set info->skip before any possible return.
-
- Report correct usage for directories, not 0.
- * src/du.c (process_file): Return for `file_type == FTW_DPRE'
- _before_ recording the dev/ino of a directory.
- Reported by Bruno Haible.
-
- Now, df always displays the device file name corresponding to the
- listed mount point under `Filesystem'. Before, for an unmounted
- block- or character-special file argument, it would display the
- command-line argument instead.
- * src/df.c (show_disk): Return a value indicating whether
- there was a match. Don't try to find a mount point here.
- (show_entry): If show_disk doesn't find a match, call show_point.
-
-2003-02-19 Jim Meyering <jim@meyering.net>
-
- * src/du.c: Include "mmap-stack.h".
- (du_files): Add prototype with ATTRIBUTE_NORETURN.
- Exit from this function, not from...
- (main): ...here.
- Instead, if possible, invoke du_files through a macro that
- runs it with a large, mmap'd stack.
-
- * src/join.c (usage): Change wording in --help output:
- use FILENUM instead of `SIDE' and say what FILENUM means.
- Reported by Bernhard Gabler.
-
- * src/df.c (print_header): Rather than using a hard-coded literal
- string of spaces matching the length of the English `...Type' header,
- output the right number of spaces to match the selected translation.
- Reported by Yann Dirson and Jean Charles Delepine as Debian bug 131113.
-
- * src/split.c (bytes_split): Remove unnecessary `else' after break.
- (lines_split): Likewise. and correct misleading indentation.
-
- * src/split.c: Include "full-read.h".
- (bytes_split, lines_split, line_bytes_split): Use full_read,
- not safe_read. The way split was using the latter, a short read
- could cause split to terminate before EOF.
-
- * tests/misc/tty-eof: Test all programs that can read stdin,
- requiring no arguments and that write to standard output.
-
- * tests/misc/tty-eof: New file. Renamed from ...
- * tests/misc/cat-tty-eof: Remove file. Rename to tty-eof.
- * tests/misc/Makefile.am (TESTS): Reflect renaming.
-
-2003-02-18 Jim Meyering <jim@meyering.net>
-
- cksum would perform an extra read after encountering EOF
- * src/cksum.c (cksum): Exit the loop upon EOF, too.
- Patch by Michael Bacarella.
-
- Test for the bug fixed today in cksum, md5sum, and sha1sum.
- * tests/misc/cat-tty-eof: Generalize, clean-up, and test for
- cat, cksum, md5sum, and sha1sum all in the same loop.
-
-2003-02-14 Jim Meyering <jim@meyering.net>
-
- * src/remove.c: Include "euidaccess.h".
- Remove declaration of euidaccess.
-
-2003-02-12 Jim Meyering <jim@meyering.net>
-
- * src/pathchk.c (portable_chars_only): Remove unnecessary `const'
- in cast to avoid warning from icc. Reported by Alexandre Duret-Lutz.
-
-2003-02-10 Jim Meyering <jim@meyering.net>
-
- * src/test.c: Don't include group-member.h.
- Include euidaccess.h.
- (eaccess): Rewrite function to set the real uid and gid temporarily
- to the effective uid and gid, then invoke 'access', and then set the
- real uid and gid back. On systems that lack setreuid or setregid,
- fall back on the kludges in euidaccess. Before, it would not work
- for e.g., files with ACLs, files that were marked immutable,
- or on file systems mounted read-only. Nelson Beebe raised the issue.
- Paul Eggert suggested the new implementation.
-
-2003-02-09 Jim Meyering <jim@meyering.net>
-
- * src/test.c (test_stat): Remove function. It's job is done (only
- when necessary) by the wrapper in lib/stat.c. Adjust all uses.
-
-2003-02-08 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.7.
-
- * tests/mv/part-symlink: Don't assume that the file owner username
- length is less than 9 in ls output: instead, omit that field
- altogether. Reported by, and suggested fix from, Ferdinand.
-
- * tests/du/restore-wd: New test for just-fixed bug in ftw.c.
- * tests/du/Makefile.am (TESTS): Add restore-wd.
-
- * src/rm.c: Correct now-invalid comment about cycle-detection.
-
-2003-02-06 Jim Meyering <jim@meyering.net>
-
- * NEWS: Add entries from old/*/NEWS
- from fileutils-4.1 through 4.1.11 and
- from sh-utils-2.0 through 2.0.15. Suggestion from Karl Berry.
-
- * Version 4.5.6.
-
- * src/du.c (process_file): Don't return early for excluded files
- or for files whose dev/inode we've already seen.
-
-2003-02-05 Jim Meyering <jim@meyering.net>
-
- * tests/du/exclude: New file.
- * tests/du/Makefile.am (TESTS): Add exclude.
-
-2003-02-04 Dmitry V. Levin <ldv@altlinux.org>
-
- * src/who.c (print_boottime, print_deadprocs, print_runlevel):
- Fix memory allocation arithmetic.
-
-2003-02-04 Jim Meyering <jim@meyering.net>
-
- `df /dev/block-or-char-device-file--not-mounted' now reports
- the name of the file system on which the file resides, usually `/'.
- Before, it would leave the `Mounted on' field blank.
- * src/df.c (show_disk): Move function to precede find_mount_point.
- (show_disk): Add parameter: STATP.
- If we don't find a matching device name, then resort to calling
- find_mount_point. Reported by Bob Proulx.
-
-2003-02-03 Andreas Schwab <schwab@suse.de>
-
- * tests/rm/cycle: Require non-root.
- * tests/rm/isatty: Likewise.
-
-2003-02-02 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.5.
-
- * man/Makefile.am (check-x-vs-1): Use @PATH_SEPARATOR@, not `:'.
-
- Ensure that there are no offending uses of `:'.
- * Makefile.maint (makefile_path_separator_check): New rule.
- (local-check): Add it to the list.
-
-2003-02-01 Jim Meyering <jim@meyering.net>
-
- * src/du.c (MAX_N_DESCRIPTORS): Define.
-
- * src/stat.c (G_fail): New global.
- (human_time): Diagnose failed localtime, not failed nstrftime.
- (main): Fail if G_fail is set.
-
-2003-01-31 Richard Dawe <rich@phekda.freeserve.co.uk>
-
- * tests/basename/Makefile.am: Use @PATH_SEPARATOR@ instead of
- hard-coding the path-separator. Also double-quote the new PATH,
- to avoid problems when the path-separator is a semi-colon or when
- `pwd` contains e.g. a space.
- * tests/chgrp/Makefile.am: Likewise.
- * tests/chmod/Makefile.am: Likewise.
- * tests/chown/Makefile.am: Likewise.
- * tests/cp/Makefile.am: Likewise.
- * tests/dd/Makefile.am: Likewise.
- * tests/dircolors/Makefile.am: Likewise.
- * tests/du/Makefile.am: Likewise.
- * tests/expr/Makefile.am: Likewise.
- * tests/factor/Makefile.am: Likewise.
- * tests/fmt/Makefile.am: Likewise.
- * tests/install/Makefile.am: Likewise.
- * tests/ln/Makefile.am: Likewise.
- * tests/ls/Makefile.am: Likewise.
- * tests/ls-2/Makefile.am: Likewise.
- * tests/md5sum/Makefile.am: Likewise.
- * tests/misc/Makefile.am: Likewise.
- * tests/mkdir/Makefile.am: Likewise.
- * tests/mv/Makefile.am: Likewise.
- * tests/od/Makefile.am: Likewise.
- * tests/rm/Makefile.am: Likewise.
- * tests/rmdir/Makefile.am: Likewise.
- * tests/seq/Makefile.am: Likewise.
- * tests/sha1sum/Makefile.am: Likewise.
- * tests/shred/Makefile.am: Likewise.
- * tests/stty/Makefile.am: Likewise.
- * tests/sum/Makefile.am: Likewise.
- * tests/tail-2/Makefile.am: Likewise.
- * tests/touch/Makefile.am: Likewise.
- * tests/tsort/Makefile.am: Likewise.
- * tests/unexpand/Makefile.am: Likewise.
-
-2003-01-31 Jim Meyering <jim@meyering.net>
-
- * src/stat.c: Include "file-type.h"
- (print_human_type): Remove function.
- (human_access): Rename from print_human_access. Return a string.
- (human_time): Rename from print_human_time. Return a string.
- (print_stat): Arrange so that field width and an alignment specifier
- are honored for the %A, %F, %x, %y, and %z formats.
- [%F]: Use file_type; this gives slightly different file type strings,
- e.g., `directory' instead of `Directory' and `regular file' or
- `regular empty file' instead of `Regular file'.
- Prompted by a report from Richard Dawe that the uses of
- S_IFSOCK and S_IFIFO in print_human_time were not portable
- to systems using e.g., DJGPP.
-
-2003-01-31 Richard Dawe <rich@phekda.freeserve.co.uk>
-
- * src/stat.c (print_stat): Use S_ISLNK rather than an explicit
- test using S_IFMT and S_IFLNK. S_IFLNK may not be defined.
-
-2003-01-31 Jim Meyering <jim@meyering.net>
-
- * src/du.c (main): Upon processing an invalid option or an invalid
- --exclude-from or --max-depth option argument, don't exit right away,
- in case there are others. Rather record the failure and exit after
- processing other options.
-
- * GNUmakefile (TAR_OPTIONS): Set and export, in order to make
- tar archive easier to reproduce.
-
- Rewrite to perform directory traversal using nftw.
-
- * src/du.c: Include "dirname.h", "ftw.h", and "quotearg.h".
- (AUTHORS): Add self.
- (opt_one_file_system): Move global into `main'.
- (path, xstat, exit_status): Remove declarations.
- (arg_length, suffix_length): New globals.
- (G_fail): New global, sort of like the old `exit_status'.
- (IS_FTW_DIR_TYPE): Define.
- (print_only_size): New function.
- (process_file): New function.
- (str_init, ensure_space, str_copyc, str_concatc): Remove functions.
- (str_trunc, pop_dir, count_entry): Likewise.
- (du_files): Rewrite to use nftw.
-
-2003-01-30 Jim Meyering <jim@meyering.net>
-
- * tests/du/trailing-slash: Ensure that du/ftw follows a command-line
- symlink-to-directory with -L, even without the trailing slash.
-
-2003-01-27 Jim Meyering <jim@meyering.net>
-
- * src/Makefile.am (check-misc): Check for st_blocks, too.
-
- * src/stat.c (print_stat): Use ST_NBLOCKS rather than `->st_blocks'.
- Reported by Richard Dawe.
-
-2003-01-27 Andreas Schwab <schwab@suse.de>
-
- * src/ls.c (quote_name): Add fourth parameter, width, into which to
- store the screen columns, and return the number of bytes instead.
- (print_dir): Pass NULL as fourth parameter of quote_name.
- (print_name_with_quoting): Likewise.
- (length_of_file_name_and_frills): Get the width from the fourth
- parameter of quote_name instead of return value.
-
-2003-01-27 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (decode_switches): If `dired' is set without
- `format == long_format', then silently reset dired. This doesn't
- change the behavior of ls (all prior uses of dired were protected
- by `&& format == long_format'), and lets us...
- (DIRED_INDENT): ... remove the `format == long_format' conjunct.
- (PUSH_CURRENT_DIRED_POS): Likewise.
- (main): Likewise.
-
-2003-01-22 Jim Meyering <jim@meyering.net>
-
- * tests/du/no-x: New test, for functionality added to lib/ftw.c.
- * tests/du/Makefile.am (TESTS): Add no-x.
-
-2003-01-21 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (remove_entry) [ROOT_CAN_UNLINK_DIRS
- && HAVE_STRUCT_DIRENT_D_TYPE]: If a file has d_type == DT_UNKNOWN
- it may still be a directory -- or not (e.g., with FreeBSD on an
- NFS-mounted file system), so resort to calling lstat to find out.
- Based on a patch by Michael van Elst.
-
- * tests/cp/same-file: Don't assume that the file owner username
- length is less than 9 in ls output: instead, omit that field
- altogether. Reported by, and suggested fix from, Ferdinand.
-
-2003-01-20 Jim Meyering <jim@meyering.net>
-
- * tests/date/Test.pm (wide-fmt): New test to demonstrate that
- large format widths no longer cause strftime to infloop.
-
- * Makefile.maint (mail_gpg_sign_cookie): Remove now-unused definition.
-
-2003-01-19 Jim Meyering <jim@meyering.net>
-
- * src/readlink.c: Include "canonicalize.h".
-
-2003-01-18 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (Dereference_symlink) [DEREF_COMMAND_LINE_SYMLINK_TO_DIR]:
- New member.
- (enum) [DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION]: New member.
- (long_options): Add option --dereference-command-line-symlink-to-dir.
- (main): Make DEREF_COMMAND_LINE_SYMLINK_TO_DIR be the default,
- rather than DEREF_COMMAND_LINE_ARGUMENTS, when none of the
- -d, -F, -l options is specified.
- (decode_switches): Handle --dereference-command-line-symlink-to-dir.
- (gobble_file): Honor DEREF_COMMAND_LINE_SYMLINK_TO_DIR.
- Change --dereference-command-line (-H) to dereference *all*
- command line arguments, including broken symlinks.
-
-2003-01-15 Paul Eggert <eggert@twinsun.com>
-
- Change ls -H back to the way it was yesterday, since this is
- compatible with FreeBSD and the POSIX spec is confusing
- and somewhat contradictory.
-
- * src/ls.c (DEREF_COMMAND_LINE_ARGUMENTS): Change name back
- from DEREF_COMMAND_LINE_SYMLINK_TO_DIR, updating all uses.
- (long_options): Change the long option name back.
- (usage): Change the usage back.
- (gobble_file): When -H is specified, dereference a top-level
- arg even if it points to a non-directory.
-
-2003-01-15 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (gobble_file): Fall back on using lstat when required:
- when --dereference (-L) is not specified, and
- - when operating on a dangling symlink
- - when operating on command-line-symlink-to-directories
- This fixes numerous problems. Here are examples:
- - `ls dangling-symlink' would fail with `no such file...'
- Now it prints `dangling-symlink'.
- - `ls -i symlink' would mistakenly print the inode of the referent.
- Now it prints the inode of the symlink. Likewise for --size (-s).
- Based on a patch from Michael Stone.
- Reported by Deepak Goel as Debian bug #173793.
-
- Rename ls's --dereference-command-line (-H)
- option to --dereference-command-line-symlink-to-dir.
- * src/ls.c [enum Dereference_symlink]
- (DEREF_COMMAND_LINE_SYMLINK_TO_DIR): Rename from
- DEREF_COMMAND_LINE_ARGUMENTS. Update all uses.
- (long_options): Rename the long option.
- (usage): Say that --dereference-... changes how ls treats
- only symlinks to directories specified on the command line.
-
-2003-01-14 Jim Meyering <jim@meyering.net>
-
- * tests/ls/dangle: New file/test, for the above fix.
- * tests/ls/inode: Another new file/test, for the above fix.
- * tests/ls/Makefile.am (TESTS): Add dangle and inode.
-
- * src/ls.c (gobble_file): Fix a bug introduced in 4.5.4 that made it
- so that ls --color would no longer highlight the names of files with
- the execute bit set when not specified on the command line.
- Patch by Michael Stone. Reported by Stephen Depooter as
- Debian bug 175135.
-
- * tests/ls-2/tests (color-exe): New test, for the above fix.
-
-2003-01-13 Jim Meyering <jim@meyering.net>
-
- * tests/shred/exact: Also test for just fixed bug with --zero.
-
- * src/shred.c (long_opts): --zero does not require an argument.
- Patch by Michael Stone. Reported by Roland Turner as Debian bug 172019.
-
-2003-01-12 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (cvs-update): Skip any file with local modifications.
-
- * src/unexpand.c (usage): Document --first-only and mention that
- --tabs=N (-t) enables --all (-a). Reported by wiregauze@yahoo.com.
-
-2002-12-01 Dmitry V. Levin <ldv@altlinux.org>
-
- * src/df.c: Include "canonicalize.h".
- Use canonicalize_file_name unconditionally.
-
-2003-01-09 Jim Meyering <jim@meyering.net>
-
- * README: Add readlink.
-
-2002-11-30 Dmitry V. Levin <ldv@altlinux.org>
-
- * src/df.c: Include "xgetcwd.h".
- * src/pwd.c: Likewise.
-
-2002-11-30 Dmitry V. Levin <ldv@altlinux.org>
-
- * src/shred.c: Remove declaration of xstrdup.
- We already get it via xalloc.h which is included via system.h.
-
-2002-08-27 Dmitry V. Levin <ldv@altlinux.org>
-
- New program: readlink.
-
- * src/Makefile.am (bin_PROGRAMS): Add readlink.
- * src/readlink.c: New file.
-
- * man/readlink.x: New file.
- * man/Makefile.am (dist_man_MANS): Add readlink.1.
- (readlink.1): New rule.
-
-2003-01-09 Jim Meyering <jim@meyering.net>
-
- When selecting ranges of byte offsets (as opposed to ranges of fields)
- and when --output-delimiter=STRING is specified, output STRING between
- ranges of selected bytes.
- * src/cut.c (RANGE_START_SENTINEL): Define.
- (output_delimiter_specified): New global.
- (print_kth): Add parameter. Adjust all callers.
- (set_fields): Mark each range-start index with RANGE_START_SENTINEL.
- (cut_bytes): When requested, output STRING between ranges of
- selected bytes.
- (main): Make a diagnostic a little clearer.
- Based on a patch from Jan Nieuwenhuizen.
-
- * tests/cut/Test.pm: New tests for the above.
-
- * src/cut.c (set_fields): Make code agree with comment:
- Don't merge abutting ranges like 4- and 2-3. This makes no
- difference currently, but is required to support an upcoming change.
-
-2003-01-07 Jim Meyering <jim@meyering.net>
-
- * src/cut.c (set_fields): Fix typo in comment.
-
- * tests/touch/not-owner: New test, mostly extracted from fail-diag.
- * tests/touch/Makefile.am (TESTS): Add not-owner.
- * tests/touch/fail-diag: Remove the test for non-owner diagnostic.
- Now, this tests only the nonexistent-directory diagnostic.
- Suggestion from Michael Stone.
-
- * tests/touch/fail-diag: Fix typo: s/ld/ls/.
-
-2003-01-04 Jim Meyering <jim@meyering.net>
-
- * src/copy.h: Remove use of PARAMS.
- * src/remove.h: Likewise.
- * src/chown-core.h: Likewise.
-
- rm could be tricked into mistakenly reporting a cycle.
- * src/remove.c: [cycle_check_state]: New global.
- (remove_cwd_entries): Adapt to new semantics of cycle_check.
- (rm): Call cycle_check_init and cycle_check_free for each file.
- * tests/rm/cycle (rm): New test, for the above fix.
- * tests/rm/Makefile.am (TESTS): Add cycle.
-
- When rm detects a cycle, don't abort the entire command,
- but rather just the affected command line argument.
- * src/remove.c: Include <setjmp.h>
- (struct dirstack_state) [current_arg_jumpbuf]: New member.
- (remove_cwd_entries): Call longjmp if we detect a cycle.
- (rm): Call setjmp here.
-
- * src/remove.c (cycle_check, is_power_of_two): Remove functions.
- Instead, include cycle-check.h and use it.
-
- * src/remove.h (struct dev_ino): Remove declaration.
-
- * src/remove.c (remove_cwd_entries): Fix typos in comment.
-
- Don't include trailing /. in diagnostics about directories.
- * src/remove.c (full_filename_): When FILENAME is just `.'
- and there is a nonempty directory-name part, don't append `/.'.
- * tests/rm/unread2: Remove trailing /. from diagnostic.
- * tests/rm/rm2: Likewise.
-
- * src/remove.c (struct dirstack_state): Define.
- To be used in place of these file-scoped globals ...
- (dir_stack, len_stack, Active_dir): Remove globals.
- (ds_init, ds_free): New functions.
- (full_filename): Define.
- (full_filename_): Rename from full_filename.
-
- Begin to make AD_* functions more generic.
- * src/remove.c (AD_push_initial): Don't set status to RM_OK here.
- (AD_push): Likewise.
- (AD_INIT_OTHER_MEMBERS): Define.
- (remove_dir): Define the `status' member manually after each
- call to AD_push or AD_push_initial.
-
- * src/Makefile.am (check-misc): New rule, to ensure that no more
- S_IS* macro definitions sneak into the code.
- (check): Depend on check-misc.
-
- * src/remove.c [S_ISLNK]: Don't define. It's already defined in sys2.h.
- * src/du.c (count_entry) [S_ISLNK]: Don't define.
- * src/shred.c [S_ISLNK, S_ISFIFO, S_ISSOCK]: Don't define.
-
-2003-01-03 Jim Meyering <jim@meyering.net>
-
- * src/true.c: Add copyright.
- (AUTHORS): I suppose I've written it.
-
- * src/Makefile.am (false.c): Make the generated file be read-only.
-
-2003-01-04 Jim Meyering <jim@meyering.net>
-
- * src/ls.c: Include "dev-ino.h".
- [struct dev_ino]: Remove declaration.
-
-2003-01-02 Jim Meyering <jim@meyering.net>
-
- * src/cp.c (do_copy): Tweak diagnostic to be consistent with the one
- from mv: s/missing file arguments/missing file argument/.
- With --target-directory=DIR, cp and mv work with a single file argument.
- Reported by Karl Berry.
-
- * tests/rm/isatty: Enable this test.
-
-2002-12-31 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (AD_push_initial): Don't set status to RM_OK here.
- (AD_push): Likewise.
- (AD_INIT_OTHER_MEMBERS): Define.
- (remove_dir): Define the `status' member manually after each
- call to AD_push or AD_push_initial.
-
- * src/ls.c [struct dev_ino]: Remove definition.
- Include "dev-ino.h" instead.
-
-2002-12-28 Jim Meyering <jim@meyering.net>
-
- * tests/du/Makefile.am (TESTS): Add no-deref.
- * tests/du/no-deref: New script.
-
-2002-12-23 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (remove_cwd_entries): Fix typo in comment.
-
-2002-12-21 Jim Meyering <jim@meyering.net>
-
- * announce-gen: Generate MML-formatted announcement.
- This makes it a *lot* harder to send stale MD5/SHA1 signatures.
-
-2002-12-20 Jim Meyering <jim@meyering.net>
-
- * src/touch.c (touch): Change the wording of a diagnostic so
- that it makes sense both when the file exists and when it doesn't.
- Suggestion from Michael Stone.
-
-2002-12-18 Jim Meyering <jim@meyering.net>
-
- * src/stty.c (valid_options): Declare to be static.
-
-2002-12-15 Jim Meyering <jim@meyering.net>
-
- * Makefile.cfg: Remove rules related to generating m4/jm-glibc-io.m4.
-
- * src/chmod.c, src/copy.c, src/copy.h, src/cp-hash.h, src/csplit.c:
- * src/date.c, src/expr.c, src/fmt.c, src/id.c, src/install.c:
- * src/ls.c, src/od.c, src/pathchk.c, src/pr.c, src/remove.c:
- * src/shred.c, src/sort.c, src/stat.c, src/stty.c, src/sum.c:
- * src/tee.c, src/test.c: Remove all uses of `PARAMS'.
-
- * src/remove.c (PARAMS): Remove definition.
- * src/sys2.h: Likewise.
-
- * src/ls.c, src/stat.c, src/date.c: Remove declaration of nstrftime.
- Include strftime.h instead.
-
-2002-12-14 Jim Meyering <jim@meyering.net>
-
- * Makefile.cfg ($(url_dir_list)): Use .../coreutils, not .../fetish.
-
- * src/system.h [! HAVE_DECL_MEMRCHR]: Declare memrchr.
- This is necessary at least for Irix6.5 when using c89.
- Reported by Nelson Beebe.
-
- * tests/misc/Makefile.am (TESTS): Add cat-tty-eof.
-
- * tests/misc/cat-tty-eof: New test.
-
- * src/mknod.c (usage): Specify how major and minor mode numbers
- are interpreted. Report forwarded by Kristin E Thomas.
- * src/mknod.c: Remove now-redundant usage-specifying comment.
-
-2002-12-13 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.4.
-
- * tests/du/trailing-slash: Allow for a directory of size `0'.
- That happens at least on file systems of type tmpfs on linux-2.4.18.
-
- * announce-gen: New script to begin replacing the commands
- associated with the rule here...
- * Makefile.maint (announcement): Invoke announce-gen.
- * Makefile.am (EXTRA_DIST): Add announce-gen.
-
- * tests/cp/preserve-2: New file/test, for latest fix.
- * tests/cp/Makefile.am (TESTS): Add preserve-2.
-
-2002-12-11 TAKAI Kousuke <takai@vlsi.kuee.kyoto-u.ac.jp>
-
- Fix a bug whereby cp would fail to parse an option like
- --preserve=mode,ownership.
- * src/cp.c (decode_preserve_arg): Advance `comma' to
- point the character following the comma.
-
-2002-12-11 Jim Meyering <jim@meyering.net>
-
- * src/pathchk.c (NEED_PATHCONF_WRAPPER): Undefine before defining,
- in case it's already defined.
-
-2002-12-09 Jim Meyering <jim@meyering.net>
-
- * tests/touch/fail-diag: Don't get a test failure if /no exists.
- Instead, evoke a framework failure if /no-$$ exists.
- Reported by Michael Stone.
-
-2002-12-08 Jim Meyering <jim@meyering.net>
-
- * src/du.c (lstat) [! LSTAT_FOLLOWS_SLASHED_SYMLINK]:
- Define to rpl_lstat, so that even on systems like Solaris 5.8,
- du honors (per POSIX) the trailing slash on an argument referring
- to a symlink-to-directory.
-
-2002-12-06 Jim Meyering <jim@meyering.net>
-
- * Use autoconf-2.57. Regenerate dependent files.
- * Use automake-1.7.2. Regenerate dependent files.
-
- * src/ls.c (gobble_file): Also stat the file if it's a
- regular file and --indicator-style=classify (aka -F).
- Thanks to Ed Santiago for opening my eyes.
-
- * tests/ls/file-type: New file. Test for the above.
- A test to contrast ls -F and ls --indicator-style=file-type.
- * tests/ls/Makefile.am (TESTS): Add file-type.
-
-2002-12-04 Jim Meyering <jim@meyering.net>
-
- * tests/ls/follow-slink: Make sure the symlink was created.
- Richard Dawe reported that `ln -s link link' succeeds, but creates
- no file on systems running some version of the DJGPP libc.
-
-2002-12-03 Jim Meyering <jim@meyering.net>
-
- * src/Makefile.am (AUTOMAKE_OPTIONS): Remove definition (to ansi2knr)
- since this package no longer panders to K&R compilers.
-
-2002-12-02 Jim Meyering <jim@meyering.net>
-
- * tests/du/slink: Skip this test if `.' is on a non-local file system.
-
- * tests/Fetish.pm (_at_replace): Do the substitution only if there's
- something to replace.
-
-2002-12-01 Jim Meyering <jim@meyering.net>
-
- * src/stat.c: Don't include <string.h> or <ctype.h>.
- That's already done via system.h.
- * src/dircolors.c: Don't include <ctype.h>.
-
-2002-11-30 Jim Meyering <jim@meyering.net>
-
- * ls.c (gobble_file): Remove the block of code that caused
- `ls --color -F symlink-to-dir' to list the files in
- `symlink-to-dir/.'. Now, it prints `symlink-to-dir@', (just
- like `ls -F symlink-to-dir') but with the addition of highlighting.
- Similarly, `ls --color -dF symlink-to-dir' would print
- `symlink-to-dir/'; now it prints `symlink-to-dir@'.
- Reported by Jeff Sheinberg as Debian bug #168203.
- * tests/ls-2/tests (sl-F-color, sl-dF-color): New tests for the above.
-
- ls is now more efficient: with certain options, it no longer needs
- to stat each directory entry on systems with valid dirent.d_type.
- * src/ls.c (print_dir): Add DT_LNK and DT_REG.
- (main): Make --recursive set format_needs_type, not format_needs_stat.
- (gobble_file): Remove a FIXME comment, now that it's fixed.
-
-2002-11-24 Jim Meyering <jim@meyering.net>
-
- * src/du.c (du_files): Don't strip any trailing slash.
- Rewrite so that `/' is no longer represented internally as
- the empty string.
- (count_entry): When appending a file name component,
- account for the fact that the current path may end in `/'.
- François Pinard reported that `du symlink-to-dir/' was not
- equivalent to `du symlink-to-dir/.'. Now it is.
- * tests/du/trailing-slash: New file/test, for the above fix.
- * tests/du/Makefile.am (TESTS): Add trailing-slash.
-
-2002-11-23 Jim Meyering <jim@meyering.net>
-
- * src/tac.c (output): Declare some local variables to be of type size_t,
- rather than `int' to avoid warnings from gcc.
-
-2002-11-21 Paul Eggert <eggert@twinsun.com>
-
- * src/ls.c (decode_switches): Use case-sensitive matching to
- decode the QUOTING_STYLE environment variable. This is more
- consistent with the documentation, and with --quoting-style.
-
-2002-11-21 Martin Buck <martin.buck@ascom.ch
-
- * src/stty.c (struct speeds): Add support for all baud rates defined
- in linux-2.4.19.
-
-2002-11-19 Jim Meyering <jim@meyering.net>
-
- * tests/sum/sysv: Export LC_ALL=C, to avoid failure when
- run in a UTF locale. Report and suggested fix by Bruno Haible.
- * tests/fmt/basic: Likewise.
-
-2002-11-17 Jim Meyering <jim@meyering.net>
-
- * configure.ac: Update via autoupdate.
- Add `AM_GNU_GETTEXT_VERSION(0.11.5)'.
-
- * src/mv.c (movefile): Don't remove trailing slashes from SOURCE.
- Reported by Hans Ginzel.
-
-2002-11-15 Jim Meyering <jim@meyering.net>
-
- * Makefile.cfg (gnu_rel_host): Define.
- (url_dir_list): Choose from (alpha|ftp).gnu.org depending
- on whether $(VERSION) looks like a major release number.
-
- * Makefile.maint (mail_gpg_sign_cookie): Backslash-escape `#'.
- (release): Rename from `alpha'.
- (alpha): Depend on release.
-
- * Makefile.maint (signatures): Define with ?=, so it's easy to override.
-
-2002-11-14 Jim Meyering <jim@meyering.net>
-
- * Makefile.maint (mail_gpg_sign_cookie): Make optional.
- (announcement): Use the new variable.
-
- * Makefile.maint: Sync with Bison, i.e.:
- (po-check): Scan .l and .y files instead of the
- .c and the .h files that they generate. This fixes the bug
- reported by Tim Van Holder in:
- <http://mail.gnu.org/pipermail/bison-patches/2002-November/001352.html>
- Look for N_ as well as for _. Try to avoid matching #define for
- N_ and _.
- From Paul Eggert.
-
-2002-11-12 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (HAVE_SYMLINKS): Remove unnecessary macro definition.
- Replace sole use with equivalent `#ifdef S_ISLNK'.
- Inconsistency reported by Dmitry V. Levin.
-
-2002-11-11 Jim Meyering <jim@meyering.net>
-
- * src/stat.c (usage): Transform --help items output via s/ - / /,
- so that help2man produces properly formatted man pages.
- Reported by Herbert Xu as Debian bug #168400.
-
-2002-11-10 Jim Meyering <jim@meyering.net>
-
- * src/ls.c (sighandler): Handle SIGTSTP specially.
- Based on suggestions from Solar Designer and Dmitry V. Levin.
- Add comments.
-
- * Makefile.cfg (cvs_files): Define. From autoconf.
- (local_updates): Likewise.
-
- * src/ls.c (restore_default_color_handler, sigtstp_handler):
- Remove functions.
- (sighandler): New function, based on the one in sort.c.
- (main): Use sigaction, if possible; otherwise signal.
- Handle these signals:
- SIGHUP, SIGINT, SIGPIPE, SIGQUIT, SIGTERM, SIGTSTP.
- Don't register our handler if the signal is already being ignored.
-
- * src/dd.c (interrupt_handler): Use raise, rather than kill+getpid.
- * src/csplit.c (interrupt_handler): Likewise.
- * src/sort.c (sighandler): Likewise.
- (main): Declare `i' and `nsigs' to be unsigned, not int.
-
-2002-11-09 Jim Meyering <jim@meyering.net>
-
- ls --color: restore terminal text color upon signal.
- * src/ls.c: Include "full-write.h" and <signal.h>.
- (restore_default_color, restore_default_color_handler): New functions.
- (sigtstp_handler, put_indicator_direct): New functions.
- (main) [print_with_color]: Register signal handlers.
- Patch mostly by Solar Designer and Stanislav Ievlev.
-
- Update from autoconf.
- * Makefile.maint (AMTAR): Remove definition.
- (update, cvs-update, po-update, do-po-update): New rules.
- (wget-update): Update (thus renaming to cvs-update).
- (automake_repo): Use anoncvs@sources.redhat.com.
-
-2002-11-06 Jim Meyering <jim@meyering.net>
-
- * tests/misc/Makefile.am (TESTS): Add printf-hex.
-
- * tests/misc/printf: Be careful to test the code in this package,
- not the shell built-in function.
-
- * src/printf.c (print_esc): A hexadecimal escape sequence has
- at most two hex. digits, not three. Reported by Padraig Brady.
- (usage): Update description.
- * tests/misc/printf-hex: New file/test, for the above fix.
-
-2002-10-07 Paul Eggert <eggert@twinsun.com>
-
- Add support for locale-specific size indications (e.g.,
- thousands-separators) and for explicit size suffixes on output.
-
- * doc/coreutils.texi (Block size): Say that:
- This affects display format as well as block size.
- Fractional block counts are rounded up.
- ls file size blocksize defaults to 1.
- A block size spec preceded by ' generates thousands separators.
- A suffix without a preceding integer generates suffixes.
- (tail invocation): 32k -> 32 KiB.
- (What information is listed): ls -h is now equivalent to
- ls --block-size=human, and ls -H is now equivalent to
- ls --block-size=si. Displayed file size is now always affected by
- --block-size.
-
- * lib/inttostr.c, lib/inttostr.h, lib/imaxtostr.c, lib/offtostr.c,
- lib/umaxtostr.c: New files, taken from GNU tar.
-
- * lib/Makefile.am (libfetish_a_SOURCES): Add imaxtostr.c, offtostr.c,
- umaxtostr.c.
- (EXTRA_DIST): Add inttostr.c.
-
- * lib/human.c, lib/human.h: Rewrite to support locale-specific
- notations like thousands separators.
- Specify what includer of include.h must include beforehand.
- (human_group_digits, human_suppress_point_zero, human_autoscale,
- human_base_1024, human_SI, human_B): New enum values.
- (human_readable): Rename from human_readable_inexact; put the
- options before the sizes. All uses changed. The old human_readable
- function has been removed; use inttostr.h instead.
- (human_options): Renamed from human_block_size, with new signature
- that allows block sizes up to UINTMAX_MAX. All callers changed.
-
- * m4/prereq.m4 (jm_PREREQ_HUMAN): Check for locale.h, localeconv,
- AC_HEADER_STDBOOL. No need to check for limits.h since it's in
- freestanding C89. No need to check for stdlib.h or string.h since
- autoconf does this now.
-
- * src/cksum.c (cksum): Use primitives from inttostr.h, not
- human.h, to print large numbers simply.
- * src/csplit.c (handle_line_error, parse_patterns): Likewise.
- * src/dd.c (print_stats, main): Likewise.
- * src/df.c (print_header): Likewise.
- * src/factor.c (print_factors): Likewise.
- * src/ls.c (print_long_format, print_file_name_and_frills): Likewise.
- * src/shred.c (dopass): Likewise.
- * src/sort.c (checkfp): Likewise.
- * src/sum.c (bsd_sum_file, sysv_sym_file): Likewise.
- * src/tail.c (xlseek): Likewise.
- * src/wc.c (write_counts, wc): Likewise.
-
- * src/df.c (human_output_opts): New var.
- (output_block_size): Now uintmax_t, not int, to handle larger
- block sizes. All uses changed.
- * src/du.c: Likewise.
- * src/ls.c: Likewise.
-
- * src/df.c (print_header): In the header line, prefer SI to human
- representation if it's shorter; if neither is shorter, try to
- intuit what the user would prefer.
-
- * src/expr.c (inttostr): Remove; use new imaxtostr library
- function instead.
-
- * src/ls.c (file_output_block_size): New var, to distinguish
- file sizes from other sizes.
- (decode_switches): Set it.
-
- * src/shred.c (OUTPUT_BLOCK_SIZE): remove.
- (dopass): When printing progress, use floor for what has been done
- so far (since we should be conservative there), and ceiling for
- what needs to be done (since that's what other programs use).
-
-2002-10-19 Jim Meyering <jim@meyering.net>
-
- * src/pinky.c (print_heading): Align TTY and Name headings.
- Reported by Karl Eichwalder.
-
-2002-10-18 Jim Meyering <jim@meyering.net>
-
- * src/split.c (cwrite): Change type of `bytes' parameter to size_t
- Remove now-useless cast.
- (stdread): Remove function.
- (bytes_split): Use size_t instead of int.
- Use safe_read, not stdread.
- (lines_split): Likewise.
- Use memchr rather than a `while' loop.
- (line_bytes_split): Use size_t instead of int.
- Use safe_read, not stdread.
- (main): Add some FIXME comments to remind me to remove casts.
-
- * src/system.h (ST_BLKSIZE): Correct comment describing how to
- reproduce HPUX-11 cat failure. From Petter Reinholdtsen.
-
-2002-10-17 Jim Meyering <jim@meyering.net>
-
- Fix a problem that could make e.g., `cat' misbehave on systems which
- give invalid (unreasonably large) values for stat.st_blksize.
- * src/system.h (ST_BLKSIZE): Ensure that the result is in [1..4MB].
- Reported by Petter Reinholdtsen.
-
-2002-10-14 Jim Meyering <jim@meyering.net>
-
- Specifying a printf conversion specifer as nl's separator string
- could cause nl to segfault.
- * src/nl.c (build_print_fmt): Don't include separator string
- in the printf format; it might contain `%'.
- Use a better bound on the length of the print_fmt buffer.
- (print_lineno): Print the separator here instead.
- Reported by Doug Coleman.
-
- * tests/misc/nl: New file/tests, including a test for the above.
- * tests/misc/Makefile.am (TESTS): Add nl.
-
- * tests/misc/split-l: New test, to make sure `split --lines=N' works.
- * tests/misc/Makefile.am (TESTS): Add split-l.
-
-2002-10-13 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.3.
-
- * src/du.c (usage): Tweak description of --dereference-args/-D.
-
- * src/du.c (count_entry): Also save cwd when dereferencing (via
- --dereference-args, -D) a command-line argument.
- Reported by Michal Svec. Based on a patch by Andreas Schwab.
-
- * src/Makefile.am (../AUTHORS): New target/rule.
-
-2002-10-12 Jim Meyering <jim@meyering.net>
-
- * src/paste.c (paste_parallel): Declare local, `delims_saved', to be
- of type size_t, since that's the way it's used and avoids a warning.
-
- * src/csplit.c (struct cstring) [len]: Declare to be unsigned int,
- since that's how it's always used and avoids a new warning from gcc.
- (read_input): Adapt to new safe_read ABI.
-
- * src/cut.c (cut_fields): Add a temporary size_t variable, n_bytes,
- to avoid warnings.
-
- * src/pinky.c (print_long_entry): fread returns size_t.
- Declare local `bytes' accordingly, to avoid warning.
-
- tail -c +N would perform an extra read after encountering EOF
- [this change is analogous (bytes vs. lines) to the one of 2002-01-27]
- * src/tail.c (start_bytes): Detect EOF, inform caller.
- (tail_bytes): Upon EOF in start_bytes, return immediately.
- (file_lines): Reorganize to use memrchr rather than an explicit loop.
- Adapt to new safe_read ABI.
-
-2002-10-11 Jim Meyering <jim@meyering.net>
-
- * tests/du/deref: New file/test, for the above fix.
- * tests/du/Makefile.am (TESTS): Add deref.
-
-2002-10-10 Jim Meyering <jim@meyering.net>
-
- * tests/ln/Makefile.am (TESTS): Add target-1.
- * tests/ln/target-1: New file/test, for the fix on 2002-10-08.
-
-2002-10-09 Jim Meyering <jim@meyering.net>
-
- * tests/cp/backup-is-src: Ensure that certain environment variables
- are not set (e.g., SIMPLE_BACKUP_SUFFIX). Reported by Duncan Roe.
-
- * tests/tail-2/big-4gb: Mark this as an expensive test; it would
- consume 4GB of disk space on systems without support for sparse files.
- Fix a logic error that'd make it `cat err' even though dd didn't fail.
-
- * src/dircolors.hin (.jar): Fix typo: s/;3$/;31/.
- Patch by steven@magelico.net, forwarded by Michael Stone.
-
- * tests/ls/dired: Ensure that ls produces English messages.
- Patch by Alexey Vyskubov, forwarded by Michael Stone.
-
-2002-10-08 Dmitry V. Levin <ldv@altlinux.org>
-
- * src/ln.c (main): Fix target_directory parsing when n_files == 1.
-
-2002-10-08 Jim Meyering <jim@meyering.net>
-
- * tests/tail-2/big-4gb: Use double quotes around diagnostic.
- Fix syntax in test: use =, not ==.
- Reported by Bob Proulx.
- Change all the rest like this: grep -lR "testing framework'" .\
- |xargs perl -pi -e 's/'\''(\$0: failure in testing framework)'\''/"$1"/'
-
- * src/sum.c (sysv_sum_file): Adapt to new safe_read ABI.
- * src/tr.c (squeeze_filter, read_and_delete, read_and_xlate): Likewise.
- * src/tac.c (save_stdin, tac_stdin_to_mem): Likewise.
- * src/wc.c (wc): Likewise.
-
-2002-10-07 Paul Eggert <eggert@twinsun.com>
-
- * src/cat.c (cat):
- Don't advance the write pointer past the end of the write buffer.
- * src/sort.c (begfield, limfield): Likewise.
-
-2002-10-07 Jim Meyering <jim@meyering.net>
-
- * src/cat.c (simple_cat, cat): Adapt to new safe_read ABI.
- * src/head.c (head_bytes, head_lines): Likewise.
-
-2002-10-06 Jim Meyering <jim@meyering.net>
-
- * src/dd.c (scanargs): Ensure that specified block sizes (specified
- via ibs=N, obs=N, and bs=N) are no larger than SSIZE_MAX.
- (skip, dd_copy): Adapt to new safe_read ABI.
-
- * Makefile.maint (signatures): Define.
- (%.sig): New rule.
- (announcement): Depend on $(signatures).
-
- * Makefile.maint (announcement): Output all URLs for detached
- signatures, not just the last one from the previous loop.
-
-2002-10-05 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.2.
-
- * src/remove.c (remove_entry) [ROOT_CAN_UNLINK_DIRS]: With `rm -i DIR',
- don't recurse into directory, DIR. Prompted by a report from
- Leonardo Milano.
-
- * tests/rm/i-no-r: New file/test, for the above fix.
- * tests/rm/Makefile.am (TESTS): Add i-no-r.
-
- * tests/tail-2/big-4gb: New file/test, for the fix of 2002-09-27.
- * tests/tail-2/Makefile.am (TESTS): Add big-4gb.
-
-2002-10-03 Jim Meyering <jim@meyering.net>
-
- * src/rm.c (AUTHORS): Mark translatable string with `N_ (...)'.
- * src/df.c (AUTHORS): Likewise.
- * src/du.c (AUTHORS): Likewise.
- * src/tail.c (AUTHORS): Likewise.
- * src/touch.c (AUTHORS): Likewise.
-
-2002-10-02 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (SUBDIRS): Remove `old'.
- (EXTRA_DIST): List the files in old/.
- * configure.ac (AC_CONFIG_FILES): Remove old/* names.
- Suggestion from Akim Demaille.
-
-2002-10-01 Jim Meyering <jim@meyering.net>
-
- * src/sys2.h (SSIZE_MAX): Define.
-
-2002-09-30 Jim Meyering <jim@meyering.net>
-
- * src/csplit.c: Don't include stdlib.h here. It's already included
- via system.h.
-
-2002-09-29 Jim Meyering <jim@meyering.net>
-
- * src/tr.c (find_bracketed_repeat): Rearrange pointer/integer
- expression to avoid bogus warning from gcc.
-
- * src/cat.c (simple_cat): Use a temporary to avoid bogus warnings.
- (cat): Declare insize and outsize to be of type size_t, not int.
- Rearrange pointer/integer expressions to avoid bogus warnings.
- (main): Declare insize and outsize to be of type size_t, not int.
-
- * src/tail.c (parse_options): Give a sensible diagnostic for
- an invalid byte or line count. Reported by Mikko Tuumanen.
-
- * src/touch.c (main): Split a long line.
-
- * tests/du/Makefile.am (TESTS): Add slink.
- * tests/du/slink: New test for system.h change of 2002-08-31.
-
- In move mode, always first try to rename. Before, upon failure to
- rename a directory, this code would never attempt to rename any
- other file in that directory, but would thenceforth always copy.
- On some systems (e.g., NetApp's OnTap-6.4), renaming a directory
- may fail with EXDEV, yet renaming files within that directory to
- a newly-created destination directory succeeds.
- * src/copy.c (copy_internal): Remove local, move_mode;
- use x->move_mode instead. Based on a patch from Tom Haynes.
-
-2002-09-28 Jim Meyering <jim@meyering.net>
-
- * src/split.c (FAIL_ONLY_ONE_WAY): New macro.
- Factor out some duplication.
- (main): Use it.
- [case 'a']: Use strtoul rather than strtol to avoid compiler warnings.
-
- * src/sort.c (begfield, limfield): Rearrange comparisons to avoid
- compiler warnings.
- (fillbuf, keycompare): Cast literal `-1' to size_t in comparisons,
- to avoid compiler warnings.
-
- * src/shred.c (dopass): Use a uintmax_t temporary to avoid bogus
- compiler warnings.
-
- Fix things so `mkdir -p' can create very deep directories, e.g.,
- mkdir -p $(perl -e 'print "a/" x 40000') now works.
- * src/mkdir.c (main): For --parents (-p), call make_path with the
- entire directory name, so we don't ever require that file operations
- like stat or chmod be performed on the entire command line argument.
- * makepath.c (make_path): Restore umask *before* creating the final
- component.
-
-2002-09-27 Andreas Schwab <schwab@suse.de>
-
- * src/tail.c (tail_bytes): Change type of bytes_remaining to off_t
- to avoid overflow. Reported by Hans Lermen.
-
-2002-09-26 Jim Meyering <jim@meyering.net>
-
- * src/install.c (get_ids): Use strtoul, not strtol. Remove some casts.
-
-2002-09-25 Jim Meyering <jim@meyering.net>
-
- * src/test.c (eaccess): Change type of local `euid' from int to uid_t
- and add a cast, to avoid a warning about `signed and unsigned type in
- conditional expression'.
-
-2002-09-22 Jim Meyering <jim@meyering.net>
-
- * src/rmdir.c: Include "dirname.h", for declaration of
- strip_trailing_slashes.
-
- * src/stat.c (PRIdMAX, PRIuMAX): Remove definitions.
- Now they're defined through system.h.
-
- * src/cp-hash.c, src/dd.c, src/df.c, src/du.c, src/ls.c,
- * src/stat.c, src/wc.c: Remove all inclusions of inttypes.h,
- since it's already included from sys2.h via system.h.
-
- * Use automake-1.6f. Regenerate dependent files.
-
- * src/Makefile.am (PERL): Remove duplicate definition.
-
- fmt's -s, -t, -c options didn't work properly for long lines.
- Since get_line may end up calling put_paragraph (for long lines),
- be sure to set global, `other_indent', before it is used there.
-
- * src/fmt.c (set_other_indent): New function, factored out of...
- (get_paragraph): ... here. Call it.
- (get_line): Call set_other_indent before calling flush_paragraph,
- which calls fmt_paragraph, which in turn calls put_paragraph,
- which uses other_indent.
-
- * tests/fmt/Makefile.am (TESTS): Add long-line.
- * tests/fmt/long-line: New file/test, for the above fix.
-
-2002-09-21 Jim Meyering <jim@meyering.net>
-
- * src/od.c: No longer include deprecated <values.h>.
- It was required solely for now-removed reference to BITSPERBYTE.
- * src/install.c: Likewise.
- Suggestion from Bruno Haible.
-
-2002-09-06 Andreas Schwab <schwab@suse.de>
-
- `rmdir -p dir-specified-with-trailing-slash/' would fail.
- * src/rmdir.c (remove_parents): Strip trailing slashes.
-
-2002-09-20 Jim Meyering <jim@meyering.net>
-
- * tests/rmdir/t-slash: New file/test, for the above fix.
- * tests/rmdir/Makefile.am (TESTS): Add t-slash.
-
- * Makefile.maint (announcement): Arrange to gpg-sign the message.
- Add a URL for each detached signature file.
-
-2002-09-07 Bruno Haible <bruno@clisp.org>
-
- * configure.ac: Add need-ngettext to AM_GNU_GETTEXT invocation.
-
-2002-09-18 Jim Meyering <jim@meyering.net>
-
- `od -t x8' used the wrong (`l'-prefixed) printf format.
- Likewise for the o8 and u8 formats.
- * src/od.c (ISPEC_TO_FORMAT): Define macro.
- (decode_one_format): Use PRIdMAX, PRIoMAX, etc. for LONG_LONG.
- Reported by Arun Sharma.
-
-2002-09-17 Jim Meyering <jim@meyering.net>
-
- * src/sys2.h (PRIdMAX, PRIoMAX, PRIuMAX, PRIxMAX): Define if necessary.
- From gettext's intl/loadmsgcat.c.
-
- * tests/od/x8: New file/test, for the above fix.
- * tests/od/Makefile.am (TESTS): Add x8.
-
-2002-09-15 Jim Meyering <jim@meyering.net>
-
- * Use autoconf-2.54. Regenerate dependent files.
-
- * src/csplit.c (get_format_width): Add cast to avoid
- warning about `signed and unsigned type in conditional expression'.
-
-2002-09-14 Jim Meyering <jim@meyering.net>
-
- * src/who.c (print_user): Change type of local to size_t
- to avoid warnings about `comparison between signed and unsigned'.
- * src/ptx.c (generate_all_output): Likewise.
-
- * src/dd.c (main, skip): Add casts to avoid warnings about
- `comparison between signed and unsigned'.
-
- * src/id.c (print_full_info, print_group_list): Add casts to avoid
- warnings about `signed and unsigned type in conditional expression'.
-
- * src/md5sum.c: Change type of global, digest_hex_bytes, to size_t
- to avoid warnings about `comparison between signed and unsigned'.
- (split_3): Change parameter names to be readable and add comment.
- Clean up the test for whether a line may be ignored.
-
-2002-09-13 Jim Meyering <jim@meyering.net>
-
- * src/printf.c (main): Handle leading command line argument of `--'.
- Reported by Raul: DervishD <raul@pleyades.net>
- * tests/misc/printf: New file: test for the above.
- * tests/misc/Makefile.am (TESTS): Add printf.
-
- * src/date.c (usage): Explain that %S's range of [0..60] is required --
- rather than 0..59 -- to accommodate the occasional positive leap second.
- Reported by Richard Neill.
-
-2002-09-12 Jim Meyering <jim@meyering.net>
-
- * src/Makefile.am (nanosec_libs): Define.
- (sleep_LDADD, tail_LDADD): Use it here.
-
- Factor nanosleep-related code into ../lib/xnanosleep.c.
- * src/sleep.c: Include xnanosleep.h.
- Factor out fenv.h-related code.
- (timespec_subtract): Remove function.
- (main): Remove code that deals with computing start and stop times
- as well as the loop around nanosleep. Now that's in xnanosleep.c.
-
- Allow S (in --sleep-interval=S) to be a floating point value.
- * src/tail.c: Include xnanosleep.h and xstrtod.h.
- Move declaration of global variable, sleep_interval, to ...
- (main): ...here.
- (usage): Update description of --sleep-interval option.
- (tail_forever): New parameter, sleep_interval. Update caller.
- Use xnanosleep, rather than sleep.
- (parse_options): New parameter, sleep_interval. Update caller.
- Use xstrtod, now that we accept floating point values.
- Prompted by a patch from Augey Mikus.
-
-2002-09-06 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (prompt): Change comment to give a better note to
- translators. From Michael Piefel.
-
-2002-09-02 Jim Meyering <jim@meyering.net>
-
- * README: A good problem report/patch includes diffs against
- the most recent test release.
-
- * src/pathchk.c (NEED_PATHCONF_WRAPPER): Define.
- (pathconf_wrapper): Define only if NEED_PATHCONF_WRAPPER is set.
-
- * src/kill.c (print_table_row): Use an unsigned type for widths
- to avoid warning about comparison between signed and unsigned.
- (list_signals): Likewise.
-
- * src/od.c (skip): Add a cast to avoid warning about comparison
- between signed and unsigned.
- * src/install.c (get_ids): Likewise. Also rearrange range-checking
- comparisons to make them more readable.
-
-2002-09-01 Jim Meyering <jim@meyering.net>
-
- * Version 4.5.1.
-
-2002-08-31 Jim Meyering <jim@meyering.net>
-
- Symlinks were always reported as using 0 blocks.
- * src/system.h (ST_NBLOCKS): Don't depend on file type.
- This reverts the change of 2000-01-30.
- Based on a report and patch from Neil Brown via Michael Stone.
- This fixes Debian Bug#156358.
-
- * Most files: Change `exit (0)' to `exit (EXIT_SUCCESS)',
- `exit (1)' to `exit (EXIT_FAILURE)', and
- `usage (1)' to `usage (EXIT_FAILURE)'.
-
- * chgrp.c, chmod.c, chown.c, chroot.c, cp.c, date.c, dd.c, du.c,
- * hostname.c, id.c, install.c, ln.c, mkdir.c, mkfifo.c, mknod.c,
- * nice.c, pinky.c, printf.c, pwd.c, shred.c, sleep.c, stty.c,
- * su.c, tac-pipe.c, tail.c, tee.c, touch.c, uname.c, uptime.c,
- * users.c, who.c: Change `error (1, ...' to `error (EXIT_FAILURE, ...'.
- But don't change `error (0, ...' to `error (EXIT_SUCCESS, ...', since
- error never exits successfully.
-
-2002-08-29 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (remove_cwd_entries): Use closedir (not CLOSEDIR)
- when ignoring any return value.
-
- * src/remove.c (remove_cwd_entries): Detect and diagnose readdir
- failures. On some systems (at least EMC Celerra and Solaris5.8),
- this appears to be necessary.
- (is_empty_dir): Likewise. Also, always close directory handle.
- * src/ls.c (print_dir): Likewise.
- (print_dir): Rename local variable: reading -> dirp.
- Reported by Mike Coleman.
-
-2002-08-28 Jim Meyering <jim@meyering.net>
-
- * src/remove.c (remove_cwd_entries): Use CLOSEDIR, not closedir.
- Give a diagnostic and fail if closedir fails.
-
-2002-08-26 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (THANKS-to-translators): New rule.
- (EXTRA_DIST): Add both THANKS-to-translators and THANKStt.in.
- * THANKStt.in: New file.
-
- * src/cat.c (close_stdout_wrapper): New, kludgey, function and
- file-scoped global.
- (main): Register it with atexit.
- Close STDOUT_FILENO, to avoid a problem when writing to
- /dev/audio on at least Solaris 5.7 and 5.8 systems.
- Reported by Shing-Shong Shei.
-
-2002-08-25 Jim Meyering <jim@meyering.net>
-
- * src/cat.c (main): Close STDIN_FILENO rather than a literal `0'.
- * src/tac.c (main): Likewise.
- * src/tail.c (main): Likewise.
- * src/tee.c (main): Likewise.
- * src/tr.c (main): Likewise.
- * src/wc.c (main): Likewise.
-
-2002-08-20 Jim Meyering <jim@meyering.net>
-
- * tests/mv/setup: Rewrite not to use `: ${VAR=not_set}' paradigm.
-
-2002-08-10 Paul Eggert <eggert@twinsun.com>
-
- * src/nohup.sh: Don't use "exec --"; it's not portable and
- shouldn't be needed.
-
-2002-08-09 Jim Meyering <jim@meyering.net>
-
- * src/pr.c (main): Don't ignore -COLUMN if it's the last option.
- (usage): Clarify help text for the -COLUMN option.
- Patch by Padraig Brady.
- * tests/pr/Test.pm [col-last]: New test for the above.
-
- * configure.ac: Start with version 4.5.1, chosen so that it's larger
- than the latest version numbers of the component packages.
-
- * man/Makefile.am (check-x-vs-1): Set and export PATH so we use
- programs in ../src.
-
-2002-08-08 Jim Meyering <jim@meyering.net>
-
- * src/date.c: Guard inclusion of <langinfo.h> with
- `#if HAVE_LANGINFO_CODESET', not `#if HAVE_LANGINFO_H'.
- * src/sort.c: Likewise.
- Patch by GOTO Masanori.
-
-2002-08-05 Paul Eggert <eggert@twinsun.com>
-
- Fix some minor time-related bugs with POSIX time arguments.
- Some valid time stamps were being rejected (notably -1, and
- time stamps before 1900 on 64-bit hosts). And some invalid
- time stamps were being accepted, e.g. September 31.
-
- * src/date.c (main): Adjust to posixtime signature change.
- * src/touch.c (main): Likewise. Remove unnecessary initialization.
- Use localtime, not posixtm, to warn about obsolete "touch".
-
-2002-08-05 Jim Meyering <jim@meyering.net>
-
- * tests/misc/Makefile.am (TESTS): Add nice and pathchk1.
-
-2002-08-04 Jim Meyering <jim@meyering.net>
-
- * src/Makefile.am (check-README): New target/rule.
- (check): Depend on it.
-
- * configure.ac (AC_CONFIG_FILES): Add old/Makefile and old/*/Makefile.
-
-2002-08-03 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (SUBDIRS): Add old.
- * old/: New directory, containing legacy ChangeLog* and NEWS files
- from the fileutils, sh-utils, and textutils packages.
-
- * src/Makefile.am (AM_INSTALLCHECK_STD_OPTIONS_EXEMPT): Set to false.
-
-2002-08-02 Paul Eggert <eggert@twinsun.com>
-
- * NEWS, doc/coreutils.texi: uniq now obeys LC_COLLATE.
-
- * src/uniq.c: Include hard-locale.h, xmemcoll.h.
- (hard_LC_COLLATE): New var.
- (different): Args are now char *, not const char *.
- Use xmemcoll instead of memcmp to compare lines, so that
- LC_COLLATE has effect. However, use memcmp if it is an
- easy locale.
- (check_file): Do not include newline in comparison, so that
- xmemcoll has a byte to stomp on temporarily.
- (main): Set hard_LC_COLLATE.
-
-2002-07-29 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (SUBDIRS): Remove djgpp, for now.
-
-2002-07-20 Jim Meyering <jim@meyering.net>
-
- * Makefile.am (false.c): Convert only the final EXIT_SUCCESS
- into EXIT_FAILURE. Otherwise, false --help and false --version
- would fail.
-
-2002-07-08 Jim Meyering <jim@meyering.net>
-
- * src/Makefile.am (uninstall-local): Search for @GNU_PACKAGE@,
- rather than the hard-coded `sh-utils'.
-
-2002-07-01 Jim Meyering <jim@meyering.net>
-
- * configure.ac: Merge the three files from fileutils,
- textutils, and sh-utils.
- * Makefile.am: Likewise.
- * src/Makefile.am: Likewise.
diff --git a/contrib/gnu-sort/FREEBSD-upgrade b/contrib/gnu-sort/FREEBSD-upgrade
deleted file mode 100644
index 5cb5371..0000000
--- a/contrib/gnu-sort/FREEBSD-upgrade
+++ /dev/null
@@ -1,14 +0,0 @@
-$FreeBSD$
-
-GNU Sort
- originals can be found at: ftp://ftp.gnu.org/gnu/coreutils/
-
-Configure by:
- ./configure --disable-nls --without-libiconv-prefix \
- --without-libintl-prefix
-
-Imported by:
-
- cvs import \
- -m "Virgin import (trimmed) of GNU Sort, coreutils 5.2.1" \
- src/contrib/gnu-sort FSF SORT_v5_2_1
diff --git a/contrib/gnu-sort/INSTALL b/contrib/gnu-sort/INSTALL
deleted file mode 100644
index 54caf7c..0000000
--- a/contrib/gnu-sort/INSTALL
+++ /dev/null
@@ -1,229 +0,0 @@
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
-Foundation, Inc.
-
- This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
- These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
- It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
- The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
- Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. Run `./configure --help'
-for details on some of the pertinent environment variables.
-
- You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment. Here
-is an example:
-
- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
- *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
- You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory. After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
- There may be some features `configure' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on. Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
- CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
- OS KERNEL-OS
-
- See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
- If you are _building_ compiler tools for cross-compiling, you should
-use the `--target=TYPE' option to select the type of system they will
-produce code for.
-
- If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
- Variables not defined in a site shell script can be set in the
-environment passed to `configure'. However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost. In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'. For example:
-
- ./configure CC=/usr/local2/bin/gcc
-
-will cause the specified gcc to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-`configure' Invocation
-======================
-
- `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
- Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`--cache-file=FILE'
- Enable the cache: use and save the results of the tests in FILE,
- traditionally `config.cache'. FILE defaults to `/dev/null' to
- disable caching.
-
-`--config-cache'
-`-C'
- Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
-
diff --git a/contrib/gnu-sort/NEWS b/contrib/gnu-sort/NEWS
deleted file mode 100644
index 31f459b..0000000
--- a/contrib/gnu-sort/NEWS
+++ /dev/null
@@ -1,904 +0,0 @@
-GNU coreutils NEWS -*- outline -*-
-
-* Major changes in release 5.3.0 (2004-03-17) [unstable]
-
-** Bug fixes
-
- rm (without -f) no longer hangs when attempting to remove a symlink
- to a file on an off-line NFS-mounted partition.
-
- cut's --output-delimiter=D option works with abutting byte ranges.
-
- rm no longer gets a failed assertion under some unusual conditions.
-
- Several fixes to chgrp and chown for compatibility with POSIX and BSD:
-
- Do not affect symbolic links by default.
- Now, operate on whatever a symbolic points to, instead.
- To get the old behavior, use --no-dereference (-h).
-
- --dereference now works, even when the specified owner
- and/or group match those of an affected symlink.
-
- Check for incompatible options. When -R and --dereference are
- both used, then either -H or -L must also be used. When -R and -h
- are both used, then -P must be in effect.
-
- -H, -L, and -P have no effect unless -R is also specified.
- If -P and -R are both specified, -h is assumed.
-
- Do not optimize away the chown() system call when the file's owner
- and group already have the desired value. This optimization was
- incorrect, as it failed to update the last-changed time and reset
- special permission bits, as POSIX requires.
-
- Do not report an error if the owner or group of a
- recursively-encountered symbolic link cannot be updated because
- the file system does not support it.
-
- md5sum and sha1sum now report an error when given so many input
- lines that their line counter overflows, instead of silently
- reporting incorrect results.
-
- rm no longer requires read access to the current directory.
-
- "sort -o -" now writes to a file named "-" instead of to standard
- output; POSIX requires this.
-
- tail -f no longer mishandles pipes and fifos. With no operands,
- tail now ignores -f if standard input is a pipe, as POSIX requires.
-
- For some types of errors (e.g., read-only file system, I/O error)
- when first encountering a directory, `rm -r' would mistakenly fail
- to remove files under that directory.
-
- If d/x is a directory and x a file, "ln x d/" now reports an error
- instead of incorrectly creating a link to d/x/x.
-
- Fixes for "nice":
-
- If it fails to lower the nice value due to lack of permissions,
- it goes ahead and runs the command anyway, as POSIX requires.
-
- It no longer incorrectly reports an error if the current nice
- value happens to be -1.
-
- It no longer assumes that nice values range from -20 through 19.
-
- It now consistently adjusts out-of-range nice values to the
- closest values in range; formerly it sometimes reported an error.
-
- ptx now diagnoses invalid values for its --width=N (-w)
- and --gap-size=N (-g) options.
-
- tee now exits when it gets a SIGPIPE signal, as POSIX requires.
- To get tee's old behavior, use the shell command "(trap '' PIPE; tee)".
- Also, "tee -" now writes to standard output instead of to a file named "-".
-
- ls no longer segfaults on systems for which SIZE_MAX != (size_t) -1
-
- echo now conforms to POSIX better. It supports the \0ooo syntax for
- octal escapes, and \c now terminates printing immediately. If
- POSIXLY_CORRECT is set and the first argument is not "-n", echo now
- outputs all option-like arguments instead of treating them as options.
-
- printf has several changes:
-
- It now uses 'intmax_t' (not 'long int') to format integers, so it
- can now format 64-bit integers on most modern hosts.
-
- On modern hosts it now supports the C99-inspired %a, %A, %F conversion
- specs, the "'" and "0" flags, and the ll, j, t, and z length modifiers
- (this is compatible with recent Bash versions).
-
- The printf command now rejects invalid conversion specifications
- like %#d, instead of relying on undefined behavior in the underlying
- printf function.
-
- who now prints user names in full instead of truncating them after 8 bytes.
-
-** New features
-
- For efficiency, `sort -m' no longer copies input to a temporary file
- merely because the input happens to come from a pipe. As a result,
- some relatively-contrived examples like `cat F | sort -m -o F - G'
- are no longer safe, as `sort' might start writing F before `cat' is
- done reading it. This problem cannot occur unless `-m' is used.
-
- When outside the default POSIX locale, the 'who' and 'pinky'
- commands now output time stamps like "2004-06-21 13:09" instead of
- the traditional "Jun 21 13:09".
-
- pwd now works even when run from a working directory whose name
- is longer than PATH_MAX.
-
- cp, install, ln, and mv have a new --no-target-directory (-T) option,
- and -t is now a short name for their --target-directory option.
-
- cp -pu and mv -u (when copying) now don't bother to update the
- destination if the resulting time stamp would be no newer than the
- preexisting time stamp. This saves work in the common case when
- copying or moving multiple times to the same destination in a file
- system with a coarse time stamp resolution.
-
- dd has new conversions for the conv= option:
-
- nocreat do not create the output file
- excl fail if the output file already exists
- fdatasync physically write output file data before finishing
- fsync likewise, but also write metadata
-
- dd has new iflag= and oflag= options with the following flags:
-
- append append mode (makes sense for output file only)
- direct use direct I/O for data
- dsync use synchronized I/O for data
- sync likewise, but also for metadata
- nonblock use non-blocking I/O
- nofollow do not follow symlinks
-
- stty now provides support (iutf8) for setting UTF-8 input mode.
-
- With stat, a specified format is no longer automatically newline terminated.
- If you want a newline at the end of your output, append `\n' to the format
- string.
-
- 'df', 'du', and 'ls' now take the default block size from the
- BLOCKSIZE environment variable if the BLOCK_SIZE, DF_BLOCK_SIZE,
- DU_BLOCK_SIZE, and LS_BLOCK_SIZE environment variables are not set.
- Unlike the other variables, though, BLOCKSIZE does not affect
- values like 'ls -l' sizes that are normally displayed as bytes.
- This new behavior is for compatibility with BSD.
-
- du accepts a new option --files0-from=FILE, where FILE contains a
- list of NUL-terminated file names.
-
- `date -d' and `touch -d' now accept integer counts of seconds since
- 1970 when prefixed by `@'. For example, `@321' represents
- 1970-01-01 00:05:21 UTC.
-
- `date -d', `date -f' and `touch -d' now handle fractional time
- stamps like 2004-02-27 14:19:13.489392193.
-
- `date' has a new option --iso-8601=ns that outputs
- nanosecond-resolution time stamps.
-
- echo -e '\xHH' now outputs a byte whose hexadecimal value is HH,
- for compatibility with bash.
-
- In the following cases POSIX allows the default GNU behavior,
- so when POSIXLY_CORRECT is set:
-
- false, printf, true, unlink, and yes all support --help and --option.
- ls supports TABSIZE.
- pr no longer depends on LC_TIME for the date format in non-POSIX locales.
- printf supports \u, \U, \x.
- tail supports two or more files when using the obsolete option syntax.
-
- The usual `--' operand is now supported by chroot, hostid, hostname,
- pwd, sync, and yes.
-
- The stat option --filesystem has been renamed to --file-system, for
- consistency with POSIX "file system" and with cp and du --one-file-system.
-
-** Removed features
-
- tail's undocumented --max-consecutive-size-changes option has been removed.
-
-* Major changes in release 5.2.1 (2004-03-12) [stable]
-
-** Bug fixes
-
- mv could mistakenly fail to preserve hard links when moving two
- or more arguments between partitions.
-
- `cp --sparse=always F /dev/hdx' no longer tries to use lseek to create
- holes in the destination.
-
- nohup now sets the close-on-exec flag for its copy of the stderr file
- descriptor. This avoids some nohup-induced hangs. For example, before
- this change, if you ran `ssh localhost', then `nohup sleep 600 </dev/null &',
- and then exited that remote shell, the ssh session would hang until the
- 10-minute sleep terminated. With the fixed nohup, the ssh session
- terminates immediately.
-
- `expr' now conforms to POSIX better:
-
- Integers like -0 and 00 are now treated as zero.
-
- The `|' operator now returns 0, not its first argument, if both
- arguments are null or zero. E.g., `expr "" \| ""' now returns 0,
- not the empty string.
-
- The `|' and `&' operators now use short-circuit evaluation, e.g.,
- `expr 1 \| 1 / 0' no longer reports a division by zero.
-
-** New features
-
- `chown user.group file' now has its traditional meaning even when
- conforming to POSIX 1003.1-2001, so long as no user has a name
- containing `.' that happens to equal `user.group'.
-
-
-* Major changes in release 5.2.0 (2004-02-19) [stable]
-
-** Bug fixes
-
- none
-
-
-* Major changes in release 5.1.3 (2004-02-08): candidate to become stable 5.2.0
-
-** Bug fixes
-
- `cp -d' now works as required even on systems like OSF V5.1 that
- declare stat and lstat as `static inline' functions.
-
- time stamps output by stat now include actual fractional seconds,
- when available -- or .0000000 for files without that information.
-
- seq no longer infloops when printing 2^31 or more numbers.
- For reference, seq `echo 2^31|bc` > /dev/null takes about one hour
- on a 1.6 GHz Athlon 2000 XP. Now it can output 2^53-1 numbers before
- misbehaving.
-
-* Major changes in release 5.1.2 (2004-01-25):
-
-** Bug fixes
-
- rmdir -p exits with status 1 on error; formerly it sometimes exited
- with status 0 when given more than one argument.
-
- nohup now always exits with status 127 when it finds an error,
- as POSIX requires; formerly it sometimes exited with status 1.
-
- Several programs (including cut, date, dd, env, hostname, nl, pr,
- stty, and tr) now always exit with status 1 when they find an error;
- formerly they sometimes exited with status 2.
-
- factor no longer reports a usage error if stdin has the wrong format.
-
- paste no longer infloops on ppc systems (bug introduced in 5.1.1)
-
-
-* Major changes in release 5.1.1 (2004-01-17):
-
-** Configuration option
-
- You can select the default level of POSIX conformance at configure-time,
- e.g., by ./configure DEFAULT_POSIX2_VERSION=199209
-
-** Bug fixes
-
- fold -s works once again on systems with differing sizes for int
- and size_t (bug introduced in 5.1.0)
-
-** New features
-
- touch -r now specifies the origin for any relative times in the -d
- operand, if both options are given. For example, "touch -r FOO -d
- '-5 seconds' BAR" sets BAR's modification time to be five seconds
- before FOO's.
-
- join: The obsolete options "-j1 FIELD", "-j2 FIELD", and
- "-o LIST1 LIST2..." are no longer supported on POSIX 1003.1-2001 systems.
- Portable scripts should use "-1 FIELD", "-2 FIELD", and
- "-o LIST1,LIST2..." respectively. If join was compiled on a
- POSIX 1003.1-2001 system, you may enable the old behavior
- by setting _POSIX2_VERSION=199209 in your environment.
-
-
-* Major changes in release 5.1.0 (2003-12-21):
-
-** New features
-
- chgrp, chmod, and chown can now process (with -R) hierarchies of virtually
- unlimited depth. Before, they would fail to operate on any file they
- encountered with a relative name of length PATH_MAX (often 4096) or longer.
-
- chgrp, chmod, chown, and rm accept the new options:
- --preserve-root, --no-preserve-root (default)
-
- chgrp and chown now accept POSIX-mandated -L, -H, and -P options
-
- du can now process hierarchies of virtually unlimited depth.
- Before, du was limited by the user's stack size and it would get a
- stack overflow error (often a segmentation fault) when applied to
- a hierarchy of depth around 30,000 or larger.
-
- du works even when run from an inaccessible directory
-
- du -D now dereferences all symlinks specified on the command line,
- not just the ones that reference directories
-
- du now accepts -P (--no-dereference), for compatibility with du
- of NetBSD and for consistency with e.g., chown and chgrp
-
- du's -H option will soon have the meaning required by POSIX
- (--dereference-args, aka -D) rather then the current meaning of --si.
- Now, using -H elicits a warning to that effect.
-
- When given -l and similar options, ls now adjusts the output column
- widths to fit the data, so that output lines are shorter and have
- columns that line up better. This may adversely affect shell
- scripts that expect fixed-width columns, but such shell scripts were
- not portable anyway, even with old GNU ls where the columns became
- ragged when a datum was too wide.
-
- du accepts a new option, -0/--null, to make it produce NUL-terminated
- output lines
-
-** Bug fixes
-
- printf, seq, tail, and sleep now parse floating-point operands
- and options in the C locale. POSIX requires this for printf.
-
- od -c -w9999999 no longer segfaults
-
- csplit no longer reads from freed memory (dumping core on some systems)
-
- csplit would mistakenly exhaust virtual memory in some cases
-
- ls --width=N (for very large N) is no longer subject to an address
- arithmetic bug that could result in bounds violations.
-
- ls --width=N (with -x or -C) no longer allocates more space
- (potentially much more) than necessary for a given directory.
-
- dd `unblock' and `sync' may now be combined (e.g., dd conv=unblock,sync)
-
-* Major changes in release 5.0.91 (2003-09-08):
-
-** New features
-
- date accepts a new option --rfc-2822, an alias for --rfc-822.
-
- split accepts a new option -d or --numeric-suffixes.
-
- cp, install, mv, and touch now preserve microsecond resolution on
- file timestamps, on platforms that have the 'utimes' system call.
- Unfortunately there is no system call yet to preserve file
- timestamps to their full nanosecond resolution; microsecond
- resolution is the best we can do right now.
-
- sort now supports the zero byte (NUL) as a field separator; use -t '\0'.
- The -t '' option, which formerly had no effect, is now an error.
-
- sort option order no longer matters for the options -S, -d, -i, -o, and -t.
- Stronger options override weaker, and incompatible options are diagnosed.
-
- `sha1sum --check' now accepts the BSD format for SHA1 message digests
- in addition to the BSD format for MD5 ones.
-
- who -l now means `who --login', not `who --lookup', per POSIX.
- who's -l option has been eliciting an unconditional warning about
- this impending change since sh-utils-2.0.12 (April 2002).
-
-** Bug fixes
-
- Mistakenly renaming a file onto itself, e.g., via `mv B b' when `B' is
- the same directory entry as `b' no longer destroys the directory entry
- referenced by both `b' and `B'. Note that this would happen only on
- file systems like VFAT where two different names may refer to the same
- directory entry, usually due to lower->upper case mapping of file names.
- Now, the above can happen only on file systems that perform name mapping and
- that support hard links (stat.st_nlink > 1). This mitigates the problem
- in two ways: few file systems appear to be affected (hpfs and ntfs are),
- when the bug is triggered, mv no longer removes the last hard link to a file.
- *** ATTENTION ***: if you know how to distinguish the following two cases
- without writing to the file system in question, please let me know:
- 1) B and b refer to the same directory entry on a file system like NTFS
- (B may well have a link count larger than 1)
- 2) B and b are hard links to the same file
-
- stat no longer overruns a buffer for format strings ending in `%'
-
- fold -s -wN would infloop for N < 8 with TABs in the input.
- E.g., this would not terminate: printf 'a\t' | fold -w2 -s
-
- `split -a0', although of questionable utility, is accepted once again.
-
- `df DIR' used to hang under some conditions on OSF/1 5.1. Now it doesn't.
-
- seq's --width (-w) option now works properly even when the endpoint
- requiring the larger width is negative and smaller than the other endpoint.
-
- seq's default step is 1, even if LAST < FIRST.
-
- paste no longer mistakenly outputs 0xFF bytes for a nonempty input file
- without a trailing newline.
-
- `tail -n0 -f FILE' and `tail -c0 -f FILE' no longer perform what amounted
- to a busy wait, rather than sleeping between iterations.
-
- tail's long-undocumented --allow-missing option now elicits a warning
-
-
-* Major changes in release 5.0.90 (2003-07-29):
-
-** New features
-
- sort is now up to 30% more CPU-efficient in some cases
-
- `test' is now more compatible with Bash and POSIX:
-
- `test -t', `test --help', and `test --version' now silently exit
- with status 0. To test whether standard output is a terminal, use
- `test -t 1'. To get help and version info for `test', use
- `[ --help' and `[ --version'.
-
- `test' now exits with status 2 (not 1) if there is an error.
-
- wc count field widths now are heuristically adjusted depending on the input
- size, if known. If only one count is printed, it is guaranteed to
- be printed without leading spaces.
-
- Previously, wc did not align the count fields if POSIXLY_CORRECT was set,
- but POSIX did not actually require this undesirable behavior, so it
- has been removed.
-
-** Bug fixes
-
- kill no longer tries to operate on argv[0] (introduced in 5.0.1)
- Why wasn't this noticed? Although many tests use kill, none of
- them made an effort to avoid using the shell's built-in kill.
-
- `[' invoked with no arguments no longer evokes a segfault
-
- rm without --recursive (aka -r or -R) no longer prompts regarding
- unwritable directories, as required by POSIX.
-
- uniq -c now uses a SPACE, not a TAB between the count and the
- corresponding line, as required by POSIX.
-
- expr now exits with status 2 if the expression is syntactically valid,
- and with status 3 if an error occurred. POSIX requires this.
-
- expr now reports trouble if string comparison fails due to a collation error.
-
- split now generates suffixes properly on EBCDIC hosts.
-
- split -a0 now works, as POSIX requires.
-
- `sort --version' and `sort --help' fail, as they should
- when their output is redirected to /dev/full.
-
- `su --version > /dev/full' now fails, as it should.
-
-** Fewer arbitrary limitations
-
- cut requires 97% less memory when very large field numbers or
- byte offsets are specified.
-
-
-* Major changes in release 5.0.1 (2003-07-15):
-
-** New programs
-- new program: `[' (much like `test')
-
-** New features
-- head now accepts --lines=-N (--bytes=-N) to print all but the
- N lines (bytes) at the end of the file
-- md5sum --check now accepts the output of the BSD md5sum program, e.g.,
- MD5 (f) = d41d8cd98f00b204e9800998ecf8427e
-- date -d DATE can now parse a DATE string like May-23-2003
-- chown: `.' is no longer recognized as a separator in the OWNER:GROUP
- specifier on POSIX 1003.1-2001 systems. If chown *was not* compiled
- on such a system, then it still accepts `.', by default. If chown
- was compiled on a POSIX 1003.1-2001 system, then you may enable the
- old behavior by setting _POSIX2_VERSION=199209 in your environment.
-- chown no longer tries to preserve set-user-ID and set-group-ID bits;
- on some systems, the chown syscall resets those bits, and previous
- versions of the chown command would call chmod to restore the original,
- pre-chown(2) settings, but that behavior is problematic.
- 1) There was a window whereby a malicious user, M, could subvert a
- chown command run by some other user and operating on files in a
- directory where M has write access.
- 2) Before (and even now, on systems with chown(2) that doesn't reset
- those bits), an unwary admin. could use chown unwittingly to create e.g.,
- a set-user-ID root copy of /bin/sh.
-
-** Bug fixes
-- chown --dereference no longer leaks a file descriptor per symlink processed
-- `du /' once again prints the `/' on the last line
-- split's --verbose option works once again [broken in 4.5.10 and 5.0]
-- tail -f is no longer subject to a race condition that could make it
- delay displaying the last part of a file that had stopped growing. That
- bug could also make tail -f give an unwarranted `file truncated' warning.
-- du no longer runs out of file descriptors unnecessarily
-- df and `readlink --canonicalize' no longer corrupt the heap on
- non-glibc, non-solaris systems
-- `env -u UNSET_VARIABLE' no longer dumps core on non-glibc systems
-- readlink's --canonicalize option now works on systems like Solaris that
- lack the canonicalize_file_name function but do have resolvepath.
-- mv now removes `a' in this example on all systems: touch a; ln a b; mv a b
- This behavior is contrary to POSIX (which requires that the mv command do
- nothing and exit successfully), but I suspect POSIX will change.
-- date's %r format directive now honors locale settings
-- date's `-' (no-pad) format flag now affects the space-padded-by-default
- conversion specifiers, %e, %k, %l
-- fmt now diagnoses invalid obsolescent width specifications like `-72x'
-- fmt now exits nonzero when unable to open an input file
-- tsort now fails when given an odd number of input tokens,
- as required by POSIX. Before, it would act as if the final token
- appeared one additional time.
-
-** Fewer arbitrary limitations
-- tail's byte and line counts are no longer limited to OFF_T_MAX.
- Now the limit is UINTMAX_MAX (usually 2^64).
-- split can now handle --bytes=N and --lines=N with N=2^31 or more.
-
-** Portability
-- `kill -t' now prints signal descriptions (rather than `?') on systems
- like Tru64 with __sys_siglist but no strsignal function.
-- stat.c now compiles on Ultrix systems
-- sleep now works on AIX systems that lack support for clock_gettime
-- rm now works around Darwin6.5's broken readdir function
- Before `rm -rf DIR' would fail to remove all files in DIR
- if there were more than 338.
-
-* Major changes in release 5.0 (2003-04-02):
-- false --help now exits nonzero
-
-[4.5.12]
-* printf no longer treats \x specially when POSIXLY_CORRECT is set
-* printf avoids buffer overrun with format ending in a backslash and
-* printf avoids buffer overrun with incomplete conversion specifier
-* printf accepts multiple flags in a single conversion specifier
-
-[4.5.11]
-* seq no longer requires that a field width be specified
-* seq no longer fails when given a field width of `0'
-* seq now accepts ` ' and `'' as valid format flag characters
-* df now shows a HOSTNAME: prefix for each remote-mounted file system on AIX 5.1
-* portability tweaks for HP-UX, AIX 5.1, DJGPP
-
-[4.5.10]
-* printf no longer segfaults for a negative field width or precision
-* shred now always enables --exact for non-regular files
-* du no longer lists hard-linked files more than once
-* du no longer dumps core on some systems due to `infinite' recursion
- via nftw's use of the buggy replacement function in getcwd.c
-* portability patches for a few vendor compilers and 64-bit systems
-* du -S *really* now works like it did before the change in 4.5.5
-
-[4.5.9]
-* du no longer truncates file sizes or sums to fit in 32-bit size_t
-* work around Linux kernel bug in getcwd (fixed in 2.4.21-pre4), so that pwd
- now fails if the name of the working directory is so long that getcwd
- truncates it. Before it would print the truncated name and exit successfully.
-* `df /some/mount-point' no longer hangs on a GNU libc system when another
- hard-mounted NFS file system (preceding /some/mount-point in /proc/mounts)
- is inaccessible.
-* rm -rf now gives an accurate diagnostic when failing to remove a file
- under certain unusual conditions
-* mv and `cp --preserve=links' now preserve multiple hard links even under
- certain unusual conditions where they used to fail
-
-[4.5.8]
-* du -S once again works like it did before the change in 4.5.5
-* stat accepts a new file format, %B, for the size of each block reported by %b
-* du accepts new option: --apparent-size
-* du --bytes (-b) works the same way it did in fileutils-3.16 and before
-* du reports proper sizes for directories (not zero) (broken in 4.5.6 or 4.5.7)
-* df now always displays under `Filesystem', the device file name
- corresponding to the listed mount point. Before, for a block- or character-
- special file command line argument, df would display that argument. E.g.,
- `df /dev/hda' would list `/dev/hda' as the `Filesystem', rather than say
- /dev/hda3 (the device on which `/' is mounted), as it does now.
-* test now works properly when invoked from a set user ID or set group ID
- context and when testing access to files subject to alternate protection
- mechanisms. For example, without this change, a set-UID program that invoked
- `test -w F' (to see if F is writable) could mistakenly report that it *was*
- writable, even though F was on a read-only file system, or F had an ACL
- prohibiting write access, or F was marked as immutable.
-
-[4.5.7]
-* du would fail with more than one DIR argument when any but the last did not
- contain a slash (due to a bug in ftw.c)
-
-[4.5.6]
-* du no longer segfaults on Solaris systems (fixed heap-corrupting bug in ftw.c)
-* du --exclude=FILE works once again (this was broken by the rewrite for 4.5.5)
-* du no longer gets a failed assertion for certain hierarchy lay-outs
- involving hard-linked directories
-* `who -r' no longer segfaults when using non-C-locale messages
-* df now displays a mount point (usually `/') for non-mounted
- character-special and block files
-
-[4.5.5]
-* ls --dired produces correct byte offset for file names containing
- nonprintable characters in a multibyte locale
-* du has been rewritten to use a variant of GNU libc's ftw.c
-* du now counts the space associated with a directory's directory entry,
- even if it cannot list or chdir into that subdirectory.
-* du -S now includes the st_size of each entry corresponding to a subdirectory
-* rm on FreeBSD can once again remove directories from NFS-mounted file systems
-* ls has a new option --dereference-command-line-symlink-to-dir, which
- corresponds to the new default behavior when none of -d, -l -F, -H, -L
- has been specified.
-* ls dangling-symlink now prints `dangling-symlink'.
- Before, it would fail with `no such file or directory'.
-* ls -s symlink-to-non-dir and ls -i symlink-to-non-dir now print
- attributes of `symlink', rather than attributes of their referents.
-* Fix a bug introduced in 4.5.4 that made it so that ls --color would no
- longer highlight the names of files with the execute bit set when not
- specified on the command line.
-* shred's --zero (-z) option no longer gobbles up any following argument.
- Before, `shred --zero file' would produce `shred: missing file argument',
- and worse, `shred --zero f1 f2 ...' would appear to work, but would leave
- the first file untouched.
-* readlink: new program
-* cut: new feature: when used to select ranges of byte offsets (as opposed
- to ranges of fields) and when --output-delimiter=STRING is specified,
- output STRING between ranges of selected bytes.
-* rm -r can no longer be tricked into mistakenly reporting a cycle.
-* when rm detects a directory cycle, it no longer aborts the entire command,
- but rather merely stops processing the affected command line argument.
-
-[4.5.4]
-* cp no longer fails to parse options like this: --preserve=mode,ownership
-* `ls --color -F symlink-to-dir' works properly
-* ls is much more efficient on directories with valid dirent.d_type.
-* stty supports all baud rates defined in linux-2.4.19.
-* `du symlink-to-dir/' would improperly remove the trailing slash
-* `du ""' would evoke a bounds violation.
-* In the unlikely event that running `du /' resulted in `stat ("/", ...)'
- failing, du would give a diagnostic about `' (empty string) rather than `/'.
-* printf: a hexadecimal escape sequence has at most two hex. digits, not three.
-* The following features have been added to the --block-size option
- and similar environment variables of df, du, and ls.
- - A leading "'" generates numbers with thousands separators.
- For example:
- $ ls -l --block-size="'1" file
- -rw-rw-r-- 1 eggert src 47,483,707 Sep 24 23:40 file
- - A size suffix without a leading integer generates a suffix in the output.
- For example:
- $ ls -l --block-size="K"
- -rw-rw-r-- 1 eggert src 46371K Sep 24 23:40 file
-* ls's --block-size option now affects file sizes in all cases, not
- just for --block-size=human-readable and --block-size=si. Fractional
- sizes are now always rounded up, for consistency with df and du.
-* df now displays the block size using powers of 1000 if the requested
- block size seems to be a multiple of a power of 1000.
-* nl no longer gets a segfault when run like this `yes|nl -s%n'
-
-[4.5.3]
-* du --dereference-args (-D) no longer fails in certain cases
-* `ln --target-dir=DIR' no longer fails when given a single argument
-
-[4.5.2]
-* `rm -i dir' (without --recursive (-r)) no longer recurses into dir
-* `tail -c N FILE' now works with files of size >= 4GB
-* `mkdir -p' can now create very deep (e.g. 40,000-component) directories
-* rmdir -p dir-with-trailing-slash/ no longer fails
-* printf now honors the `--' command line delimiter
-* od's 8-byte formats x8, o8, and u8 now work
-* tail now accepts fractional seconds for its --sleep-interval=S (-s) option
-
-[4.5.1]
-* du and ls now report sizes of symbolic links (before they'd always report 0)
-* uniq now obeys the LC_COLLATE locale, as per POSIX 1003.1-2001 TC1.
-
-========================================================================
-Here are the NEWS entries made from fileutils-4.1 until the
-point at which the packages merged to form the coreutils:
-
-[4.1.11]
-* `rm symlink-to-unwritable' doesn't prompt [introduced in 4.1.10]
-[4.1.10]
-* rm once again gives a reasonable diagnostic when failing to remove a file
- owned by someone else in a sticky directory [introduced in 4.1.9]
-* df now rounds all quantities up, as per POSIX.
-* New ls time style: long-iso, which generates YYYY-MM-DD HH:MM.
-* Any time style can be preceded by "posix-"; this causes "ls" to
- use traditional timestamp format when in the POSIX locale.
-* The default time style is now posix-long-iso instead of posix-iso.
- Set TIME_STYLE="posix-iso" to revert to the behavior of 4.1.1 thru 4.1.9.
-* `rm dangling-symlink' doesn't prompt [introduced in 4.1.9]
-* stat: remove support for --secure/-s option and related %S and %C format specs
-* stat: rename --link/-l to --dereference/-L.
- The old options will continue to work for a while.
-[4.1.9]
-* rm can now remove very deep hierarchies, in spite of any limit on stack size
-* new programs: link, unlink, and stat
-* New ls option: --author (for the Hurd).
-* `touch -c no-such-file' no longer fails, per POSIX
-[4.1.8]
-* mv no longer mistakenly creates links to preexisting destination files
- that aren't moved
-[4.1.7]
-* rm: close a hole that would allow a running rm process to be subverted
-[4.1.6]
-* New cp option: --copy-contents.
-* cp -r is now equivalent to cp -R. Use cp -R -L --copy-contents to get the
- traditional (and rarely desirable) cp -r behavior.
-* ls now accepts --time-style=+FORMAT, where +FORMAT works like date's format
-* The obsolete usage `touch [-acm] MMDDhhmm[YY] FILE...' is no longer
- supported on systems conforming to POSIX 1003.1-2001. Use touch -t instead.
-* cp and inter-partition mv no longer give a misleading diagnostic in some
- unusual cases
-[4.1.5]
-* cp -r no longer preserves symlinks
-* The block size notation is now compatible with SI and with IEC 60027-2.
- For example, --block-size=1MB now means --block-size=1000000,
- whereas --block-size=1MiB now means --block-size=1048576.
- A missing `B' (e.g. `1M') has the same meaning as before.
- A trailing `B' now means decimal, not binary; this is a silent change.
- The nonstandard `D' suffix (e.g. `1MD') is now obsolescent.
-* -H or --si now outputs the trailing 'B', for consistency with the above.
-* Programs now output trailing 'K' (not 'k') to mean 1024, as per IEC 60027-2.
-* New df, du short option -B is short for --block-size.
-* You can omit an integer `1' before a block size suffix,
- e.g. `df -BG' is equivalent to `df -B 1G' and to `df --block-size=1G'.
-* The following options are now obsolescent, as their names are
- incompatible with IEC 60027-2:
- df, du: -m or --megabytes (use -BM or --block-size=1M)
- df, du, ls: --kilobytes (use --block-size=1K)
-[4.1.4]
-* df --local no longer lists smbfs file systems whose name starts with //
-* dd now detects the Linux/tape/lseek bug at run time and warns about it.
-[4.1.3]
-* ls -R once again outputs a blank line between per-directory groups of files.
- This was broken by the cycle-detection change in 4.1.1.
-* dd once again uses `lseek' on character devices like /dev/mem and /dev/kmem.
- On systems with the linux kernel (at least up to 2.4.16), dd must still
- resort to emulating `skip=N' behavior using reads on tape devices, because
- lseek has no effect, yet appears to succeed. This may be a kernel bug.
-[4.1.2]
-* cp no longer fails when two or more source files are the same;
- now it just gives a warning and doesn't copy the file the second time.
- E.g., cp a a d/ produces this:
- cp: warning: source file `a' specified more than once
-* chmod would set the wrong bit when given symbolic mode strings like
- these: g=o, o=g, o=u. E.g., `chmod a=,o=w,ug=o f' would give a mode
- of --w-r---w- rather than --w--w--w-.
-[4.1.1]
-* mv (likewise for cp), now fails rather than silently clobbering one of
- the source files in the following example:
- rm -rf a b c; mkdir a b c; touch a/f b/f; mv a/f b/f c
-* ls -R detects directory cycles, per POSIX. It warns and doesn't infloop.
-* cp's -P option now means the same as --no-dereference, per POSIX.
- Use --parents to get the old meaning.
-* When copying with the -H and -L options, cp can preserve logical
- links between source files with --preserve=links
-* cp accepts new options:
- --preserve[={mode,ownership,timestamps,links,all}]
- --no-preserve={mode,ownership,timestamps,links,all}
-* cp's -p and --preserve options remain unchanged and are equivalent
- to `--preserve=mode,ownership,timestamps'
-* mv and cp accept a new option: --reply={yes,no,query}; provides a consistent
- mechanism to control whether one is prompted about certain existing
- destination files. Note that cp's and mv's -f options don't have the
- same meaning: cp's -f option no longer merely turns off `-i'.
-* remove portability limitations (e.g., PATH_MAX on the Hurd, fixes for
- 64-bit systems)
-* mv now prompts before overwriting an existing, unwritable destination file
- when stdin is a tty, unless --force (-f) is specified, as per POSIX.
-* mv: fix the bug whereby `mv -uf source dest' would delete source,
- even though it's older than dest.
-* chown's --from=CURRENT_OWNER:CURRENT_GROUP option now works
-* cp now ensures that the set-user-ID and set-group-ID bits are cleared for
- the destination file when when copying and not preserving permissions.
-* `ln -f --backup k k' gives a clearer diagnostic
-* ls no longer truncates user names or group names that are longer
- than 8 characters.
-* ls's new --dereference-command-line option causes it to dereference
- symbolic links on the command-line only. It is the default unless
- one of the -d, -F, or -l options are given.
-* ls -H now means the same as ls --dereference-command-line, as per POSIX.
-* ls -g now acts like ls -l, except it does not display owner, as per POSIX.
-* ls -n now implies -l, as per POSIX.
-* ls can now display dates and times in one of four time styles:
-
- - The `full-iso' time style gives full ISO-style time stamps like
- `2001-05-14 23:45:56.477817180 -0700'.
- - The 'iso' time style gives ISO-style time stamps like '2001-05-14 '
- and '05-14 23:45'.
- - The 'locale' time style gives locale-dependent time stamps like
- 'touko 14 2001' and 'touko 14 23:45' (in a Finnish locale).
- - The 'posix-iso' time style gives traditional POSIX-locale
- time stamps like 'May 14 2001' and 'May 14 23:45' unless the user
- specifies a non-POSIX locale, in which case it uses ISO-style dates.
- This is the default.
-
- You can specify a time style with an option like --time-style='iso'
- or with an environment variable like TIME_STYLE='iso'. GNU Emacs 21
- and later can parse ISO dates, but older Emacs versions cannot, so
- if you are using an older version of Emacs outside the default POSIX
- locale, you may need to set TIME_STYLE="locale".
-
-* --full-time is now an alias for "-l --time-style=full-iso".
-
-
-========================================================================
-Here are the NEWS entries made from sh-utils-2.0 until the
-point at which the packages merged to form the coreutils:
-
- [2.0.15]
-* date no longer accepts e.g., September 31 in the MMDDhhmm syntax
-* fix a bug in this package's .m4 files and in configure.ac
- [2.0.14]
-* nohup's behavior is changed as follows, to conform to POSIX 1003.1-2001:
- - nohup no longer adjusts scheduling priority; use "nice" for that.
- - nohup now redirects stderr to stdout, if stderr is not a terminal.
- - nohup exit status is now 126 if command was found but not invoked,
- 127 if nohup failed or if command was not found.
- [2.0.13]
-* uname and uptime work better on *BSD systems
-* pathchk now exits nonzero for a path with a directory component
- that specifies a non-directory
- [2.0.12]
-* kill: new program
-* who accepts new options: --all (-a), --boot (-b), --dead (-d), --login,
- --process (-p), --runlevel (-r), --short (-s), --time (-t), --users (-u).
- The -u option now produces POSIX-specified results and is the same as
- the long option `--users'. --idle is no longer the same as -u.
-* The following changes apply on systems conforming to POSIX 1003.1-2001,
- and are required by the new POSIX standard:
- - `date -I' is no longer supported. Instead, use `date --iso-8601'.
- - `nice -NUM' is no longer supported. Instead, use `nice -n NUM'.
-* New 'uname' options -i or --hardware-platform, and -o or --operating-system.
- 'uname -a' now outputs -i and -o information at the end.
- New uname option --kernel-version is an alias for -v.
- Uname option --release has been renamed to --kernel-release,
- and --sysname has been renamed to --kernel-name;
- the old options will work for a while, but are no longer documented.
-* 'expr' now uses the LC_COLLATE locale for string comparison, as per POSIX.
-* 'expr' now requires '+' rather than 'quote' to quote tokens;
- this removes an incompatibility with POSIX.
-* date -d 'last friday' would print a date/time that was one hour off
- (e.g., 23:00 on *thursday* rather than 00:00 of the preceding friday)
- when run such that the current time and the target date/time fall on
- opposite sides of a daylight savings time transition.
- This problem arose only with relative date strings like `last monday'.
- It was not a problem with strings that include absolute dates.
-* factor is twice as fast, for large numbers
- [2.0.11]
-* setting the date now works properly, even when using -u
-* `date -f - < /dev/null' no longer dumps core
-* some DOS/Windows portability changes
- [2.0j]
-* `date -d DATE' now parses certain relative DATEs correctly
- [2.0i]
-* fixed a bug introduced in 2.0h that made many programs fail with a
- `write error' when invoked with the --version option
- [2.0h]
-* all programs fail when printing --help or --version output to a full device
-* printf exits nonzero upon write failure
-* yes now detects and terminates upon write failure
-* date --rfc-822 now always emits day and month names from the `C' locale
-* portability tweaks for Solaris8, Ultrix, and DOS
- [2.0g]
-* date now handles two-digit years with leading zeros correctly.
-* printf interprets unicode, \uNNNN \UNNNNNNNN, on systems with the
- required support; from Bruno Haible.
-* stty's rprnt attribute now works on HPUX 10.20
-* seq's --equal-width option works more portably
- [2.0f]
-* fix build problems with ut_name vs. ut_user
- [2.0e]
-* stty: fix long-standing bug that caused test failures on at least HPUX
- systems when COLUMNS was set to zero
-* still more portability fixes
-* unified lib/: now that directory and most of the configuration framework
- is common between fileutils, textutils, and sh-utils
- [2.0d]
-* fix portability problem with sleep vs lib/strtod.c's requirement for -lm
- [2.0c]
-* fix portability problems with nanosleep.c and with the new code in sleep.c
- [2.0b]
-* Regenerate lib/Makefile.in so that nanosleep.c is distributed.
- [2.0a]
-* sleep accepts floating point arguments on command line
-* sleep's clock continues counting down when sleep is suspended
-* when a suspended sleep process is resumed, it continues sleeping if
- there is any time remaining
-* who once again prints whatever host information it has, even without --lookup
-
-========================================================================
-For older NEWS entries for the fileutils, textutils, and sh-utils
-packages, see ./old/*/NEWS.
-
- This package began as the union of the following:
- textutils-2.1, fileutils-4.1.11, sh-utils-2.0.15.
diff --git a/contrib/gnu-sort/README b/contrib/gnu-sort/README
deleted file mode 100644
index df35be4..0000000
--- a/contrib/gnu-sort/README
+++ /dev/null
@@ -1,147 +0,0 @@
-These are the GNU core utilities. This package is the union of
-the GNU fileutils, sh-utils, and textutils packages.
-
-Most of these programs have significant advantages over their Unix
-counterparts, such as greater speed, additional options, and fewer
-arbitrary limits.
-
-The programs that can be built with this package are:
-
- [ basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd
- df dir dircolors dirname du echo env expand expr factor false fmt fold
- ginstall groups head hostid hostname id join kill link ln logname ls
- md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr
- printenv printf ptx pwd readlink rm rmdir seq sha1sum shred sleep sort
- split stat stty su sum sync tac tail tee test touch tr true tsort tty
- uname unexpand uniq unlink uptime users vdir wc who whoami yes
-
-See the file NEWS for a list of major changes in the current release.
-
-See the file INSTALL for compilation and installation instructions.
-
-These programs are intended to conform to POSIX (with BSD and other
-extensions), like the rest of the GNU system. By default they conform
-to older POSIX (1003.2-1992), and therefore support obsolete usages
-like "head -10" and "chown owner.group file". This default is
-overridden at build-time by the value of <unistd.h>'s _POSIX2_VERSION
-macro, and this in turn can be overridden at runtime as described in
-the documentation under "Standards conformance".
-
-The ls, dir, and vdir commands are all separate executables instead of
-one program that checks argv[0] because people often rename these
-programs to things like gls, gnuls, l, etc. Renaming a program
-file shouldn't affect how it operates, so that people can get the
-behavior they want with whatever name they want.
-
-Special thanks to Paul Eggert, Brian Matthews, Bruce Evans, Karl Berry,
-Kaveh Ghazi, and François Pinard for help with debugging and porting
-these programs. Many thanks to all of the people who have taken the
-time to submit problem reports and fixes. All contributed changes are
-attributed in the ChangeLog file.
-
-And thanks to the following people who have provided accounts for
-portability testing on many different types of systems: Bob Proulx,
-Christian Robert, François Pinard, Greg McGary, Harlan Stenn,
-Joel N. Weber, Mark D. Roth, Matt Schalit, Nelson H. F. Beebe,
-Réjean Payette, Sam Tardieu.
-
-Thanks to Michael Stone for inflicting test releases of the fileutils
-on Debian's unstable distribution, and to all the kind folks who used
-that distribution and found and reported bugs.
-
-Note that each man page is now automatically generated from a template
-and from the corresponding --help usage message. Patches to the template
-files (man/*.x) are welcome. However, the authoritative documentation
-is in texinfo form in the doc directory.
-
-If you run the tests on a SunOS4.1.4 system, expect the ctime-part of
-the ls `time-1' test to fail. I believe that is due to a bug in the
-way Sun implemented link(2) and chmod(2).
-
-***************************************
-Last-minute notes, before coreutils-5.0
----------------------------------------
-
-A known problem exists when compiling on HPUX on both hppa and ia64
-in 64-bit mode (i.e. +DD64) on all known HPUX 11.x versions. This
-is not due to a bug in the package but instead due to a bug in the
-system header file which breaks things in 64-bit mode. The default
-compilation mode is 32-bit and the software compiles fine using the
-default mode. To build this software in 64-bit mode you will need
-to fix the system /usr/include/inttypes.h header file. After
-correcting that file the software also compiles fine in 64-bit mode.
-Here is one possible patch to correct the problem.
-
---- /usr/include/inttypes.h.orig Thu May 30 01:00:00 1996
-+++ /usr/include/inttypes.h Sun Mar 23 00:20:36 2003
-@@ -489 +489 @@
--#ifndef __STDC_32_MODE__
-+#ifndef __LP64__
-
-If you run the tests as root, note that a few of them create files
-and/or run programs as a non-root user, `nobody' by default.
-If you want to use some other non-root username, specify it via
-the NON_ROOT_USERNAME environment variable. Depending on the
-permissions with which the working directories have been created,
-using `nobody' may fail, because that user won't have the required
-read and write access to the build and test directories.
-I find that it is best to unpack and build as a non-privileged
-user, and then to run the following command as that user in order
-to run the privilege-requiring tests:
-
- sudo env NON_ROOT_USERNAME=$USER make check
-
-If you can run the tests as root, please do so and report any
-problems. We get much less test coverage in that mode, and it's
-arguably more important that these tools work well when run by
-root than when run by less privileged users.
-
-***************************************
-
-There are pretty many tests, but nowhere near as many as we need.
-Additions and corrections are very welcome.
-
-If you see a problem that you've already reported, feel free to re-report
-it -- it won't bother me to get a reminder. Besides, the more messages I
-get regarding a particular problem the sooner it'll be fixed -- usually.
-If you sent a complete patch and, after a couple weeks you haven't
-received any acknowledgement, please ping us. A complete patch includes
-a well-written ChangeLog entry, unified (diff -u format) diffs relative
-to the most recent test release (or, better, relative to the latest
-sources in the CVS repository), an explanation for why the patch is
-necessary or useful, and if at all possible, enough information to
-reproduce whatever problem prompted it. Plus, you'll earn lots of
-karma if you include a test case to exercise any bug(s) you fix.
-Instructions for checking out the latest source via CVS are here:
-
- http://savannah.gnu.org/cvs/?group=coreutils
-
-
-If your patch adds a new feature, please try to get some sort of consensus
-that it is a worthwhile change. One way to do that is to send mail to
-bug-coreutils@gnu.org including as much description and justification
-as you can. Based on the feedback that generates, you may be able to
-convince us that it's worth adding.
-
-
-WARNING: If you modify files like configure.in, m4/*.m4, aclocal.m4,
-or any Makefile.am, then don't be surprised if what gets regenerated no
-longer works. To make things work, you'll have to be using appropriate
-versions of automake and autoconf. As for what versions are `appropriate',
-use the versions of
-
- * autoconf specified via AC_PREREQ in m4/jm-macros.m4
- * automake specified via AM_INIT_AUTOMAKE in configure.ac
-
-Usually it's fine to use versions that are newer than those specified.
-
-These programs all recognize the `--version' option. When reporting
-bugs, please include in the subject line both the package name/version
-and the name of the program for which you found a problem.
-
-For general documentation on the coding and usage standards
-this distribution follows, see the GNU Coding Standards,
-http://www.gnu.org/prep/standards_toc.html.
-
-Mail suggestions and bug reports for these programs to
-the address on the last line of --help output.
diff --git a/contrib/gnu-sort/THANKS b/contrib/gnu-sort/THANKS
deleted file mode 100644
index 44b7b02..0000000
--- a/contrib/gnu-sort/THANKS
+++ /dev/null
@@ -1,463 +0,0 @@
-These people have contributed to the GNU coreutils (formerly, the fileutils,
-textutils, and/or sh-utils packages). Some have reported problems, others
-have contributed improvements to the documentation, actual code, and even
-complete programs. Those contributions are described in the ChangeLog
-files. If your name has been left out, if you'd rather not be listed,
-or if you'd prefer a different address be used, please send a note to
-the bug-report mailing list (as seen on last line of e.g., cp --help).
-
-??? kytek@cybercomm.net
-A Costa agcosta@gis.net
-Achim Blumensath blume@corona.oche.de
-Adam Klein aklein@debian.org
-Akim Demaille demaille@inf.enst.fr
-Alain Magloire alain@qnx.com
-Alan Iwi iwi@atm.ox.ac.uk
-Albert Chin-A-Young china@thewrittenword.com
-Albert Hopkins ahopkins@dynacare.com
-Alberto Accomazzi alberto@cfa0.harvard.edu
-aldomel aldomel@ix.netcom.com
-Alen Muzinic zveki@fly.cc.fer.hr
-Alexandre Duret-Lutz duret_g@epita.fr
-Alexey Solovyov alekso@math.uu.se
-Alexey Vyskubov alexey@pippuri.mawhrin.net
-Alfred M. Szmidt ams@kemisten.nu
-Andi Kleen freitag@alancoxonachip.com
-Andre Novaes Cunha Andre.Cunha@br.global-one.net
-Andreas Gruenbacher ag@bestbits.at
-Andreas Jaeger jaeger@gnu.org
-Andreas Luik luik@isa.de
-Andreas Schwab schwab@suse.de
-Andreas Stolcke stolcke@ICSI.Berkeley.EDU
-Andrei Gaponenko andr@triumf.ca
-Andres Soolo andres@soolo.matti.ee
-Andrew Burgess aab@cichlid.com
-Andrew Dalke dalke@bioreason.com
-Andrew Fabbro andrew@fabbro.org
-Andrew Pham andpha@us.ibm.com
-Andrew Tridgell tridge@samba.org
-Andrey Borzenkov arvidjaar@mail.ru
-Andries Brouwer Andries.Brouwer@cwi.nl
-Andy Longton alongton@metamark.com
-Anthony Thyssen anthony@griffith.edu.au
-Antonio Rendas ajrendas@yahoo.com
-Ariel Faigon ariel@cthulhu.engr.sgi.com
-Arne H. Juul arnej@solan.unit.no
-Arne Henrik Juul arnej@imf.unit.no
-Arnold Robbins arnold@skeeve.com
-Arthur Pool pool@commerce.uq.edu.au
-Arun Sharma arun.sharma@intel.com
-Arvind Autar Autar022@planet.nl
-Augey Mikus mikus@dqc.org
-Austin Donnelly Austin.Donnelly@cl.cam.ac.uk
-Axel Kittenberger Anshil@gmx.net
-Bauke Jan Douma bjdouma@xs4all.nl
-Ben Elliston bje@air.net.au
-Ben Harris bjh21@netbsd.org
-Benjamin Cutler cutlerbc@simla.colostate.edu
-Bengt Martensson bengt@mathematik.uni-Bremen.de
-Bernard Giroud bernard.giroud@creditlyonnais.ch
-Bernd Leibing bernd.leibing@rz.uni-ulm.de
-Bernd Melchers melchers@cis.fu-berlin.de
-Bernhard Baehr bernhard.baehr@gmx.de
-Bernhard Gabler bernhard@uni-koblenz.de
-Bernhard Rosenkraenzer bero@redhat.de
-Bert Deknuydt Bert.Deknuydt@esat.kuleuven.ac.be
-Bill Peters peters@gaffel.as.arizona.edu
-Bjorn Helgaas helgaas@rsn.hp.com
-Bob McCracken kerouac@ravenet.com
-Bob Proulx rwp@fc.hp.com
-Branden Robinson branden@necrotic.deadbeast.net
-Brendan O'Dea bod@compusol.com.au
-Brian Kimball bfk@footbag.org
-Brian Youmans 3diff@gnu.org
-Bruce Korb bkorb@veritas.com
-Bruce Robertson brucer@theodolite.dyndns.org
-Bruno Haible haible@clisp.cons.org
-Carl Johnson carlj@cjlinux.home.org
-Carl Lowenstein cdl@mpl.UCSD.EDU
-Carlos Canau Carlos.Canau@relay.puug.pt
-Charles Karney karney@pppl.gov
-Charles Randall crandall@matchlogic.com
-Chip Salzenberg chip@valinux.com
-Chris Faylor cgf@cygnus.com
-Chris J. Bednar cjb@AdvancedDataSolutions.com
-Chris Lesniewski ctl@mit.edu
-Chris Sylvain csylvain@umm.edu
-Chris Yeo cyeo@biking.org
-Christi Alice Scarborough christi@chiark.greenend.org.uk
-Christian Harkort christian.harkort@web.de
-Christian Krackowizer ckrackowiz@std.schuler-ag.com
-Christian Rose menthos@menthos.com
-Christian von Roques roques@pond.sub.org
-Chuck Hedrick hedrick@klinzhai.rutgers.edu
-Clark Morgan cmorgan@aracnet.com
-Clement Wang clem.wang@overture.com
-Colin Plumb colin@nyx.net
-Colin Watson cjw44@riva.ucam.org
-Collin Rogowski collin@rogowski.de
-Cray-Cyber Project http://www.cray-cyber.org
-Dale Scheetz dwarf@polaris.net
-Dan Hagerty hag@gnu.ai.it.edu
-Dan Jacobson http://www.geocities.com/jidani
-Dan Pascu dan@services.iiruc.ro
-Daniel Bergstrom noa@melody.se
-Dániel Varga danielv@axelero.hu
-Danny Levinson danny.levinson@overture.com
-Darren Salt ds@youmustbejoking.demon.co.uk
-Dave Beckett dajobe@dajobe.org
-David Dyck dcd@tc.fluke.COM
-David Eisner cradle@umd.edu
-David Flynn dav@chess.plus.com
-David Godfrey dave@delta.demon.co.uk
-David Luyer david_luyer@pacific.net.au
-David Malone dwmalone@cnri.dit.ie
-Deepak Goel deego@gnufans.org
-Dennis Henriksen opus@flamingo.osrl.dk
-Dennis Smit ds@nerds-incorporated.org
-Derek Clegg dclegg@next.com
-Dick Streefland dick_streefland@tasking.com
-Dirk Lattermann dlatt@t-online.de
-Dirk-Jan Faber djfaber@snow.nl
-Dmitry Rutsky rutsky@school.ioffe.rssi.ru
-Dmitry V. Levin ldv@altlinux.org
-Don Parsons dparsons@synapse.kent.edu
-Donni Erpel donald@appc11.gsi.de
-Doug Coleman coleman@iarc1.ece.utexas.edu
-Doug McLaren dougmc@comco.com
-Dragos Harabor dharabor@us.oracle.com
-Duncan Roe duncanr@optimation.com.au
-Ed Avis ed@membled.com
-Edzer Pebesma Edzer.Pebesma@rivm.nl
-Eirik Fuller eirik@hackrat.com
-Eivind eivindt@multinet.no
-Eli Zaretskii eliz@is.elta.co.il
-Emile LeBlanc leblanc@math.toronto.edu
-Eric Backus ericb@lsid.hp.com
-Eric G. Miller egm2@jps.net
-Eric Pemente pemente@northpark.edu
-Eric S. Raymond esr@snark.thyrsus.com
-Erik Bennett bennett@cvo.oneworld.com
-Erik Corry erik@kroete2.freinet.de
-Felix Lee flee@teleport.com
-Ferdinand fw@scenic.mine.nu
-Fletcher Mattox fletcher@cs.utexas.edu
-Florin Iucha fiucha@hsys.mic.ro
-François Pinard pinard@iro.umontreal.ca
-Frank Adler fadler@allesklar.de
-Frank T Lofaro ftlofaro@snooks.Egr.UNLV.EDU
-Fred Fish fnf@ninemoons.com
-Frédéric L. W. Meunier 0@pervalidus.net
-Frederik Eaton frederik@caltech.edu
-Gabor Z. Papp gzp@gzp.org.hu
-Gaël Quéri gqueri@mail.dotcom.fr
-Galen Hazelwood galenh@micron.net
-Gary Anderson ganderson@clark.net
-Gary V. Vaughan gary@gnu.org
-Gaute Hvoslef Kvalnes gaute@verdsveven.com
-Geoff Collyer geoff at collyer.net
-Geoff Kuenning geoff@cs.hmc.edu
-Geoff Odhner geoff@franklin.com
-Geoff Whale geoffw@cse.unsw.EDU.AU
-Gerhard Poul gpoul@gnu.org
-Germano Leichsenring germano@jedi.cs.kobe-u.ac.jp
-Göran Uddeborg goeran@uddeborg.pp.se
-GOTO Masanori gotom@debian.or.jp
-Greg Louis glouis@dynamicro.on.ca
-Greg McGary gkm@gnu.org
-Greg Schafer gschafer@zip.com.au
-Greg Troxel gdt@bbn.com
-Greg Wooledge gawooledge@sherwin.com
-Gregory Leblanc gleblanc@cu-portland.edu
-Guido Leenders guido.leenders@invantive.com
-H. J. Lu hjl@valinux.com
-Hans Ginzel hans@matfyz.cz
-Hans Lermen lermen@fgan.de
-Hans Verkuil hans@wyst.hobby.nl
-Harry Liu rliu@lek.ugcs.caltech.edu
-Harti Brandt brandt@fokus.fraunhofer.de
-Herbert Xu herbert@gondor.apana.org.au
-Holger Berger hberger@ess.nec.de
-Hon-Yin Kok hkok@yoda.unl.edu
-Hugh Daniel hugh@xanadu.com
-Ian Bruce ian.bruce@myrealbox.com
-Ian Jackson ijackson@chiark.greenend.org.uk
-Ian Lance Taylor ian@cygnus.com
-Ian Turner vectro@pipeline.com
-Iida Yosiaki iida@gnu.org
-Ingo Saitz ingo@debian.org
-Ivo Timmermans ivo@debian.org
-James james@albion.glarp.com
-James Antill jmanti%essex.ac.uk@seralph21.essex.ac.uk
-James Sneeringer jvs@ocslink.com
-James Tanis jtt@soscorp.com
-James Youngman james+usenet@free-lunch.demon.co.uk
-Jamie Lokier jamie@imbolc.ucc.ie
-Jan Fedak J.Fedak@sh.cvut.cz
-Jan Nieuwenhuizen janneke@gnu.org
-Janos Farkas chexum@shadow.banki.hu
-Jarkko Hietaniemi jhi@epsilon.hut.fi
-Jean Charles Delepine delepine@u-picardie.fr
-Jeff Moore jbm@mordor.com
-Jeff Sheinberg jeff@bsrd.net
-Jens Elkner elkner@imsgroup.de
-Jens Schmidt jms@jsds.hamburg.com
-Jerome Abela abela@hsc.fr
-Jérôme Zago bug-coreutils-ml@agt-the-walker.net
-Jesse Kornblum kornblum@usna.edu
-Jesse Thilo jgt2@eecs.lehigh.edu
-Jie Xu xuj@iag.net
-Jim Blandy jimb@cyclic.com
-Jim Dennis jimd@starshine.org
-Joakim Rosqvist dvljrt@cs.umu.se
-Jochen Hein jochen@jochen.org
-Joe Orton joe@manyfish.co.uk
-Johan Danielsson joda@pdc.kth.se
-John Bley jbb6@acpub.duke.edu
-John David Anglin dave.anglin@nrc.ca
-John Gatewood Ham zappaman@alphabox.compsci.buu.ac.th
-John Gotts jgotts@umich.edu
-John Kendall kendall@capps.com
-John Kodis kodis@acm.org
-John Murphy jam@philabs.research.philips.com
-John Roll john@panic.harvard.edu
-John Salmon johns@mullet.anu.edu.au
-John Summerfield summer@OS2.ami.com.au
-Jon Peatfield J.S.Peatfield@damtp.cam.ac.uk
-Joost van Baal joostvb@xs4all.nl
-Jorge Stolfi stolfi@ic.unicamp.br
-Joseph S. Myers jsm28@cam.ac.uk
-Juan F. Codagnone juam@arnet.com.ar
-Jungshik Shin jshin@pantheon.yale.edu
-Jürgen Fluk louis@dachau.marco.de
-Jurriaan thunder7@xs4all.nl
-jvogel jvogel@linkny.com
-Kai Henningsen kai@debian.org
-Kai-Uwe Rommel rommel@informatik.tu-muenchen.de
-Kalle Olavi Niemitalo kon@iki.fi
-Kamal Paul Nigam Kamal_Paul_Nigam@gs35.sp.cs.cmu.edu
-Karl Eichwalder keichwa@gmx.net
-Karl Heuer kwzh@gnu.org
-Karl-Michael Schneider schneide@phil.uni-passau.de
-Karsten Thygesen karthy@kom.auc.dk
-Kaveh R. Ghazi ghazi@caip.rutgers.edu
-Keith M. Briggs keith.briggs@bt.com
-Keith Owens kaos@audio.apana.org.au
-Keith Thompson kst@cts.com
-Ken Pizzini kenp@halcyon.com
-Kristin E Thomas kristint@us.ibm.com
-Kjetil Torgrim Homme kjetilho@ifi.uio.no
-Kristoffer Rose kris@diku.dk
-Larry McVoy lm@sgi.com
-Lars Hecking lhecking@nmrc.ucc.ie
-Leah Q eequor@earthlink.net
-Lehti Rami rammer@cs.tut.fi
-Leonard N. Zubkoff lnz@dandelion.com
-Leonardo Milano lmilano@udel.edu
-Lorne Baker lbaker@nitro.avint.net
-Luke Hassell lukehassell@yahoo.com
-M. P. Suzuki mpsuzuki@hiroshima-u.ac.jp
-Maciej Kwapulinski pikpok@univ.gda.pl
-Manas Garg manas@cygsoft.com
-Manfred Hollstein manfred@s-direktnet.de
-Marc Boucher marc@mbsi.ca
-Marc Haber mh+debian-bugs@zugschlus.de
-Marc Olzheim marcolz@stack.nl
-Marco Franzen Marco.Franzen@Thyron.com
-Marcus Brinkmann http://www.marcus-brinkmann.de
-Marcus Daniels marcus@ee.pdx.edu
-Mark A. Thomas thommark@access.digex.net
-Mark Conty Mark_Conty@cargill.com
-Mark D. Roth roth@uiuc.edu
-Mark Funkenhauser mfunkenhauser@rogers.com
-Mark Harris mark@monitor.designacc.com
-Mark Hewitt mhewitt@armature.com
-Mark Hounschell markh@compro.net
-Mark Hubbart discord@mac.com
-Mark Kettenis kettenis@phys.uva.nl
-Mark Nudelman marknu@flash.net
-Mark W. Eichin eichin@cygnus.com
-Markus Demleitner msdemlei@auriga.ari.uni-heidelberg.de
-Martin martin@dresden.nacamar.de
-Martin Buck martin.buck@ascom.ch
-Martin Gallant martyg@goodbit.net
-Martin Hippe martin.hippe@schlund.de
-Martin Michlmayr tbm@cyrius.com
-Martin Mitchell martin@debian.org
-Martin P.J. Zinser zinser@decus.de
-Marty Leisner leisner@sdsp.mc.xerox.com
-Masami Takikawa takikawm@CS.ORST.EDU
-Mate Wierdl mw@moni.msci.memphis.edu
-Matej Vela mvela@public.srce.hr
-Matt Perry matt@primefactor.com
-Matt Schalit mschalit@pacbell.net
-Matt Swift swift@alum.mit.edu
-Matthew Arnison maffew@cat.org.au
-Matthew Braun matthew@ans.net
-Matthew Clarke Matthew_Clarke@mindlink.bc.ca
-Matthew S. Levine mslevine@theory.lcs.mit.edu
-Matthew Smith matts@bluesguitar.org
-Matthew Swift swift@alum.mit.edu
-Matthias Urlichs smurf@noris.de
-Matti Aarnio matti.aarnio@zmailer.org
-Mattias Wadenstein maswan@acc.umu.se
-Meelis Roos mroos@tartu.cyber.ee
-Michael michael@aplatform.com
-Michael ??? michael@roka.net
-Michael Bacarella mbac@netgraft.com>
-Michael Deutschmann michael@talamasca.ocis.net
-Michael Elizabeth Chastain mec.gnu@mindspring.com
-Michael Gaughen mgaughen@polyserve.com
-Michael Hasselberg mikelh@zonta.ping.de
-Michael Hohn hohn@math.utah.edu
-Michael J. Croghan mcroghan@usatoday.com
-Michael McFarland sidlon@yahoo.com
-Michael Piefel piefel@informatik.hu-berlin.de
-Michael Steffens michael.steffens@s.netic.de
-Michael Stone mstone@debian.org
-Michael Stutz stutz@dsl.org
-Michael van Elst mlelstv@dev.de.cw.net
-Michael Veksler mveksler@techunix.technion.ac.il
-Michail Litvak mci@owl.openwall.com
-Michal Politowski mpol@charybda.icm.edu.pl
-Michal Svec msvec@suse.cz
-Michel Robitaille robitail@IRO.UMontreal.CA
-Michiel Bacchiani bacchian@raven.bu.edu
-Mike Castle dalgoda@ix.netcom.com
-Mike Coleman mkc@mathdogs.com
-Mike Jetzer mjetzer@mke.catalystwms.com
-Mikko Tuumanen m@sorvankyla.yok.utu.fi
-Mikulas Patocka mikulas@artax.karlin.mff.cuni.cz
-Miles Bader miles@gnu.ai.mit.edu
-Minh Tran-Le tranle@intellicorp.com
-Morten Welinder terra@diku.dk
-Neal H Walfield neal@cs.uml.edu
-Neil Brown neilb@cse.unsw.edu.au
-Nelson H. F. Beebe beebe@math.utah.edu
-Nick Estes debian@nickstoys.com
-Nick Lawes nlawes@silverplatter.com
-Niklas Edmundsson nikke@acc.umu.se
-Nikola Milutinovic Nikola.Milutinovic@ev.co.yu
-Noah Friedman friedman@splode.com
-Noel Cragg noel@red-bean.com
-Olatunji Oluwabukunmi Ruwase tjruwase@stanford.edu
-Olav Morkrid olav@funcom.com
-Ole Laursen olau@hardworking.dk
-Oliver Kiddle okiddle@yahoo.co.uk
-Ørn E. Hansen oehansen@daimi.aau.dk
-Oskar Liljeblad osk@hem.passagen.se
-Patrick Mauritz oxygene@studentenbude.ath.cx
-Paul Eggert eggert@twinsun.com
-Paul Jarc prj@po.cwru.edu
-Paul Nevai nevai@ops.mps.ohio-state.edu
-Paul Sauer paul@alexa.com
-Paul Slootman paul@debian.org
-Paul Worrall paul@basilisk.uklinux.net
-Pawel Prokop pablo@wizard.ae.krakow.pl
-Per Cederqvist ceder@lysator.liu.se
-Per Kristian Hove perhov@math.ntnu.no
-Peter Eriksson peter@ifm.liu.se
-Peter Horst peter@ointment.org
-Peter Moulder reiter@netspace.net.au
-Peter Samuelson psamuels@sampo.creighton.edu
-Peter Seebach seebs@taniemarie.solon.com
-Petter Reinholdtsen pere@hungry.com
-Phelippe Neveu pneveu@pcigeomatics.com
-Phil Richards phil.richards@vf.vodafone.co.uk
-Philippe De Muyter phdm@macqel.be
-Philippe Schnoebelen Philippe.Schnoebelen@imag.fr
-Phillip Jones mouse@datastacks.com
-Piergiorgio Sartor sartor@sony.de
-Piotr Kwapulinski kwap@univ.gda.pl
-Prashant TR tr@eth.net
-Rainer Orth ro@TechFak.Uni-Bielefeld.DE
-Ralf W. Stephan stephan@tmt.de
-Ralph Loader loader@maths.ox.ac.uk
-Raul Miller moth@magenta.com
-Raúl Núñez de Arenas Coronado raul@pleyades.net
-Reuben Thomas rrt@sc3d.org
-Richard A Downing richard.downing@bcs.org.uk
-Richard Braakman dark@xs4all.nl
-Richard Dawe rich@phekda.freeserve.co.uk
-Richard J. Rauenzahn rrauenza@hairball.cup.hp.com
-Richard Neill rn214@hermes.cam.ac.uk
-Richard Sharman rsharman@magmacom.com
-Rick Sladkey jrs@world.std.com
-Rik Faith faith@cs.unc.edu
-Risto Kankkunen kankkune@lingsoft.fi
-Robert H. de Vries robert@and.nl
-Robert Millan zeratul2@wanadoo.es
-Rogier Wolff R.E.Wolff@BitWizard.nl
-Roland Huebner ro-huebner@gmx.de
-Roland Turner raz.tah.bet@raz.cx
-Ronald F. Guilmette rfg@netcom.com
-Ross Alexander r.alexander@auckland.ac.nz
-Ross Paterson rap@doc.ic.ac.uk
-Ross Ridge rridge@calum.csclub.uwaterloo.ca
-Sami Farin sfarin@ratol.fi
-Samuel Tardieu sam@rfc1149.net
-Samuli Karkkainen Samuli.Karkkainen@hut.fi
-Sander van Malssen svm@kozmix.ow.nl
-Santiago Vila Doncel sanvila@unex.es
-Savochkin Andrey Vladimirovich saw@msu.ru
-Scott Lurndal slurn@griffin.engr.sgi.com
-Shing-Shong Shei shei@cs.indiana.edu
-Soeren Sonnenburg sonnenburg@informatik.hu-berlin.de
-Solar Designer solar@owl.openwall.com
-Stanislav Ievlev inger@altlinux.ru
-Stéphane Chazelas Stephane_CHAZELAS@yahoo.fr
-Stephen Depooter sbdep@myrealbox.com
-Stephen Eglen eglen@pcg.wustl.edu
-Stephen Gildea gildea@stop.mail-abuse.org
-Stephen Smoogen smooge@mindspring.com
-Steve McConnel steve@acadcomp.sil.org
-Steven G. Johnson stevenj@alum.mit.edu
-Steven Mocking ufo@quicknet.nl
-Steven P Watson steven@magelico.net
-Stuart Kemp skemp@peter.bmc.com
-Szakacsits Szabolcs szaka@sienet.hu
-Tadayoshi Funaba tadf@kt.rim.or.jp
-TAKAI Kousuke takai@vlsi.kuee.kyoto-u.ac.jp
-Theodore Ts'o tytso@rsts-11.mit.edu
-Thomas Bushnell thomas@gnu.ai.mit.edu
-Thomas Goerlich thomas@schnappmatik.de
-Thomas Luzat thomas@luzat.com
-Thomas Quinot thomas@Cuivre.FR.EU.ORG
-Tim J. Robbins tjr@FreeBSD.org
-Tim Mooney mooney@dogbert.cc.ndsu.NoDak.edu
-Tim Smithers mouse@dmouse.com.au
-Tim Waugh twaugh@redhat
-Todd A. Jacobs tjacobs@codegnome.org
-Tom Haynes thomas@netapp.com
-Tom Quinn trq@dionysos.thphys.ox.ac.uk
-Tommi Kyntola tkyntola@cc.hut.fi
-Ton Hospel thospel@mail.dma.be
-Ton Nijkes ton@murphy.nl
-Tony Kocurko akocurko@mun.ca
-Tony Leneis tony@plaza.ds.adp.com
-Tony Robinson ajr@eng.cam.ac.uk
-Torbjorn Granlund tege@nada.kth.se
-Torbjorn Lindgren tl@funcom.no
-Torsten Landschoff torsten@pclab.ifg.uni-kiel.de
-Ulrich Drepper drepper@gnu.org
-Urs Thuermann urs@isnogud.escape.de
-Uwe H. Steinfeld usteinfeld@gmx.net
-Vesselin Atanasov vesselin@bgnet.bg
-Vin Shelton acs@alumni.princeton.edu
-Volker Borchert bt@teknon.de
-Volker Paul vpaul@dohle.com
-Wartan Hachaturow wart@tepkom.ru
-Wayne Stewart wstewa@atl.com
-Wenjun Zheng zwj@yahoo.com
-Werner Almesberger Werner.Almesberger@epfl.ch
-Wichert Akkerman wichert@cistron.nl
-Will Edgington wedgingt@acm.org
-William Bader william@nscs.fast.net
-William Dowling will@franklin.com
-William Lewis wiml@omnigroup.com
-wiregauze wiregauze@yahoo.com
-Wojciech Purczynski cliph@isec.pl
-Wolfram Kleff kleff@cs.uni-bonn.de
-Won-kyu Park wkpark@chem.skku.ac.kr
-Yann Dirson dirson@debian.org
-Zvi Har'El rl@math.technion.ac.il
diff --git a/contrib/gnu-sort/THANKS-to-translators b/contrib/gnu-sort/THANKS-to-translators
deleted file mode 100644
index c84ff64..0000000
--- a/contrib/gnu-sort/THANKS-to-translators
+++ /dev/null
@@ -1,36 +0,0 @@
-The following teams have translated the many diagnostics of this
-package into many different languages. Thank you!
-
----
-http://www.iro.umontreal.ca/contrib/po/HTML/team-af.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-be.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-ca.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-cs.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-da.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-de.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-el.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-es.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-et.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-fi.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-fr.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-ga.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-gl.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-hu.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-it.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-ja.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-ko.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-lg.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-ms.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-nb.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-nl.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-no.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-pl.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-pt.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-pt_BR.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-ru.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-sk.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-sl.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-sv.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-tr.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-zh_CN.html
-http://www.iro.umontreal.ca/contrib/po/HTML/team-zh_TW.html
diff --git a/contrib/gnu-sort/TODO b/contrib/gnu-sort/TODO
deleted file mode 100644
index 82a74bf..0000000
--- a/contrib/gnu-sort/TODO
+++ /dev/null
@@ -1,171 +0,0 @@
-restore djgpp, eventually
-merge TODO lists
-add unit tests for lib/*.c
-
-strip: 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
- reported by Andreas Schwab
-
-copy.c: Address the FIXME-maybe comment in copy_internal.
-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.
-
-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.
-
-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.
-
-Should printf '\0123' print "\n3"?
- per report from TAKAI Kousuke on Mar 27
- http://mail.gnu.org/archive/html/bug-coreutils/2003-03/index.html
-
-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
-
-m4: rename all macros that start with AC_ to start with another prefix
-
-resolve RH report on cp -a forwarded by Tim Waugh
-
-Martin Michlmayr's patch to provide ls with `--sort directory' option
-
-tail: don't use xlseek; it *exits*.
- Instead, maybe use a macro and return nonzero.
-
-add mktemp? Suggested by Nelson Beebe
-
-df: alignment problem of `Used' heading with e.g., -mP
- reported by Karl Berry
-
-tr: support nontrivial equivalence classes, e.g. [=e=] with LC_COLLATE=fr_FR
-
-fix tail -f to work with named pipes; reported by Ian D. Allen
- $ mkfifo j; tail -f j & sleep 1; echo x > j
- ./tail: j: file truncated
- ./tail: j: cannot seek to offset 0: Illegal seek
-
-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.
-
-sort: Compress temporary files when doing large external sort/merges.
- This improves performance when you can compress/uncompress faster than
- you can read/write, which is common in these days of fast CPUs.
- suggestion from Charles Randall on 2001-08-10
-
-sort: Add an ordering option -R that causes 'sort' to sort according
- to a random permutation of the correct sort order. Also, add an
- option --random-seed=SEED that causes 'sort' to use an arbitrary
- string SEED to select which permutations to use, in a deterministic
- manner: that is, if you sort a permutation of the same input file
- with the same --random-seed=SEED option twice, you'll get the same
- output. The default SEED is chosen at random, and contains enough
- information to ensure that the output permutation is random.
- suggestion from Feth AREZKI, Stephan Kasal, and Paul Eggert on 2003-07-17
-
-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.
-
-cp --recursive: perform dir traversals in source and dest hierarchy rather
- than forming full file names. The latter (current) approach fails
- unnecessarily when the names become very long.
-
-tail --p is now ambiguous
-
-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
-
-
-Changes expected to go in, post-5.2.1:
-======================================
-
- wc: add an option, --files0-from [as for du] to make it read NUL-delimited
- file name arguments from a file.
-
- dd patch from Olivier Delhomme
-
- Apply Andreas Gruenbacher's ACL and xattr changes
-
- Apply Bruno Haible's hostname changes
-
- 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.
-
- A more efficient version of factor, and possibly one that
- accepts inputs of size 2^64 and larger.
-
- Re-add a separate test for du's stack space usage (like the one removed
- from tests/rm/deep-1).
-
- 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:
- ------------------------
- ls --color: Ed Avis' patch to suppress escape sequences for
- non-highlighted files
-
- getpwnam from Bruce Korb
-
- pb (progress bar) from Miika Pekkarinen
-
- Look into improving the performance of md5sum.
- `openssl md5' is consistently about 30% faster than md5sum on an idle
- AMD 2000-XP system with plenty of RAM and a 261 MB input file.
- openssl's md5 implementation is in assembly, generated by a perl script.
diff --git a/contrib/gnu-sort/lib/__fpending.c b/contrib/gnu-sort/lib/__fpending.c
deleted file mode 100644
index a872102..0000000
--- a/contrib/gnu-sort/lib/__fpending.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* __fpending.c -- return the number of pending output bytes on a stream
- Copyright (C) 2000 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Jim Meyering. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "__fpending.h"
-
-size_t
-__fpending (FILE *fp)
-{
- return PENDING_OUTPUT_N_BYTES;
-}
diff --git a/contrib/gnu-sort/lib/__fpending.h b/contrib/gnu-sort/lib/__fpending.h
deleted file mode 100644
index 5a51582..0000000
--- a/contrib/gnu-sort/lib/__fpending.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdio.h>
-
-#if HAVE_STDIO_EXT_H
-# include <stdio_ext.h>
-#endif
-
-#ifndef HAVE_DECL___FPENDING
-"this configure-time declaration test was not run"
-#endif
-#if !HAVE_DECL___FPENDING
-size_t __fpending (FILE *);
-#endif
diff --git a/contrib/gnu-sort/lib/argmatch.c b/contrib/gnu-sort/lib/argmatch.c
deleted file mode 100644
index 1a8ec2f..0000000
--- a/contrib/gnu-sort/lib/argmatch.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* argmatch.c -- find a match for a string in an array
-
- Copyright (C) 1990, 1998, 1999, 2001, 2002, 2003, 2004 Free
- Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by David MacKenzie <djm@ai.mit.edu>
- Modified by Akim Demaille <demaille@inf.enst.fr> */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Specification. */
-#include "argmatch.h"
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-#include "error.h"
-#include "exit.h"
-#include "quotearg.h"
-#include "quote.h"
-#include "unlocked-io.h"
-
-/* When reporting an invalid argument, show nonprinting characters
- by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
- literal_quoting_style. */
-#ifndef ARGMATCH_QUOTING_STYLE
-# define ARGMATCH_QUOTING_STYLE locale_quoting_style
-#endif
-
-/* Non failing version of argmatch call this function after failing. */
-#ifndef ARGMATCH_DIE
-# include "exitfail.h"
-# define ARGMATCH_DIE exit (exit_failure)
-#endif
-
-#ifdef ARGMATCH_DIE_DECL
-ARGMATCH_DIE_DECL;
-#endif
-
-static void
-__argmatch_die (void)
-{
- ARGMATCH_DIE;
-}
-
-/* Used by XARGMATCH and XARGCASEMATCH. See description in argmatch.h.
- Default to __argmatch_die, but allow caller to change this at run-time. */
-argmatch_exit_fn argmatch_die = __argmatch_die;
-
-
-/* If ARG is an unambiguous match for an element of the
- null-terminated array ARGLIST, return the index in ARGLIST
- of the matched element, else -1 if it does not match any element
- or -2 if it is ambiguous (is a prefix of more than one element).
-
- If VALLIST is none null, use it to resolve ambiguities limited to
- synonyms, i.e., for
- "yes", "yop" -> 0
- "no", "nope" -> 1
- "y" is a valid argument, for `0', and "n" for `1'. */
-
-ptrdiff_t
-argmatch (const char *arg, const char *const *arglist,
- const char *vallist, size_t valsize)
-{
- size_t i; /* Temporary index in ARGLIST. */
- size_t arglen; /* Length of ARG. */
- ptrdiff_t matchind = -1; /* Index of first nonexact match. */
- bool ambiguous = false; /* If true, multiple nonexact match(es). */
-
- arglen = strlen (arg);
-
- /* Test all elements for either exact match or abbreviated matches. */
- for (i = 0; arglist[i]; i++)
- {
- if (!strncmp (arglist[i], arg, arglen))
- {
- if (strlen (arglist[i]) == arglen)
- /* Exact match found. */
- return i;
- else if (matchind == -1)
- /* First nonexact match found. */
- matchind = i;
- else
- {
- /* Second nonexact match found. */
- if (vallist == NULL
- || memcmp (vallist + valsize * matchind,
- vallist + valsize * i, valsize))
- {
- /* There is a real ambiguity, or we could not
- disambiguate. */
- ambiguous = true;
- }
- }
- }
- }
- if (ambiguous)
- return -2;
- else
- return matchind;
-}
-
-/* Error reporting for argmatch.
- CONTEXT is a description of the type of entity that was being matched.
- VALUE is the invalid value that was given.
- PROBLEM is the return value from argmatch. */
-
-void
-argmatch_invalid (const char *context, const char *value, ptrdiff_t problem)
-{
- char const *format = (problem == -1
- ? _("invalid argument %s for %s")
- : _("ambiguous argument %s for %s"));
-
- error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value),
- quote_n (1, context));
-}
-
-/* List the valid arguments for argmatch.
- ARGLIST is the same as in argmatch.
- VALLIST is a pointer to an array of values.
- VALSIZE is the size of the elements of VALLIST */
-void
-argmatch_valid (const char *const *arglist,
- const char *vallist, size_t valsize)
-{
- size_t i;
- const char *last_val = NULL;
-
- /* We try to put synonyms on the same line. The assumption is that
- synonyms follow each other */
- fprintf (stderr, _("Valid arguments are:"));
- for (i = 0; arglist[i]; i++)
- if ((i == 0)
- || memcmp (last_val, vallist + valsize * i, valsize))
- {
- fprintf (stderr, "\n - `%s'", arglist[i]);
- last_val = vallist + valsize * i;
- }
- else
- {
- fprintf (stderr, ", `%s'", arglist[i]);
- }
- putc ('\n', stderr);
-}
-
-/* Never failing versions of the previous functions.
-
- CONTEXT is the context for which argmatch is called (e.g.,
- "--version-control", or "$VERSION_CONTROL" etc.). Upon failure,
- calls the (supposed never to return) function EXIT_FN. */
-
-ptrdiff_t
-__xargmatch_internal (const char *context,
- const char *arg, const char *const *arglist,
- const char *vallist, size_t valsize,
- argmatch_exit_fn exit_fn)
-{
- ptrdiff_t res = argmatch (arg, arglist, vallist, valsize);
- if (res >= 0)
- /* Success. */
- return res;
-
- /* We failed. Explain why. */
- argmatch_invalid (context, arg, res);
- argmatch_valid (arglist, vallist, valsize);
- (*exit_fn) ();
-
- return -1; /* To please the compilers. */
-}
-
-/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and
- return the first corresponding argument in ARGLIST */
-const char *
-argmatch_to_argument (const char *value,
- const char *const *arglist,
- const char *vallist, size_t valsize)
-{
- size_t i;
-
- for (i = 0; arglist[i]; i++)
- if (!memcmp (value, vallist + valsize * i, valsize))
- return arglist[i];
- return NULL;
-}
-
-#ifdef TEST
-/*
- * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu>
- */
-char *program_name;
-
-/* When to make backup files. */
-enum backup_type
-{
- /* Never make backups. */
- none,
-
- /* Make simple backups of every file. */
- simple,
-
- /* Make numbered backups of files that already have numbered backups,
- and simple backups of the others. */
- numbered_existing,
-
- /* Make numbered backups of every file. */
- numbered
-};
-
-/* Two tables describing arguments (keys) and their corresponding
- values */
-static const char *const backup_args[] =
-{
- "no", "none", "off",
- "simple", "never",
- "existing", "nil",
- "numbered", "t",
- 0
-};
-
-static const enum backup_type backup_vals[] =
-{
- none, none, none,
- simple, simple,
- numbered_existing, numbered_existing,
- numbered, numbered
-};
-
-int
-main (int argc, const char *const *argv)
-{
- const char *cp;
- enum backup_type backup_type = none;
-
- program_name = (char *) argv[0];
-
- if (argc > 2)
- {
- fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", program_name);
- exit (1);
- }
-
- if ((cp = getenv ("VERSION_CONTROL")))
- backup_type = XARGMATCH ("$VERSION_CONTROL", cp,
- backup_args, backup_vals);
-
- if (argc == 2)
- backup_type = XARGMATCH (program_name, argv[1],
- backup_args, backup_vals);
-
- printf ("The version control is `%s'\n",
- ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals));
-
- return 0;
-}
-#endif
diff --git a/contrib/gnu-sort/lib/argmatch.h b/contrib/gnu-sort/lib/argmatch.h
deleted file mode 100644
index 8952394..0000000
--- a/contrib/gnu-sort/lib/argmatch.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* argmatch.h -- definitions and prototypes for argmatch.c
-
- Copyright (C) 1990, 1998, 1999, 2001, 2002, 2004 Free Software
- Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by David MacKenzie <djm@ai.mit.edu>
- Modified by Akim Demaille <demaille@inf.enst.fr> */
-
-#ifndef ARGMATCH_H_
-# define ARGMATCH_H_ 1
-
-# include <stddef.h>
-
-# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
-
-# define ARGMATCH_CONSTRAINT(Arglist, Vallist) \
- (ARRAY_CARDINALITY (Arglist) == ARRAY_CARDINALITY (Vallist) + 1)
-
-/* Assert there are as many real arguments as there are values
- (argument list ends with a NULL guard). ARGMATCH_VERIFY is
- preferred, since it is guaranteed to be checked at compile-time.
- ARGMATCH_ASSERT is for backward compatibility only. */
-
-# define ARGMATCH_VERIFY(Arglist, Vallist) \
- struct argmatch_verify \
- { \
- char argmatch_verify[ARGMATCH_CONSTRAINT(Arglist, Vallist) ? 1 : -1]; \
- }
-
-# define ARGMATCH_ASSERT(Arglist, Vallist) \
- assert (ARGMATCH_CONSTRAINT (Arglist, Vallist))
-
-/* Return the index of the element of ARGLIST (NULL terminated) that
- matches with ARG. If VALLIST is not NULL, then use it to resolve
- false ambiguities (i.e., different matches of ARG but corresponding
- to the same values in VALLIST). */
-
-ptrdiff_t argmatch (char const *arg, char const *const *arglist,
- char const *vallist, size_t valsize);
-
-# define ARGMATCH(Arg, Arglist, Vallist) \
- argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist))
-
-/* xargmatch calls this function when it fails. This function should not
- return. By default, this is a function that calls ARGMATCH_DIE which
- in turn defaults to `exit (exit_failure)'. */
-typedef void (*argmatch_exit_fn) (void);
-extern argmatch_exit_fn argmatch_die;
-
-/* Report on stderr why argmatch failed. Report correct values. */
-
-void argmatch_invalid (char const *context, char const *value,
- ptrdiff_t problem);
-
-/* Left for compatibility with the old name invalid_arg */
-
-# define invalid_arg(Context, Value, Problem) \
- argmatch_invalid (Context, Value, Problem)
-
-
-
-/* Report on stderr the list of possible arguments. */
-
-void argmatch_valid (char const *const *arglist,
- char const *vallist, size_t valsize);
-
-# define ARGMATCH_VALID(Arglist, Vallist) \
- argmatch_valid (Arglist, (char const *) (Vallist), sizeof *(Vallist))
-
-
-
-/* Same as argmatch, but upon failure, reports a explanation on the
- failure, and exits using the function EXIT_FN. */
-
-ptrdiff_t __xargmatch_internal (char const *context,
- char const *arg, char const *const *arglist,
- char const *vallist, size_t valsize,
- argmatch_exit_fn exit_fn);
-
-/* Programmer friendly interface to __xargmatch_internal. */
-
-# define XARGMATCH(Context, Arg, Arglist, Vallist) \
- ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \
- (char const *) (Vallist), \
- sizeof *(Vallist), \
- argmatch_die)])
-
-/* Convert a value into a corresponding argument. */
-
-char const *argmatch_to_argument (char const *value,
- char const *const *arglist,
- char const *vallist, size_t valsize);
-
-# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \
- argmatch_to_argument (Value, Arglist, \
- (char const *) (Vallist), sizeof *(Vallist))
-
-#endif /* ARGMATCH_H_ */
diff --git a/contrib/gnu-sort/lib/closeout.c b/contrib/gnu-sort/lib/closeout.c
deleted file mode 100644
index 3c7bed9..0000000
--- a/contrib/gnu-sort/lib/closeout.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* closeout.c - close standard output
-
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Free Software
- Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "closeout.h"
-
-#include <stdio.h>
-#include <errno.h>
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-#include "error.h"
-#include "exitfail.h"
-#include "quotearg.h"
-#include "unlocked-io.h"
-#include "__fpending.h"
-
-static const char *file_name;
-
-/* Set the file name to be reported in the event an error is detected
- by close_stdout. */
-void
-close_stdout_set_file_name (const char *file)
-{
- file_name = file;
-}
-
-/* Close standard output, exiting with status 'exit_failure' on failure.
- If a program writes *anything* to stdout, that program should `fflush'
- stdout and make sure that it succeeds before exiting. Otherwise,
- suppose that you go to the extreme of checking the return status
- of every function that does an explicit write to stdout. The last
- printf can succeed in writing to the internal stream buffer, and yet
- the fclose(stdout) could still fail (due e.g., to a disk full error)
- when it tries to write out that buffered data. Thus, you would be
- left with an incomplete output file and the offending program would
- exit successfully.
-
- FIXME: note the fflush suggested above is implicit in the fclose
- we actually do below. Consider doing only the fflush and/or using
- setvbuf to inhibit buffering.
-
- Besides, it's wasteful to check the return value from every call
- that writes to stdout -- just let the internal stream state record
- the failure. That's what the ferror test is checking below.
-
- It's important to detect such failures and exit nonzero because many
- tools (most notably `make' and other build-management systems) depend
- on being able to detect failure in other tools via their exit status. */
-
-void
-close_stdout (void)
-{
- int e = ferror (stdout) ? 0 : -1;
-
- /* If the stream's error bit is clear and there is nothing to flush,
- then return right away. */
- if (e && __fpending (stdout) == 0)
- return;
-
- if (fclose (stdout) != 0)
- e = errno;
-
- if (0 <= e)
- {
- char const *write_error = _("write error");
- if (file_name)
- error (exit_failure, e, "%s: %s", quotearg_colon (file_name),
- write_error);
- else
- error (exit_failure, e, "%s", write_error);
- }
-}
diff --git a/contrib/gnu-sort/lib/closeout.h b/contrib/gnu-sort/lib/closeout.h
deleted file mode 100644
index 1b715ee..0000000
--- a/contrib/gnu-sort/lib/closeout.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Close standard output.
-
- Copyright (C) 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef CLOSEOUT_H
-# define CLOSEOUT_H 1
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-void close_stdout_set_file_name (const char *file);
-void close_stdout (void);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
diff --git a/contrib/gnu-sort/lib/dup-safer.c b/contrib/gnu-sort/lib/dup-safer.c
deleted file mode 100644
index 408a1bd..0000000
--- a/contrib/gnu-sort/lib/dup-safer.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Invoke dup, but avoid some glitches.
- Copyright (C) 2001, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-
-#if HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifndef STDERR_FILENO
-# define STDERR_FILENO 2
-#endif
-
-#include <unistd-safer.h>
-
-/* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or
- STDERR_FILENO. */
-
-int
-dup_safer (int fd)
-{
-#ifdef F_DUPFD
- return fcntl (fd, F_DUPFD, STDERR_FILENO + 1);
-#else
- int f = dup (fd);
- if (0 <= f && f <= STDERR_FILENO)
- {
- int f1 = dup_safer (f);
- int e = errno;
- close (f);
- errno = e;
- f = f1;
- }
- return f;
-#endif
-}
diff --git a/contrib/gnu-sort/lib/error.c b/contrib/gnu-sort/lib/error.c
deleted file mode 100644
index 5a5e126..0000000
--- a/contrib/gnu-sort/lib/error.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/* Error handler for noninteractive utilities
- Copyright (C) 1990-1998, 2000-2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "error.h"
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "gettext.h"
-#endif
-
-#ifdef _LIBC
-# include <wchar.h>
-# define mbsrtowcs __mbsrtowcs
-#endif
-
-#if !_LIBC
-# include "unlocked-io.h"
-#endif
-
-#ifndef _
-# define _(String) String
-#endif
-
-/* If NULL, error will flush stdout, then print on stderr the program
- name, a colon and a space. Otherwise, error will call this
- function without parameters instead. */
-void (*error_print_progname) (void);
-
-/* This variable is incremented each time `error' is called. */
-unsigned int error_message_count;
-
-#ifdef _LIBC
-/* In the GNU C library, there is a predefined variable for this. */
-
-# define program_name program_invocation_name
-# include <errno.h>
-# include <libio/libioP.h>
-
-/* In GNU libc we want do not want to use the common name `error' directly.
- Instead make it a weak alias. */
-extern void __error (int status, int errnum, const char *message, ...)
- __attribute__ ((__format__ (__printf__, 3, 4)));
-extern void __error_at_line (int status, int errnum, const char *file_name,
- unsigned int line_number, const char *message,
- ...)
- __attribute__ ((__format__ (__printf__, 5, 6)));;
-# define error __error
-# define error_at_line __error_at_line
-
-# include <libio/iolibio.h>
-# define fflush(s) INTUSE(_IO_fflush) (s)
-# undef putc
-# define putc(c, fp) INTUSE(_IO_putc) (c, fp)
-
-# include <bits/libc-lock.h>
-
-#else /* not _LIBC */
-
-# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
-# ifndef HAVE_DECL_STRERROR_R
-"this configure-time declaration test was not run"
-# endif
-char *strerror_r ();
-# endif
-
-# ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-# endif
-
-/* The calling program should define program_name and set it to the
- name of the executing program. */
-extern char *program_name;
-
-# if HAVE_STRERROR_R || defined strerror_r
-# define __strerror_r strerror_r
-# endif
-#endif /* not _LIBC */
-
-static void
-print_errno_message (int errnum)
-{
- char const *s = NULL;
-
-#if defined HAVE_STRERROR_R || _LIBC
- char errbuf[1024];
-# if STRERROR_R_CHAR_P || _LIBC
- s = __strerror_r (errnum, errbuf, sizeof errbuf);
-# else
- if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
- s = errbuf;
-# endif
-#endif
-
-#if !_LIBC
- if (! s && ! (s = strerror (errnum)))
- s = _("Unknown system error");
-#endif
-
-#if _LIBC
- if (_IO_fwide (stderr, 0) > 0)
- {
- __fwprintf (stderr, L": %s", s);
- return;
- }
-#endif
-
- fprintf (stderr, ": %s", s);
-}
-
-static void
-error_tail (int status, int errnum, const char *message, va_list args)
-{
-#if _LIBC
- if (_IO_fwide (stderr, 0) > 0)
- {
-# define ALLOCA_LIMIT 2000
- size_t len = strlen (message) + 1;
- const wchar_t *wmessage = L"out of memory";
- wchar_t *wbuf = (len < ALLOCA_LIMIT
- ? alloca (len * sizeof *wbuf)
- : len <= SIZE_MAX / sizeof *wbuf
- ? malloc (len * sizeof *wbuf)
- : NULL);
-
- if (wbuf)
- {
- size_t res;
- mbstate_t st;
- const char *tmp = message;
- memset (&st, '\0', sizeof (st));
- res = mbsrtowcs (wbuf, &tmp, len, &st);
- wmessage = res == (size_t) -1 ? L"???" : wbuf;
- }
-
- __vfwprintf (stderr, wmessage, args);
- if (! (len < ALLOCA_LIMIT))
- free (wbuf);
- }
- else
-#endif
- vfprintf (stderr, message, args);
- va_end (args);
-
- ++error_message_count;
- if (errnum)
- print_errno_message (errnum);
-#if _LIBC
- if (_IO_fwide (stderr, 0) > 0)
- putwc (L'\n', stderr);
- else
-#endif
- putc ('\n', stderr);
- fflush (stderr);
- if (status)
- exit (status);
-}
-
-
-/* Print the program name and error message MESSAGE, which is a printf-style
- format string with optional args.
- If ERRNUM is nonzero, print its corresponding system error message.
- Exit with status STATUS if it is nonzero. */
-void
-error (int status, int errnum, const char *message, ...)
-{
- va_list args;
-
-#if defined _LIBC && defined __libc_ptf_call
- /* We do not want this call to be cut short by a thread
- cancellation. Therefore disable cancellation for now. */
- int state = PTHREAD_CANCEL_ENABLE;
- __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
- 0);
-#endif
-
- fflush (stdout);
-#ifdef _LIBC
- _IO_flockfile (stderr);
-#endif
- if (error_print_progname)
- (*error_print_progname) ();
- else
- {
-#if _LIBC
- if (_IO_fwide (stderr, 0) > 0)
- __fwprintf (stderr, L"%s: ", program_name);
- else
-#endif
- fprintf (stderr, "%s: ", program_name);
- }
-
- va_start (args, message);
- error_tail (status, errnum, message, args);
-
-#ifdef _LIBC
- _IO_funlockfile (stderr);
-# ifdef __libc_ptf_call
- __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
-# endif
-#endif
-}
-
-/* Sometimes we want to have at most one error per line. This
- variable controls whether this mode is selected or not. */
-int error_one_per_line;
-
-void
-error_at_line (int status, int errnum, const char *file_name,
- unsigned int line_number, const char *message, ...)
-{
- va_list args;
-
- if (error_one_per_line)
- {
- static const char *old_file_name;
- static unsigned int old_line_number;
-
- if (old_line_number == line_number
- && (file_name == old_file_name
- || strcmp (old_file_name, file_name) == 0))
- /* Simply return and print nothing. */
- return;
-
- old_file_name = file_name;
- old_line_number = line_number;
- }
-
-#if defined _LIBC && defined __libc_ptf_call
- /* We do not want this call to be cut short by a thread
- cancellation. Therefore disable cancellation for now. */
- int state = PTHREAD_CANCEL_ENABLE;
- __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
- 0);
-#endif
-
- fflush (stdout);
-#ifdef _LIBC
- _IO_flockfile (stderr);
-#endif
- if (error_print_progname)
- (*error_print_progname) ();
- else
- {
-#if _LIBC
- if (_IO_fwide (stderr, 0) > 0)
- __fwprintf (stderr, L"%s: ", program_name);
- else
-#endif
- fprintf (stderr, "%s:", program_name);
- }
-
- if (file_name != NULL)
- {
-#if _LIBC
- if (_IO_fwide (stderr, 0) > 0)
- __fwprintf (stderr, L"%s:%d: ", file_name, line_number);
- else
-#endif
- fprintf (stderr, "%s:%d: ", file_name, line_number);
- }
-
- va_start (args, message);
- error_tail (status, errnum, message, args);
-
-#ifdef _LIBC
- _IO_funlockfile (stderr);
-# ifdef __libc_ptf_call
- __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
-# endif
-#endif
-}
-
-#ifdef _LIBC
-/* Make the weak alias. */
-# undef error
-# undef error_at_line
-weak_alias (__error, error)
-weak_alias (__error_at_line, error_at_line)
-#endif
diff --git a/contrib/gnu-sort/lib/error.h b/contrib/gnu-sort/lib/error.h
deleted file mode 100644
index 8ed6359..0000000
--- a/contrib/gnu-sort/lib/error.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Declaration for error-reporting function
- Copyright (C) 1995, 1996, 1997, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef _ERROR_H
-#define _ERROR_H 1
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-# define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
- are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __format__ format
-# define __printf__ printf
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Print a message with `fprintf (stderr, FORMAT, ...)';
- if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
- If STATUS is nonzero, terminate the program with `exit (STATUS)'. */
-
-extern void error (int __status, int __errnum, const char *__format, ...)
- __attribute__ ((__format__ (__printf__, 3, 4)));
-
-extern void error_at_line (int __status, int __errnum, const char *__fname,
- unsigned int __lineno, const char *__format, ...)
- __attribute__ ((__format__ (__printf__, 5, 6)));
-
-/* If NULL, error will flush stdout, then print on stderr the program
- name, a colon and a space. Otherwise, error will call this
- function without parameters instead. */
-extern void (*error_print_progname) (void);
-
-/* This variable is incremented each time `error' is called. */
-extern unsigned int error_message_count;
-
-/* Sometimes we want to have at most one error per line. This
- variable controls whether this mode is selected or not. */
-extern int error_one_per_line;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* error.h */
diff --git a/contrib/gnu-sort/lib/exit.h b/contrib/gnu-sort/lib/exit.h
deleted file mode 100644
index 4e8d465..0000000
--- a/contrib/gnu-sort/lib/exit.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* exit() function.
- Copyright (C) 1995, 2001 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef _EXIT_H
-#define _EXIT_H
-
-/* Get exit() declaration. */
-#include <stdlib.h>
-
-/* Some systems do not define EXIT_*, even with STDC_HEADERS. */
-#ifndef EXIT_SUCCESS
-# define EXIT_SUCCESS 0
-#endif
-#ifndef EXIT_FAILURE
-# define EXIT_FAILURE 1
-#endif
-
-#endif /* _EXIT_H */
diff --git a/contrib/gnu-sort/lib/exitfail.c b/contrib/gnu-sort/lib/exitfail.c
deleted file mode 100644
index 2ae5f69..0000000
--- a/contrib/gnu-sort/lib/exitfail.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Failure exit status
-
- Copyright (C) 2002, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "exitfail.h"
-#include "exit.h"
-
-int volatile exit_failure = EXIT_FAILURE;
diff --git a/contrib/gnu-sort/lib/exitfail.h b/contrib/gnu-sort/lib/exitfail.h
deleted file mode 100644
index cf5ab71..0000000
--- a/contrib/gnu-sort/lib/exitfail.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Failure exit status
-
- Copyright (C) 2002 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-extern int volatile exit_failure;
diff --git a/contrib/gnu-sort/lib/fopen-safer.c b/contrib/gnu-sort/lib/fopen-safer.c
deleted file mode 100644
index c5c97c8..0000000
--- a/contrib/gnu-sort/lib/fopen-safer.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Invoke fopen, but avoid some glitches.
- Copyright (C) 2001, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <unistd-safer.h>
-
-#ifndef STDERR_FILENO
-# define STDERR_FILENO 2
-#endif
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdio-safer.h>
-
-/* Like fopen, but do not return stdin, stdout, or stderr. */
-
-FILE *
-fopen_safer (char const *file, char const *mode)
-{
- FILE *fp = fopen (file, mode);
-
- if (fp)
- {
- int fd = fileno (fp);
-
- if (0 <= fd && fd <= STDERR_FILENO)
- {
- int f = dup_safer (fd);
-
- if (f < 0)
- {
- int e = errno;
- fclose (fp);
- errno = e;
- return NULL;
- }
-
- if (fclose (fp) != 0
- || ! (fp = fdopen (f, mode)))
- {
- int e = errno;
- close (f);
- errno = e;
- return NULL;
- }
- }
- }
-
- return fp;
-}
diff --git a/contrib/gnu-sort/lib/gettext.h b/contrib/gnu-sort/lib/gettext.h
deleted file mode 100644
index 835732e..0000000
--- a/contrib/gnu-sort/lib/gettext.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Convenience header for conditional use of GNU <libintl.h>.
- Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef _LIBGETTEXT_H
-#define _LIBGETTEXT_H 1
-
-/* NLS can be disabled through the configure --disable-nls option. */
-#if ENABLE_NLS
-
-/* Get declarations of GNU message catalog functions. */
-# include <libintl.h>
-
-#else
-
-/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
- chokes if dcgettext is defined as a macro. So include it now, to make
- later inclusions of <locale.h> a NOP. We don't include <libintl.h>
- as well because people using "gettext.h" will not include <libintl.h>,
- and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
- is OK. */
-#if defined(__sun)
-# include <locale.h>
-#endif
-
-/* Disabled NLS.
- The casts to 'const char *' serve the purpose of producing warnings
- for invalid uses of the value returned from these functions.
- On pre-ANSI systems without 'const', the config.h file is supposed to
- contain "#define const". */
-# define gettext(Msgid) ((const char *) (Msgid))
-# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
-# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
-# define ngettext(Msgid1, Msgid2, N) \
- ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define dngettext(Domainname, Msgid1, Msgid2, N) \
- ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
- ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define textdomain(Domainname) ((const char *) (Domainname))
-# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
-# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
-
-#endif
-
-/* A pseudo function call that serves as a marker for the automated
- extraction of messages, but does not call gettext(). The run-time
- translation is done at a different place in the code.
- The argument, String, should be a literal string. Concatenated strings
- and other string expressions won't work.
- The macro's expansion is not parenthesized, so that it is suitable as
- initializer for static 'char[]' or 'const char[]' variables. */
-#define gettext_noop(String) String
-
-#endif /* _LIBGETTEXT_H */
diff --git a/contrib/gnu-sort/lib/hard-locale.c b/contrib/gnu-sort/lib/hard-locale.c
deleted file mode 100644
index 45b7d05..0000000
--- a/contrib/gnu-sort/lib/hard-locale.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* hard-locale.c -- Determine whether a locale is hard.
-
- Copyright (C) 1997, 1998, 1999, 2002, 2003, 2004 Free Software
- Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-/* $FreeBSD$ */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "hard-locale.h"
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-/* Return true if the current CATEGORY locale is hard, i.e. if you
- can't get away with assuming traditional C or POSIX behavior. */
-bool
-hard_locale (int category)
-{
-#if ! HAVE_SETLOCALE
- return false;
-#else
-
- bool hard = true;
- char const *p = setlocale (category, NULL);
-
- if (p)
- {
-# if defined(__FreeBSD__) || (defined __GLIBC__ && 2 <= __GLIBC__)
- if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0)
- hard = false;
-# else
- char *locale = malloc (strlen (p) + 1);
- if (locale)
- {
- strcpy (locale, p);
-
- /* Temporarily set the locale to the "C" and "POSIX" locales
- to find their names, so that we can determine whether one
- or the other is the caller's locale. */
- if (((p = setlocale (category, "C"))
- && strcmp (p, locale) == 0)
- || ((p = setlocale (category, "POSIX"))
- && strcmp (p, locale) == 0))
- hard = false;
-
- /* Restore the caller's locale. */
- setlocale (category, locale);
- free (locale);
- }
-# endif
- }
-
- return hard;
-
-#endif
-}
diff --git a/contrib/gnu-sort/lib/hard-locale.h b/contrib/gnu-sort/lib/hard-locale.h
deleted file mode 100644
index 010cb27..0000000
--- a/contrib/gnu-sort/lib/hard-locale.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Determine whether a locale is hard.
-
- Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef HARD_LOCALE_H_
-# define HARD_LOCALE_H_ 1
-
-# include <stdbool.h>
-
-bool hard_locale (int);
-
-#endif /* HARD_LOCALE_H_ */
diff --git a/contrib/gnu-sort/lib/human.c b/contrib/gnu-sort/lib/human.c
deleted file mode 100644
index f024c73..0000000
--- a/contrib/gnu-sort/lib/human.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/* human.c -- print human readable file size
-
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert and Larry McVoy. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "human.h"
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-#ifndef UINTMAX_MAX
-# define UINTMAX_MAX ((uintmax_t) -1)
-#endif
-
-#if HAVE_LOCALE_H && HAVE_LOCALECONV
-# include <locale.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-#include <argmatch.h>
-#include <error.h>
-#include <xstrtol.h>
-
-/* The maximum length of a suffix like "KiB". */
-#define HUMAN_READABLE_SUFFIX_LENGTH_MAX 3
-
-static const char power_letter[] =
-{
- 0, /* not used */
- 'K', /* kibi ('k' for kilo is a special case) */
- 'M', /* mega or mebi */
- 'G', /* giga or gibi */
- 'T', /* tera or tebi */
- 'P', /* peta or pebi */
- 'E', /* exa or exbi */
- 'Z', /* zetta or 2**70 */
- 'Y' /* yotta or 2**80 */
-};
-
-
-/* If INEXACT_STYLE is not human_round_to_nearest, and if easily
- possible, adjust VALUE according to the style. */
-
-static long double
-adjust_value (int inexact_style, long double value)
-{
- /* Do not use the floorl or ceill functions, as that would mean
- checking for their presence and possibly linking with the
- standard math library, which is a porting pain. So leave the
- value alone if it is too large to easily round. */
- if (inexact_style != human_round_to_nearest && value < UINTMAX_MAX)
- {
- uintmax_t u = value;
- value = u + (inexact_style == human_ceiling && u != value);
- }
-
- return value;
-}
-
-/* Group the digits of NUMBER according to the grouping rules of the
- current locale. NUMBER contains NUMBERLEN digits. Modify the
- bytes pointed to by NUMBER in place, subtracting 1 from NUMBER for
- each byte inserted. Return the starting address of the modified
- number.
-
- To group the digits, use GROUPING and THOUSANDS_SEP as in `struct
- lconv' from <locale.h>. */
-
-static char *
-group_number (char *number, size_t numberlen,
- char const *grouping, char const *thousands_sep)
-{
- register char *d;
- size_t grouplen = SIZE_MAX;
- size_t thousands_seplen = strlen (thousands_sep);
- size_t i = numberlen;
-
- /* The maximum possible value for NUMBERLEN is the number of digits
- in the square of the largest uintmax_t, so double the size of
- uintmax_t before converting to a bound. 302 / 1000 is ceil
- (log10 (2.0)). Add 1 for integer division truncation. */
- char buf[2 * sizeof (uintmax_t) * CHAR_BIT * 302 / 1000 + 1];
-
- memcpy (buf, number, numberlen);
- d = number + numberlen;
-
- for (;;)
- {
- unsigned char g = *grouping;
-
- if (g)
- {
- grouplen = g < CHAR_MAX ? g : i;
- grouping++;
- }
-
- if (i < grouplen)
- grouplen = i;
-
- d -= grouplen;
- i -= grouplen;
- memcpy (d, buf + i, grouplen);
- if (i == 0)
- return d;
-
- d -= thousands_seplen;
- memcpy (d, thousands_sep, thousands_seplen);
- }
-}
-
-/* Convert N to a human readable format in BUF, using the options OPTS.
-
- N is expressed in units of FROM_BLOCK_SIZE. FROM_BLOCK_SIZE must
- be nonnegative.
-
- Use units of TO_BLOCK_SIZE in the output number. TO_BLOCK_SIZE
- must be positive.
-
- Use (OPTS & (human_round_to_nearest | human_floor | human_ceiling))
- to determine whether to take the ceiling or floor of any result
- that cannot be expressed exactly.
-
- If (OPTS & human_group_digits), group the thousands digits
- according to the locale, e.g., `1,000,000' in an American English
- locale.
-
- If (OPTS & human_autoscale), deduce the output block size
- automatically; TO_BLOCK_SIZE must be 1 but it has no effect on the
- output. Use powers of 1024 if (OPTS & human_base_1024), and powers
- of 1000 otherwise. For example, assuming powers of 1024, 8500
- would be converted to 8.3, 133456345 to 127, 56990456345 to 53, and
- so on. Numbers smaller than the power aren't modified.
- human_autoscale is normally used together with human_SI.
-
- If (OPTS & human_SI), append an SI prefix indicating which power is
- being used. If in addition (OPTS & human_B), append "B" (if base
- 1000) or "iB" (if base 1024) to the SI prefix. When ((OPTS &
- human_SI) && ! (OPTS & human_autoscale)), TO_BLOCK_SIZE must be a
- power of 1024 or of 1000, depending on (OPTS &
- human_base_1024). */
-
-char *
-human_readable (uintmax_t n, char *buf, int opts,
- uintmax_t from_block_size, uintmax_t to_block_size)
-{
- int inexact_style =
- opts & (human_round_to_nearest | human_floor | human_ceiling);
- unsigned int base = opts & human_base_1024 ? 1024 : 1000;
- uintmax_t amt;
- int tenths;
- int exponent = -1;
- int exponent_max = sizeof power_letter - 1;
- char *p;
- char *psuffix;
- char const *integerlim;
-
- /* 0 means adjusted N == AMT.TENTHS;
- 1 means AMT.TENTHS < adjusted N < AMT.TENTHS + 0.05;
- 2 means adjusted N == AMT.TENTHS + 0.05;
- 3 means AMT.TENTHS + 0.05 < adjusted N < AMT.TENTHS + 0.1. */
- int rounding;
-
- char const *decimal_point = ".";
- size_t decimal_pointlen = 1;
- char const *grouping = "";
- char const *thousands_sep = "";
-#if HAVE_LOCALE_H && HAVE_LOCALECONV
- struct lconv const *l = localeconv ();
- size_t pointlen = strlen (l->decimal_point);
- if (0 < pointlen && pointlen <= MB_LEN_MAX)
- {
- decimal_point = l->decimal_point;
- decimal_pointlen = pointlen;
- }
- grouping = l->grouping;
- if (strlen (l->thousands_sep) <= MB_LEN_MAX)
- thousands_sep = l->thousands_sep;
-#endif
-
- psuffix = buf + LONGEST_HUMAN_READABLE - HUMAN_READABLE_SUFFIX_LENGTH_MAX;
- p = psuffix;
-
- /* Adjust AMT out of FROM_BLOCK_SIZE units and into TO_BLOCK_SIZE
- units. If this can be done exactly with integer arithmetic, do
- not use floating point operations. */
- if (to_block_size <= from_block_size)
- {
- if (from_block_size % to_block_size == 0)
- {
- uintmax_t multiplier = from_block_size / to_block_size;
- amt = n * multiplier;
- if (amt / multiplier == n)
- {
- tenths = 0;
- rounding = 0;
- goto use_integer_arithmetic;
- }
- }
- }
- else if (from_block_size != 0 && to_block_size % from_block_size == 0)
- {
- uintmax_t divisor = to_block_size / from_block_size;
- uintmax_t r10 = (n % divisor) * 10;
- uintmax_t r2 = (r10 % divisor) * 2;
- amt = n / divisor;
- tenths = r10 / divisor;
- rounding = r2 < divisor ? 0 < r2 : 2 + (divisor < r2);
- goto use_integer_arithmetic;
- }
-
- {
- /* Either the result cannot be computed easily using uintmax_t,
- or from_block_size is zero. Fall back on floating point.
- FIXME: This can yield answers that are slightly off. */
-
- long double dto_block_size = to_block_size;
- long double damt = n * (from_block_size / dto_block_size);
- size_t buflen;
- size_t nonintegerlen;
-
- if (! (opts & human_autoscale))
- {
- sprintf (buf, "%.0Lf", adjust_value (inexact_style, damt));
- buflen = strlen (buf);
- nonintegerlen = 0;
- }
- else
- {
- long double e = 1;
- exponent = 0;
-
- do
- {
- e *= base;
- exponent++;
- }
- while (e * base <= damt && exponent < exponent_max);
-
- damt /= e;
-
- sprintf (buf, "%.1Lf", adjust_value (inexact_style, damt));
- buflen = strlen (buf);
- nonintegerlen = decimal_pointlen + 1;
-
- if (1 + nonintegerlen + ! (opts & human_base_1024) < buflen
- || ((opts & human_suppress_point_zero)
- && buf[buflen - 1] == '0'))
- {
- sprintf (buf, "%.0Lf",
- adjust_value (inexact_style, damt * 10) / 10);
- buflen = strlen (buf);
- nonintegerlen = 0;
- }
- }
-
- p = psuffix - buflen;
- memmove (p, buf, buflen);
- integerlim = p + buflen - nonintegerlen;
- }
- goto do_grouping;
-
- use_integer_arithmetic:
- {
- /* The computation can be done exactly, with integer arithmetic.
-
- Use power of BASE notation if requested and if adjusted AMT is
- large enough. */
-
- if (opts & human_autoscale)
- {
- exponent = 0;
-
- if (base <= amt)
- {
- do
- {
- unsigned int r10 = (amt % base) * 10 + tenths;
- unsigned int r2 = (r10 % base) * 2 + (rounding >> 1);
- amt /= base;
- tenths = r10 / base;
- rounding = (r2 < base
- ? (r2 + rounding) != 0
- : 2 + (base < r2 + rounding));
- exponent++;
- }
- while (base <= amt && exponent < exponent_max);
-
- if (amt < 10)
- {
- if (inexact_style == human_round_to_nearest
- ? 2 < rounding + (tenths & 1)
- : inexact_style == human_ceiling && 0 < rounding)
- {
- tenths++;
- rounding = 0;
-
- if (tenths == 10)
- {
- amt++;
- tenths = 0;
- }
- }
-
- if (amt < 10
- && (tenths || ! (opts & human_suppress_point_zero)))
- {
- *--p = '0' + tenths;
- p -= decimal_pointlen;
- memcpy (p, decimal_point, decimal_pointlen);
- tenths = rounding = 0;
- }
- }
- }
- }
-
- if (inexact_style == human_round_to_nearest
- ? 5 < tenths + (0 < rounding + (amt & 1))
- : inexact_style == human_ceiling && 0 < tenths + rounding)
- {
- amt++;
-
- if ((opts & human_autoscale)
- && amt == base && exponent < exponent_max)
- {
- exponent++;
- if (! (opts & human_suppress_point_zero))
- {
- *--p = '0';
- p -= decimal_pointlen;
- memcpy (p, decimal_point, decimal_pointlen);
- }
- amt = 1;
- }
- }
-
- integerlim = p;
-
- do
- {
- int digit = amt % 10;
- *--p = digit + '0';
- }
- while ((amt /= 10) != 0);
- }
-
- do_grouping:
- if (opts & human_group_digits)
- p = group_number (p, integerlim - p, grouping, thousands_sep);
-
- if (opts & human_SI)
- {
- if (exponent < 0)
- {
- uintmax_t power;
- exponent = 0;
- for (power = 1; power < to_block_size; power *= base)
- if (++exponent == exponent_max)
- break;
- }
-
- if (exponent)
- *psuffix++ = (! (opts & human_base_1024) && exponent == 1
- ? 'k'
- : power_letter[exponent]);
-
- if (opts & human_B)
- {
- if ((opts & human_base_1024) && exponent)
- *psuffix++ = 'i';
- *psuffix++ = 'B';
- }
- }
-
- *psuffix = '\0';
-
- return p;
-}
-
-
-/* The default block size used for output. This number may change in
- the future as disks get larger. */
-#ifndef DEFAULT_BLOCK_SIZE
-# define DEFAULT_BLOCK_SIZE 1024
-#endif
-
-static char const *const block_size_args[] = { "human-readable", "si", 0 };
-static int const block_size_opts[] =
- {
- human_autoscale + human_SI + human_base_1024,
- human_autoscale + human_SI
- };
-
-static uintmax_t
-default_block_size (void)
-{
- return getenv ("POSIXLY_CORRECT") ? 512 : DEFAULT_BLOCK_SIZE;
-}
-
-static strtol_error
-humblock (char const *spec, uintmax_t *block_size, int *options)
-{
- int i;
- int opts = 0;
-
- if (! spec
- && ! (spec = getenv ("BLOCK_SIZE"))
- && ! (spec = getenv ("BLOCKSIZE")))
- *block_size = default_block_size ();
- else
- {
- if (*spec == '\'')
- {
- opts |= human_group_digits;
- spec++;
- }
-
- if (0 <= (i = ARGMATCH (spec, block_size_args, block_size_opts)))
- {
- opts |= block_size_opts[i];
- *block_size = 1;
- }
- else
- {
- char *ptr;
- strtol_error e = xstrtoumax (spec, &ptr, 0, block_size,
- "eEgGkKmMpPtTyYzZ0");
- if (e != LONGINT_OK)
- return e;
- for (; ! ('0' <= *spec && *spec <= '9'); spec++)
- if (spec == ptr)
- {
- opts |= human_SI;
- if (ptr[-1] == 'B')
- opts |= human_B;
- if (ptr[-1] != 'B' || ptr[-2] == 'i')
- opts |= human_base_1024;
- break;
- }
- }
- }
-
- *options = opts;
- return LONGINT_OK;
-}
-
-int
-human_options (char const *spec, bool report_errors, uintmax_t *block_size)
-{
- int opts;
- strtol_error e = humblock (spec, block_size, &opts);
- if (*block_size == 0)
- {
- *block_size = default_block_size ();
- e = LONGINT_INVALID;
- }
- if (e != LONGINT_OK && report_errors)
- STRTOL_FATAL_ERROR (spec, _("block size"), e);
- return opts;
-}
diff --git a/contrib/gnu-sort/lib/human.h b/contrib/gnu-sort/lib/human.h
deleted file mode 100644
index b67ba4e..0000000
--- a/contrib/gnu-sort/lib/human.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* human.h -- print human readable file size
-
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
- Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert and Larry McVoy. */
-
-#ifndef HUMAN_H_
-# define HUMAN_H_ 1
-
-# if HAVE_CONFIG_H
-# include <config.h>
-# endif
-
-# include <limits.h>
-# include <stdbool.h>
-
-# if HAVE_STDINT_H
-# include <stdint.h>
-# endif
-# if HAVE_UNISTD_H
-# include <unistd.h>
-# endif
-
-/* A conservative bound on the maximum length of a human-readable string.
- The output can be the square of the largest uintmax_t, so double
- its size before converting to a bound.
- 302 / 1000 is ceil (log10 (2.0)). Add 1 for integer division truncation.
- Also, the output can have a thousands separator between every digit,
- so multiply by MB_LEN_MAX + 1 and then subtract MB_LEN_MAX.
- Finally, append 3, the maximum length of a suffix. */
-# define LONGEST_HUMAN_READABLE \
- ((2 * sizeof (uintmax_t) * CHAR_BIT * 302 / 1000 + 1) * (MB_LEN_MAX + 1) \
- - MB_LEN_MAX + 3)
-
-/* Options for human_readable. */
-enum
-{
- /* Unless otherwise specified these options may be ORed together. */
-
- /* The following three options are mutually exclusive. */
- /* Round to plus infinity (default). */
- human_ceiling = 0,
- /* Round to nearest, ties to even. */
- human_round_to_nearest = 1,
- /* Round to minus infinity. */
- human_floor = 2,
-
- /* Group digits together, e.g. `1,000,000'. This uses the
- locale-defined grouping; the traditional C locale does not group,
- so this has effect only if some other locale is in use. */
- human_group_digits = 4,
-
- /* When autoscaling, suppress ".0" at end. */
- human_suppress_point_zero = 8,
-
- /* Scale output and use SI-style units, ignoring the output block size. */
- human_autoscale = 16,
-
- /* Prefer base 1024 to base 1000. */
- human_base_1024 = 32,
-
- /* Append SI prefix, e.g. "k" or "M". */
- human_SI = 64,
-
- /* Append "B" (if base 1000) or "iB" (if base 1024) to SI prefix. */
- human_B = 128
-};
-
-char *human_readable (uintmax_t, char *, int, uintmax_t, uintmax_t);
-
-int human_options (char const *, bool, uintmax_t *);
-
-#endif /* HUMAN_H_ */
diff --git a/contrib/gnu-sort/lib/inttostr.c b/contrib/gnu-sort/lib/inttostr.c
deleted file mode 100644
index 78a48af..0000000
--- a/contrib/gnu-sort/lib/inttostr.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* inttostr.c -- convert integers to printable strings
-
- Copyright (C) 2001 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert */
-
-#include "inttostr.h"
-
-/* Convert I to a printable string in BUF, which must be at least
- INT_BUFSIZE_BOUND (INTTYPE) bytes long. Return the address of the
- printable string, which need not start at BUF. */
-
-char *
-inttostr (inttype i, char *buf)
-{
- char *p = buf + INT_STRLEN_BOUND (inttype);
- *p = 0;
-
- if (i < 0)
- {
- do
- *--p = '0' - i % 10;
- while ((i /= 10) != 0);
-
- *--p = '-';
- }
- else
- {
- do
- *--p = '0' + i % 10;
- while ((i /= 10) != 0);
- }
-
- return p;
-}
diff --git a/contrib/gnu-sort/lib/inttostr.h b/contrib/gnu-sort/lib/inttostr.h
deleted file mode 100644
index 6f2416b..0000000
--- a/contrib/gnu-sort/lib/inttostr.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* inttostr.h -- convert integers to printable strings
-
- Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#if HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-#include <limits.h>
-
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-/* Upper bound on the string length of an integer converted to string.
- 302 / 1000 is ceil (log10 (2.0)). Subtract 1 for the sign bit;
- add 1 for integer division truncation; add 1 more for a minus sign. */
-#define INT_STRLEN_BOUND(t) ((sizeof (t) * CHAR_BIT - 1) * 302 / 1000 + 2)
-
-#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
-
-char *offtostr (off_t, char *);
-char *imaxtostr (intmax_t, char *);
-char *umaxtostr (uintmax_t, char *);
diff --git a/contrib/gnu-sort/lib/long-options.c b/contrib/gnu-sort/lib/long-options.c
deleted file mode 100644
index 1c4e74a..0000000
--- a/contrib/gnu-sort/lib/long-options.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Utility to accept --help and --version options as unobtrusively as possible.
-
- Copyright (C) 1993, 1994, 1998, 1999, 2000, 2002, 2003, 2004 Free
- Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Jim Meyering. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Specification. */
-#include "long-options.h"
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include "version-etc.h"
-
-static struct option const long_options[] =
-{
- {"help", no_argument, 0, 'h'},
- {"version", no_argument, 0, 'v'},
- {0, 0, 0, 0}
-};
-
-/* Process long options --help and --version, but only if argc == 2.
- Be careful not to gobble up `--'. */
-
-void
-parse_long_options (int argc,
- char **argv,
- const char *command_name,
- const char *package,
- const char *version,
- void (*usage_func) (int),
- /* const char *author1, ...*/ ...)
-{
- int c;
- int saved_opterr;
-
- saved_opterr = opterr;
-
- /* Don't print an error message for unrecognized options. */
- opterr = 0;
-
- if (argc == 2
- && (c = getopt_long (argc, argv, "+", long_options, NULL)) != -1)
- {
- switch (c)
- {
- case 'h':
- (*usage_func) (EXIT_SUCCESS);
-
- case 'v':
- {
- va_list authors;
- va_start (authors, usage_func);
- version_etc_va (stdout, command_name, package, version, authors);
- exit (0);
- }
-
- default:
- /* Don't process any other long-named options. */
- break;
- }
- }
-
- /* Restore previous value. */
- opterr = saved_opterr;
-
- /* Reset this to zero so that getopt internals get initialized from
- the probably-new parameters when/if getopt is called later. */
- optind = 0;
-}
diff --git a/contrib/gnu-sort/lib/long-options.h b/contrib/gnu-sort/lib/long-options.h
deleted file mode 100644
index 50f0c34..0000000
--- a/contrib/gnu-sort/lib/long-options.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* long-options.h -- declaration for --help- and --version-handling function.
- Copyright (C) 1993, 1994, 1998, 1999, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Jim Meyering. */
-
-void parse_long_options (int _argc,
- char **_argv,
- const char *_command_name,
- const char *_package,
- const char *_version,
- void (*_usage) (int),
- /* const char *author1, ...*/ ...);
diff --git a/contrib/gnu-sort/lib/memcoll.c b/contrib/gnu-sort/lib/memcoll.c
deleted file mode 100644
index e777e6a..0000000
--- a/contrib/gnu-sort/lib/memcoll.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Locale-specific memory comparison.
- Copyright (C) 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Contributed by Paul Eggert <eggert@twinsun.com>. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "memcoll.h"
-
-#include <errno.h>
-#include <string.h>
-
-/* Compare S1 (with length S1LEN) and S2 (with length S2LEN) according
- to the LC_COLLATE locale. S1 and S2 do not overlap, and are not
- adjacent. Perhaps temporarily modify the bytes after S1 and S2,
- but restore their original contents before returning. Set errno to an
- error number if there is an error, and to zero otherwise. */
-int
-memcoll (char *s1, size_t s1len, char *s2, size_t s2len)
-{
- int diff;
-
-#if HAVE_STRCOLL
-
- char n1 = s1[s1len];
- char n2 = s2[s2len];
-
- s1[s1len++] = '\0';
- s2[s2len++] = '\0';
-
- while (! (errno = 0, (diff = strcoll (s1, s2)) || errno))
- {
- /* strcoll found no difference, but perhaps it was fooled by NUL
- characters in the data. Work around this problem by advancing
- past the NUL chars. */
- size_t size1 = strlen (s1) + 1;
- size_t size2 = strlen (s2) + 1;
- s1 += size1;
- s2 += size2;
- s1len -= size1;
- s2len -= size2;
-
- if (s1len == 0)
- {
- if (s2len != 0)
- diff = -1;
- break;
- }
- else if (s2len == 0)
- {
- diff = 1;
- break;
- }
- }
-
- s1[s1len - 1] = n1;
- s2[s2len - 1] = n2;
-
-#else
-
- diff = memcmp (s1, s2, s1len < s2len ? s1len : s2len);
- if (! diff)
- diff = s1len < s2len ? -1 : s1len != s2len;
- errno = 0;
-
-#endif
-
- return diff;
-}
diff --git a/contrib/gnu-sort/lib/memcoll.h b/contrib/gnu-sort/lib/memcoll.h
deleted file mode 100644
index 66b2ecb..0000000
--- a/contrib/gnu-sort/lib/memcoll.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Locale-specific memory comparison.
-
- Copyright (C) 1999, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Contributed by Paul Eggert <eggert@twinsun.com>. */
-
-#ifndef MEMCOLL_H_
-# define MEMCOLL_H_ 1
-
-# include <stddef.h>
-
-int memcoll (char *, size_t, char *, size_t);
-
-#endif /* MEMCOLL_H_ */
diff --git a/contrib/gnu-sort/lib/pathmax.h b/contrib/gnu-sort/lib/pathmax.h
deleted file mode 100644
index bdd756e..0000000
--- a/contrib/gnu-sort/lib/pathmax.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Define PATH_MAX somehow. Requires sys/types.h.
- Copyright (C) 1992, 1999, 2001, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef _PATHMAX_H
-# define _PATHMAX_H
-
-# if HAVE_UNISTD_H
-# include <unistd.h>
-# endif
-
-/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
- PATH_MAX but might cause redefinition warnings when sys/param.h is
- later included (as on MORE/BSD 4.3). */
-# if defined _POSIX_VERSION || !defined __GNUC__
-# include <limits.h>
-# endif
-
-# ifndef _POSIX_PATH_MAX
-# define _POSIX_PATH_MAX 255
-# endif
-
-# if !defined PATH_MAX && defined _PC_PATH_MAX
-# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 \
- : pathconf ("/", _PC_PATH_MAX))
-# endif
-
-/* Don't include sys/param.h if it already has been. */
-# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
-# include <sys/param.h>
-# endif
-
-# if !defined PATH_MAX && defined MAXPATHLEN
-# define PATH_MAX MAXPATHLEN
-# endif
-
-# ifndef PATH_MAX
-# define PATH_MAX _POSIX_PATH_MAX
-# endif
-
-#endif /* _PATHMAX_H */
diff --git a/contrib/gnu-sort/lib/physmem.c b/contrib/gnu-sort/lib/physmem.c
deleted file mode 100644
index dc67b57..0000000
--- a/contrib/gnu-sort/lib/physmem.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/* Calculate the size of physical memory.
- Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "physmem.h"
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if HAVE_SYS_PSTAT_H
-# include <sys/pstat.h>
-#endif
-
-#if HAVE_SYS_SYSMP_H
-# include <sys/sysmp.h>
-#endif
-
-#if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H
-# include <sys/sysinfo.h>
-# include <machine/hal_sysinfo.h>
-#endif
-
-#if HAVE_SYS_TABLE_H
-# include <sys/table.h>
-#endif
-
-#include <sys/types.h>
-
-#if HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
-
-#if HAVE_SYS_SYSCTL_H
-# include <sys/sysctl.h>
-#endif
-
-#if HAVE_SYS_SYSTEMCFG_H
-# include <sys/systemcfg.h>
-#endif
-
-#ifdef _WIN32
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-/* MEMORYSTATUSEX is missing from older windows headers, so define
- a local replacement. */
-typedef struct
-{
- DWORD dwLength;
- DWORD dwMemoryLoad;
- DWORDLONG ullTotalPhys;
- DWORDLONG ullAvailPhys;
- DWORDLONG ullTotalPageFile;
- DWORDLONG ullAvailPageFile;
- DWORDLONG ullTotalVirtual;
- DWORDLONG ullAvailVirtual;
- DWORDLONG ullAvailExtendedVirtual;
-} lMEMORYSTATUSEX;
-typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*);
-#endif
-
-#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
-
-/* Return the total amount of physical memory. */
-double
-physmem_total (void)
-{
-#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE
- { /* This works on linux-gnu, solaris2 and cygwin. */
- double pages = sysconf (_SC_PHYS_PAGES);
- double pagesize = sysconf (_SC_PAGESIZE);
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
-#endif
-
-#if HAVE_PSTAT_GETSTATIC
- { /* This works on hpux11. */
- struct pst_static pss;
- if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0))
- {
- double pages = pss.physical_memory;
- double pagesize = pss.page_size;
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
- { /* This works on irix6. */
- struct rminfo realmem;
- if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
- {
- double pagesize = sysconf (_SC_PAGESIZE);
- double pages = realmem.physmem;
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_GETSYSINFO && defined GSI_PHYSMEM
- { /* This works on Tru64 UNIX V4/5. */
- int physmem;
-
- if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem),
- NULL, NULL, NULL) == 1)
- {
- double kbytes = physmem;
-
- if (0 <= kbytes)
- return kbytes * 1024.0;
- }
- }
-#endif
-
-#if HAVE_SYSCTL && defined HW_PHYSMEM
- { /* This works on *bsd and darwin. */
- unsigned int physmem;
- size_t len = sizeof physmem;
- static int mib[2] = { CTL_HW, HW_PHYSMEM };
-
- if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0
- && len == sizeof (physmem))
- return (double) physmem;
- }
-#endif
-
-#if HAVE__SYSTEM_CONFIGURATION
- /* This works on AIX. */
- return _system_configuration.physmem;
-#endif
-
-#if defined _WIN32
- { /* this works on windows */
- PFN_MS_EX pfnex;
- HMODULE h = GetModuleHandle ("kernel32.dll");
-
- if (!h)
- return 0.0;
-
- /* Use GlobalMemoryStatusEx if available. */
- if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
- {
- lMEMORYSTATUSEX lms_ex;
- lms_ex.dwLength = sizeof lms_ex;
- if (!pfnex (&lms_ex))
- return 0.0;
- return (double) lms_ex.ullTotalPhys;
- }
-
- /* Fall back to GlobalMemoryStatus which is always available.
- but returns wrong results for physical memory > 4GB. */
- else
- {
- MEMORYSTATUS ms;
- GlobalMemoryStatus (&ms);
- return (double) ms.dwTotalPhys;
- }
- }
-#endif
-
- /* Guess 64 MB. It's probably an older host, so guess small. */
- return 64 * 1024 * 1024;
-}
-
-/* Return the amount of physical memory available. */
-double
-physmem_available (void)
-{
-#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE
- { /* This works on linux-gnu, solaris2 and cygwin. */
- double pages = sysconf (_SC_AVPHYS_PAGES);
- double pagesize = sysconf (_SC_PAGESIZE);
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
-#endif
-
-#if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC
- { /* This works on hpux11. */
- struct pst_static pss;
- struct pst_dynamic psd;
- if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)
- && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0))
- {
- double pages = psd.psd_free;
- double pagesize = pss.page_size;
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
- { /* This works on irix6. */
- struct rminfo realmem;
- if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
- {
- double pagesize = sysconf (_SC_PAGESIZE);
- double pages = realmem.availrmem;
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_TABLE && defined TBL_VMSTATS
- { /* This works on Tru64 UNIX V4/5. */
- struct tbl_vmstats vmstats;
-
- if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1)
- {
- double pages = vmstats.free_count;
- double pagesize = vmstats.pagesize;
-
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_SYSCTL && defined HW_USERMEM
- { /* This works on *bsd and darwin. */
- unsigned int usermem;
- size_t len = sizeof usermem;
- static int mib[2] = { CTL_HW, HW_USERMEM };
-
- if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0
- && len == sizeof (usermem))
- return (double) usermem;
- }
-#endif
-
-#if defined _WIN32
- { /* this works on windows */
- PFN_MS_EX pfnex;
- HMODULE h = GetModuleHandle ("kernel32.dll");
-
- if (!h)
- return 0.0;
-
- /* Use GlobalMemoryStatusEx if available. */
- if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
- {
- lMEMORYSTATUSEX lms_ex;
- lms_ex.dwLength = sizeof lms_ex;
- if (!pfnex (&lms_ex))
- return 0.0;
- return (double) lms_ex.ullAvailPhys;
- }
-
- /* Fall back to GlobalMemoryStatus which is always available.
- but returns wrong results for physical memory > 4GB */
- else
- {
- MEMORYSTATUS ms;
- GlobalMemoryStatus (&ms);
- return (double) ms.dwAvailPhys;
- }
- }
-#endif
-
- /* Guess 25% of physical memory. */
- return physmem_total () / 4;
-}
-
-
-#if DEBUG
-
-# include <stdio.h>
-# include <stdlib.h>
-
-int
-main (void)
-{
- printf ("%12.f %12.f\n", physmem_total (), physmem_available ());
- exit (0);
-}
-
-#endif /* DEBUG */
-
-/*
-Local Variables:
-compile-command: "gcc -DDEBUG -DHAVE_CONFIG_H -I.. -g -O -Wall -W physmem.c"
-End:
-*/
diff --git a/contrib/gnu-sort/lib/physmem.h b/contrib/gnu-sort/lib/physmem.h
deleted file mode 100644
index 67f880c..0000000
--- a/contrib/gnu-sort/lib/physmem.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Calculate the size of physical memory.
-
- Copyright (C) 2000, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert. */
-
-#ifndef PHYSMEM_H_
-# define PHYSMEM_H_ 1
-
-double physmem_total (void);
-double physmem_available (void);
-
-#endif /* PHYSMEM_H_ */
diff --git a/contrib/gnu-sort/lib/posixver.c b/contrib/gnu-sort/lib/posixver.c
deleted file mode 100644
index 754d7ac..0000000
--- a/contrib/gnu-sort/lib/posixver.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Which POSIX version to conform to, for utilities.
-
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "posixver.h"
-
-#include <limits.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifndef _POSIX2_VERSION
-# define _POSIX2_VERSION 0
-#endif
-
-#ifndef DEFAULT_POSIX2_VERSION
-# define DEFAULT_POSIX2_VERSION _POSIX2_VERSION
-#endif
-
-/* The POSIX version that utilities should conform to. The default is
- specified by the system. */
-
-int
-posix2_version (void)
-{
- long int v = DEFAULT_POSIX2_VERSION;
- char const *s = getenv ("_POSIX2_VERSION");
-
- if (s && *s)
- {
- char *e;
- long int i = strtol (s, &e, 10);
- if (! *e)
- v = i;
- }
-
- return v < INT_MIN ? INT_MIN : v < INT_MAX ? v : INT_MAX;
-}
diff --git a/contrib/gnu-sort/lib/posixver.h b/contrib/gnu-sort/lib/posixver.h
deleted file mode 100644
index b64f6a2..0000000
--- a/contrib/gnu-sort/lib/posixver.h
+++ /dev/null
@@ -1 +0,0 @@
-int posix2_version (void);
diff --git a/contrib/gnu-sort/lib/quote.c b/contrib/gnu-sort/lib/quote.c
deleted file mode 100644
index 5f11d83..0000000
--- a/contrib/gnu-sort/lib/quote.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* quote.c - quote arguments for output
- Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert <eggert@twinsun.com> */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "quotearg.h"
-#include "quote.h"
-
-/* Return an unambiguous printable representation of NAME,
- allocated in slot N, suitable for diagnostics. */
-char const *
-quote_n (int n, char const *name)
-{
- return quotearg_n_style (n, locale_quoting_style, name);
-}
-
-/* Return an unambiguous printable representation of NAME,
- suitable for diagnostics. */
-char const *
-quote (char const *name)
-{
- return quote_n (0, name);
-}
diff --git a/contrib/gnu-sort/lib/quote.h b/contrib/gnu-sort/lib/quote.h
deleted file mode 100644
index 682f9d1..0000000
--- a/contrib/gnu-sort/lib/quote.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* quote.h - prototypes for quote.c
-
- Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software
- Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-char const *quote_n (int n, char const *name);
-char const *quote (char const *name);
diff --git a/contrib/gnu-sort/lib/quotearg.c b/contrib/gnu-sort/lib/quotearg.c
deleted file mode 100644
index 64fa676..0000000
--- a/contrib/gnu-sort/lib/quotearg.c
+++ /dev/null
@@ -1,673 +0,0 @@
-/* quotearg.c - quote arguments for output
-
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Free Software
- Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert <eggert@twinsun.com> */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "quotearg.h"
-
-#include "xalloc.h"
-
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-#define N_(msgid) msgid
-
-#if HAVE_WCHAR_H
-
-/* BSD/OS 4.1 wchar.h requires FILE and struct tm to be declared. */
-# include <stdio.h>
-# include <time.h>
-
-# include <wchar.h>
-#endif
-
-#if !HAVE_MBRTOWC
-/* Disable multibyte processing entirely. Since MB_CUR_MAX is 1, the
- other macros are defined only for documentation and to satisfy C
- syntax. */
-# undef MB_CUR_MAX
-# define MB_CUR_MAX 1
-# define mbrtowc(pwc, s, n, ps) ((*(pwc) = *(s)) != 0)
-# define iswprint(wc) isprint ((unsigned char) (wc))
-# undef HAVE_MBSINIT
-#endif
-
-#if !defined mbsinit && !HAVE_MBSINIT
-# define mbsinit(ps) 1
-#endif
-
-#ifndef iswprint
-# if HAVE_WCTYPE_H
-# include <wctype.h>
-# endif
-# if !defined iswprint && !HAVE_ISWPRINT
-# define iswprint(wc) 1
-# endif
-#endif
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
-#define INT_BITS (sizeof (int) * CHAR_BIT)
-
-struct quoting_options
-{
- /* Basic quoting style. */
- enum quoting_style style;
-
- /* Quote the characters indicated by this bit vector even if the
- quoting style would not normally require them to be quoted. */
- int quote_these_too[(UCHAR_MAX / INT_BITS) + 1];
-};
-
-/* Names of quoting styles. */
-char const *const quoting_style_args[] =
-{
- "literal",
- "shell",
- "shell-always",
- "c",
- "escape",
- "locale",
- "clocale",
- 0
-};
-
-/* Correspondences to quoting style names. */
-enum quoting_style const quoting_style_vals[] =
-{
- literal_quoting_style,
- shell_quoting_style,
- shell_always_quoting_style,
- c_quoting_style,
- escape_quoting_style,
- locale_quoting_style,
- clocale_quoting_style
-};
-
-/* The default quoting options. */
-static struct quoting_options default_quoting_options;
-
-/* Allocate a new set of quoting options, with contents initially identical
- to O if O is not null, or to the default if O is null.
- It is the caller's responsibility to free the result. */
-struct quoting_options *
-clone_quoting_options (struct quoting_options *o)
-{
- int e = errno;
- struct quoting_options *p = xmalloc (sizeof *p);
- *p = *(o ? o : &default_quoting_options);
- errno = e;
- return p;
-}
-
-/* Get the value of O's quoting style. If O is null, use the default. */
-enum quoting_style
-get_quoting_style (struct quoting_options *o)
-{
- return (o ? o : &default_quoting_options)->style;
-}
-
-/* In O (or in the default if O is null),
- set the value of the quoting style to S. */
-void
-set_quoting_style (struct quoting_options *o, enum quoting_style s)
-{
- (o ? o : &default_quoting_options)->style = s;
-}
-
-/* In O (or in the default if O is null),
- set the value of the quoting options for character C to I.
- Return the old value. Currently, the only values defined for I are
- 0 (the default) and 1 (which means to quote the character even if
- it would not otherwise be quoted). */
-int
-set_char_quoting (struct quoting_options *o, char c, int i)
-{
- unsigned char uc = c;
- int *p = (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS;
- int shift = uc % INT_BITS;
- int r = (*p >> shift) & 1;
- *p ^= ((i & 1) ^ r) << shift;
- return r;
-}
-
-/* MSGID approximates a quotation mark. Return its translation if it
- has one; otherwise, return either it or "\"", depending on S. */
-static char const *
-gettext_quote (char const *msgid, enum quoting_style s)
-{
- char const *translation = _(msgid);
- if (translation == msgid && s == clocale_quoting_style)
- translation = "\"";
- return translation;
-}
-
-/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
- argument ARG (of size ARGSIZE), using QUOTING_STYLE and the
- non-quoting-style part of O to control quoting.
- Terminate the output with a null character, and return the written
- size of the output, not counting the terminating null.
- If BUFFERSIZE is too small to store the output string, return the
- value that would have been returned had BUFFERSIZE been large enough.
- If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE.
-
- This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG,
- ARGSIZE, O), except it uses QUOTING_STYLE instead of the quoting
- style specified by O, and O may not be null. */
-
-static size_t
-quotearg_buffer_restyled (char *buffer, size_t buffersize,
- char const *arg, size_t argsize,
- enum quoting_style quoting_style,
- struct quoting_options const *o)
-{
- size_t i;
- size_t len = 0;
- char const *quote_string = 0;
- size_t quote_string_len = 0;
- bool backslash_escapes = false;
- bool unibyte_locale = MB_CUR_MAX == 1;
-
-#define STORE(c) \
- do \
- { \
- if (len < buffersize) \
- buffer[len] = (c); \
- len++; \
- } \
- while (0)
-
- switch (quoting_style)
- {
- case c_quoting_style:
- STORE ('"');
- backslash_escapes = true;
- quote_string = "\"";
- quote_string_len = 1;
- break;
-
- case escape_quoting_style:
- backslash_escapes = true;
- break;
-
- case locale_quoting_style:
- case clocale_quoting_style:
- {
- /* Get translations for open and closing quotation marks.
-
- The message catalog should translate "`" to a left
- quotation mark suitable for the locale, and similarly for
- "'". If the catalog has no translation,
- locale_quoting_style quotes `like this', and
- clocale_quoting_style quotes "like this".
-
- For example, an American English Unicode locale should
- translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
- should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
- MARK). A British English Unicode locale should instead
- translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
- U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. */
-
- char const *left = gettext_quote (N_("`"), quoting_style);
- char const *right = gettext_quote (N_("'"), quoting_style);
- for (quote_string = left; *quote_string; quote_string++)
- STORE (*quote_string);
- backslash_escapes = true;
- quote_string = right;
- quote_string_len = strlen (quote_string);
- }
- break;
-
- case shell_always_quoting_style:
- STORE ('\'');
- quote_string = "'";
- quote_string_len = 1;
- break;
-
- default:
- break;
- }
-
- for (i = 0; ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize); i++)
- {
- unsigned char c;
- unsigned char esc;
-
- if (backslash_escapes
- && quote_string_len
- && i + quote_string_len <= argsize
- && memcmp (arg + i, quote_string, quote_string_len) == 0)
- STORE ('\\');
-
- c = arg[i];
- switch (c)
- {
- case '\0':
- if (backslash_escapes)
- {
- STORE ('\\');
- STORE ('0');
- STORE ('0');
- c = '0';
- }
- break;
-
- case '?':
- switch (quoting_style)
- {
- case shell_quoting_style:
- goto use_shell_always_quoting_style;
-
- case c_quoting_style:
- if (i + 2 < argsize && arg[i + 1] == '?')
- switch (arg[i + 2])
- {
- case '!': case '\'':
- case '(': case ')': case '-': case '/':
- case '<': case '=': case '>':
- /* Escape the second '?' in what would otherwise be
- a trigraph. */
- c = arg[i + 2];
- i += 2;
- STORE ('?');
- STORE ('\\');
- STORE ('?');
- break;
- }
- break;
-
- default:
- break;
- }
- break;
-
- case '\a': esc = 'a'; goto c_escape;
- case '\b': esc = 'b'; goto c_escape;
- case '\f': esc = 'f'; goto c_escape;
- case '\n': esc = 'n'; goto c_and_shell_escape;
- case '\r': esc = 'r'; goto c_and_shell_escape;
- case '\t': esc = 't'; goto c_and_shell_escape;
- case '\v': esc = 'v'; goto c_escape;
- case '\\': esc = c; goto c_and_shell_escape;
-
- c_and_shell_escape:
- if (quoting_style == shell_quoting_style)
- goto use_shell_always_quoting_style;
- c_escape:
- if (backslash_escapes)
- {
- c = esc;
- goto store_escape;
- }
- break;
-
- case '{': case '}': /* sometimes special if isolated */
- if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
- break;
- /* Fall through. */
- case '#': case '~':
- if (i != 0)
- break;
- /* Fall through. */
- case ' ':
- case '!': /* special in bash */
- case '"': case '$': case '&':
- case '(': case ')': case '*': case ';':
- case '<':
- case '=': /* sometimes special in 0th or (with "set -k") later args */
- case '>': case '[':
- case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
- case '`': case '|':
- /* A shell special character. In theory, '$' and '`' could
- be the first bytes of multibyte characters, which means
- we should check them with mbrtowc, but in practice this
- doesn't happen so it's not worth worrying about. */
- if (quoting_style == shell_quoting_style)
- goto use_shell_always_quoting_style;
- break;
-
- case '\'':
- switch (quoting_style)
- {
- case shell_quoting_style:
- goto use_shell_always_quoting_style;
-
- case shell_always_quoting_style:
- STORE ('\'');
- STORE ('\\');
- STORE ('\'');
- break;
-
- default:
- break;
- }
- break;
-
- case '%': case '+': case ',': case '-': case '.': case '/':
- case '0': case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9': case ':':
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
- case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
- case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
- case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
- case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
- case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
- case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
- case 'o': case 'p': case 'q': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
- /* These characters don't cause problems, no matter what the
- quoting style is. They cannot start multibyte sequences. */
- break;
-
- default:
- /* If we have a multibyte sequence, copy it until we reach
- its end, find an error, or come back to the initial shift
- state. For C-like styles, if the sequence has
- unprintable characters, escape the whole sequence, since
- we can't easily escape single characters within it. */
- {
- /* Length of multibyte sequence found so far. */
- size_t m;
-
- bool printable;
-
- if (unibyte_locale)
- {
- m = 1;
- printable = isprint (c) != 0;
- }
- else
- {
- mbstate_t mbstate;
- memset (&mbstate, 0, sizeof mbstate);
-
- m = 0;
- printable = true;
- if (argsize == SIZE_MAX)
- argsize = strlen (arg);
-
- do
- {
- wchar_t w;
- size_t bytes = mbrtowc (&w, &arg[i + m],
- argsize - (i + m), &mbstate);
- if (bytes == 0)
- break;
- else if (bytes == (size_t) -1)
- {
- printable = false;
- break;
- }
- else if (bytes == (size_t) -2)
- {
- printable = false;
- while (i + m < argsize && arg[i + m])
- m++;
- break;
- }
- else
- {
- /* Work around a bug with older shells that "see" a '\'
- that is really the 2nd byte of a multibyte character.
- In practice the problem is limited to ASCII
- chars >= '@' that are shell special chars. */
- if ('[' == 0x5b && quoting_style == shell_quoting_style)
- {
- size_t j;
- for (j = 1; j < bytes; j++)
- switch (arg[i + m + j])
- {
- case '[': case '\\': case '^':
- case '`': case '|':
- goto use_shell_always_quoting_style;
- }
- }
-
- if (! iswprint (w))
- printable = false;
- m += bytes;
- }
- }
- while (! mbsinit (&mbstate));
- }
-
- if (1 < m || (backslash_escapes && ! printable))
- {
- /* Output a multibyte sequence, or an escaped
- unprintable unibyte character. */
- size_t ilim = i + m;
-
- for (;;)
- {
- if (backslash_escapes && ! printable)
- {
- STORE ('\\');
- STORE ('0' + (c >> 6));
- STORE ('0' + ((c >> 3) & 7));
- c = '0' + (c & 7);
- }
- if (ilim <= i + 1)
- break;
- STORE (c);
- c = arg[++i];
- }
-
- goto store_c;
- }
- }
- }
-
- if (! (backslash_escapes
- && o->quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))))
- goto store_c;
-
- store_escape:
- STORE ('\\');
-
- store_c:
- STORE (c);
- }
-
- if (i == 0 && quoting_style == shell_quoting_style)
- goto use_shell_always_quoting_style;
-
- if (quote_string)
- for (; *quote_string; quote_string++)
- STORE (*quote_string);
-
- if (len < buffersize)
- buffer[len] = '\0';
- return len;
-
- use_shell_always_quoting_style:
- return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
- shell_always_quoting_style, o);
-}
-
-/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
- argument ARG (of size ARGSIZE), using O to control quoting.
- If O is null, use the default.
- Terminate the output with a null character, and return the written
- size of the output, not counting the terminating null.
- If BUFFERSIZE is too small to store the output string, return the
- value that would have been returned had BUFFERSIZE been large enough.
- If ARGSIZE is SIZE_MAX, use the string length of the argument for
- ARGSIZE. */
-size_t
-quotearg_buffer (char *buffer, size_t buffersize,
- char const *arg, size_t argsize,
- struct quoting_options const *o)
-{
- struct quoting_options const *p = o ? o : &default_quoting_options;
- int e = errno;
- size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
- p->style, p);
- errno = e;
- return r;
-}
-
-/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly
- allocated storage containing the quoted string. */
-char *
-quotearg_alloc (char const *arg, size_t argsize,
- struct quoting_options const *o)
-{
- int e = errno;
- size_t bufsize = quotearg_buffer (0, 0, arg, argsize, o) + 1;
- char *buf = xmalloc (bufsize);
- quotearg_buffer (buf, bufsize, arg, argsize, o);
- errno = e;
- return buf;
-}
-
-/* Use storage slot N to return a quoted version of argument ARG.
- ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a
- null-terminated string.
- OPTIONS specifies the quoting options.
- The returned value points to static storage that can be
- reused by the next call to this function with the same value of N.
- N must be nonnegative. N is deliberately declared with type "int"
- to allow for future extensions (using negative values). */
-static char *
-quotearg_n_options (int n, char const *arg, size_t argsize,
- struct quoting_options const *options)
-{
- int e = errno;
-
- /* Preallocate a slot 0 buffer, so that the caller can always quote
- one small component of a "memory exhausted" message in slot 0. */
- static char slot0[256];
- static unsigned int nslots = 1;
- unsigned int n0 = n;
- struct slotvec
- {
- size_t size;
- char *val;
- };
- static struct slotvec slotvec0 = {sizeof slot0, slot0};
- static struct slotvec *slotvec = &slotvec0;
-
- if (n < 0)
- abort ();
-
- if (nslots <= n0)
- {
- unsigned int n1 = n0 + 1;
-
- if (xalloc_oversized (n1, sizeof *slotvec))
- xalloc_die ();
-
- if (slotvec == &slotvec0)
- {
- slotvec = xmalloc (sizeof *slotvec);
- *slotvec = slotvec0;
- }
- slotvec = xrealloc (slotvec, n1 * sizeof *slotvec);
- memset (slotvec + nslots, 0, (n1 - nslots) * sizeof *slotvec);
- nslots = n1;
- }
-
- {
- size_t size = slotvec[n].size;
- char *val = slotvec[n].val;
- size_t qsize = quotearg_buffer (val, size, arg, argsize, options);
-
- if (size <= qsize)
- {
- slotvec[n].size = size = qsize + 1;
- if (val != slot0)
- free (val);
- slotvec[n].val = val = xmalloc (size);
- quotearg_buffer (val, size, arg, argsize, options);
- }
-
- errno = e;
- return val;
- }
-}
-
-char *
-quotearg_n (int n, char const *arg)
-{
- return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options);
-}
-
-char *
-quotearg (char const *arg)
-{
- return quotearg_n (0, arg);
-}
-
-/* Return quoting options for STYLE, with no extra quoting. */
-static struct quoting_options
-quoting_options_from_style (enum quoting_style style)
-{
- struct quoting_options o;
- o.style = style;
- memset (o.quote_these_too, 0, sizeof o.quote_these_too);
- return o;
-}
-
-char *
-quotearg_n_style (int n, enum quoting_style s, char const *arg)
-{
- struct quoting_options const o = quoting_options_from_style (s);
- return quotearg_n_options (n, arg, SIZE_MAX, &o);
-}
-
-char *
-quotearg_n_style_mem (int n, enum quoting_style s,
- char const *arg, size_t argsize)
-{
- struct quoting_options const o = quoting_options_from_style (s);
- return quotearg_n_options (n, arg, argsize, &o);
-}
-
-char *
-quotearg_style (enum quoting_style s, char const *arg)
-{
- return quotearg_n_style (0, s, arg);
-}
-
-char *
-quotearg_char (char const *arg, char ch)
-{
- struct quoting_options options;
- options = default_quoting_options;
- set_char_quoting (&options, ch, 1);
- return quotearg_n_options (0, arg, SIZE_MAX, &options);
-}
-
-char *
-quotearg_colon (char const *arg)
-{
- return quotearg_char (arg, ':');
-}
diff --git a/contrib/gnu-sort/lib/quotearg.h b/contrib/gnu-sort/lib/quotearg.h
deleted file mode 100644
index 14dc316..0000000
--- a/contrib/gnu-sort/lib/quotearg.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* quotearg.h - quote arguments for output
-
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Free Software
- Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert <eggert@twinsun.com> */
-
-#ifndef QUOTEARG_H_
-# define QUOTEARG_H_ 1
-
-# include <stddef.h>
-
-/* Basic quoting styles. */
-enum quoting_style
- {
- /* Output names as-is (ls --quoting-style=literal). */
- literal_quoting_style,
-
- /* Quote names for the shell if they contain shell metacharacters
- or would cause ambiguous output (ls --quoting-style=shell). */
- shell_quoting_style,
-
- /* Quote names for the shell, even if they would normally not
- require quoting (ls --quoting-style=shell-always). */
- shell_always_quoting_style,
-
- /* Quote names as for a C language string (ls --quoting-style=c). */
- c_quoting_style,
-
- /* Like c_quoting_style except omit the surrounding double-quote
- characters (ls --quoting-style=escape). */
- escape_quoting_style,
-
- /* Like clocale_quoting_style, but quote `like this' instead of
- "like this" in the default C locale (ls --quoting-style=locale). */
- locale_quoting_style,
-
- /* Like c_quoting_style except use quotation marks appropriate for
- the locale (ls --quoting-style=clocale). */
- clocale_quoting_style
- };
-
-/* For now, --quoting-style=literal is the default, but this may change. */
-# ifndef DEFAULT_QUOTING_STYLE
-# define DEFAULT_QUOTING_STYLE literal_quoting_style
-# endif
-
-/* Names of quoting styles and their corresponding values. */
-extern char const *const quoting_style_args[];
-extern enum quoting_style const quoting_style_vals[];
-
-struct quoting_options;
-
-/* The functions listed below set and use a hidden variable
- that contains the default quoting style options. */
-
-/* Allocate a new set of quoting options, with contents initially identical
- to O if O is not null, or to the default if O is null.
- It is the caller's responsibility to free the result. */
-struct quoting_options *clone_quoting_options (struct quoting_options *o);
-
-/* Get the value of O's quoting style. If O is null, use the default. */
-enum quoting_style get_quoting_style (struct quoting_options *o);
-
-/* In O (or in the default if O is null),
- set the value of the quoting style to S. */
-void set_quoting_style (struct quoting_options *o, enum quoting_style s);
-
-/* In O (or in the default if O is null),
- set the value of the quoting options for character C to I.
- Return the old value. Currently, the only values defined for I are
- 0 (the default) and 1 (which means to quote the character even if
- it would not otherwise be quoted). */
-int set_char_quoting (struct quoting_options *o, char c, int i);
-
-/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
- argument ARG (of size ARGSIZE), using O to control quoting.
- If O is null, use the default.
- Terminate the output with a null character, and return the written
- size of the output, not counting the terminating null.
- If BUFFERSIZE is too small to store the output string, return the
- value that would have been returned had BUFFERSIZE been large enough.
- If ARGSIZE is -1, use the string length of the argument for ARGSIZE. */
-size_t quotearg_buffer (char *buffer, size_t buffersize,
- char const *arg, size_t argsize,
- struct quoting_options const *o);
-
-/* Like quotearg_buffer, except return the result in a newly allocated
- buffer. It is the caller's responsibility to free the result. */
-char *quotearg_alloc (char const *arg, size_t argsize,
- struct quoting_options const *o);
-
-/* Use storage slot N to return a quoted version of the string ARG.
- Use the default quoting options.
- The returned value points to static storage that can be
- reused by the next call to this function with the same value of N.
- N must be nonnegative. */
-char *quotearg_n (int n, char const *arg);
-
-/* Equivalent to quotearg_n (0, ARG). */
-char *quotearg (char const *arg);
-
-/* Use style S and storage slot N to return a quoted version of the string ARG.
- This is like quotearg_n (N, ARG), except that it uses S with no other
- options to specify the quoting method. */
-char *quotearg_n_style (int n, enum quoting_style s, char const *arg);
-
-/* Use style S and storage slot N to return a quoted version of the
- argument ARG of size ARGSIZE. This is like quotearg_n_style
- (N, S, ARG), except it can quote null bytes. */
-char *quotearg_n_style_mem (int n, enum quoting_style s,
- char const *arg, size_t argsize);
-
-/* Equivalent to quotearg_n_style (0, S, ARG). */
-char *quotearg_style (enum quoting_style s, char const *arg);
-
-/* Like quotearg (ARG), except also quote any instances of CH. */
-char *quotearg_char (char const *arg, char ch);
-
-/* Equivalent to quotearg_char (ARG, ':'). */
-char *quotearg_colon (char const *arg);
-
-#endif /* !QUOTEARG_H_ */
diff --git a/contrib/gnu-sort/lib/stat-macros.h b/contrib/gnu-sort/lib/stat-macros.h
deleted file mode 100644
index facbabb..0000000
--- a/contrib/gnu-sort/lib/stat-macros.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/* stat-related macros
-
- Copyright (C) 1993, 1994, 2001, 2002, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert and Jim Meyering. */
-
-#ifndef STAT_MACROS_H
-# define STAT_MACROS_H 1
-
-# if ! defined S_ISREG && ! defined S_IFREG
-# error "you must include <sys/stat.h> before including this file"
-# endif
-
-# ifndef S_IFMT
-# define S_IFMT 0170000
-# endif
-
-# if STAT_MACROS_BROKEN
-# undef S_ISBLK
-# undef S_ISCHR
-# undef S_ISDIR
-# undef S_ISDOOR
-# undef S_ISFIFO
-# undef S_ISLNK
-# undef S_ISNAM
-# undef S_ISMPB
-# undef S_ISMPC
-# undef S_ISNWK
-# undef S_ISREG
-# undef S_ISSOCK
-# endif
-
-
-# ifndef S_ISBLK
-# ifdef S_IFBLK
-# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
-# else
-# define S_ISBLK(m) 0
-# endif
-# endif
-
-# ifndef S_ISCHR
-# ifdef S_IFCHR
-# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-# else
-# define S_ISCHR(m) 0
-# endif
-# endif
-
-# ifndef S_ISDIR
-# ifdef S_IFDIR
-# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-# else
-# define S_ISDIR(m) 0
-# endif
-# endif
-
-# ifndef S_ISDOOR /* Solaris 2.5 and up */
-# ifdef S_IFDOOR
-# define S_ISDOOR(m) (((m) & S_IFMT) == S_IFDOOR)
-# else
-# define S_ISDOOR(m) 0
-# endif
-# endif
-
-# ifndef S_ISFIFO
-# ifdef S_IFIFO
-# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
-# else
-# define S_ISFIFO(m) 0
-# endif
-# endif
-
-# ifndef S_ISLNK
-# ifdef S_IFLNK
-# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-# else
-# define S_ISLNK(m) 0
-# endif
-# endif
-
-# ifndef S_ISMPB /* V7 */
-# ifdef S_IFMPB
-# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
-# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
-# else
-# define S_ISMPB(m) 0
-# define S_ISMPC(m) 0
-# endif
-# endif
-
-# ifndef S_ISNAM /* Xenix */
-# ifdef S_IFNAM
-# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
-# else
-# define S_ISNAM(m) 0
-# endif
-# endif
-
-# ifndef S_ISNWK /* HP/UX */
-# ifdef S_IFNWK
-# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
-# else
-# define S_ISNWK(m) 0
-# endif
-# endif
-
-# ifndef S_ISREG
-# ifdef S_IFREG
-# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-# else
-# define S_ISREG(m) 0
-# endif
-# endif
-
-# ifndef S_ISSOCK
-# ifdef S_IFSOCK
-# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
-# else
-# define S_ISSOCK(m) 0
-# endif
-# endif
-
-
-# ifndef S_TYPEISMQ
-# define S_TYPEISMQ(p) 0
-# endif
-
-# ifndef S_TYPEISTMO
-# define S_TYPEISTMO(p) 0
-# endif
-
-
-# ifndef S_TYPEISSEM
-# ifdef S_INSEM
-# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
-# else
-# define S_TYPEISSEM(p) 0
-# endif
-# endif
-
-# ifndef S_TYPEISSHM
-# ifdef S_INSHD
-# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
-# else
-# define S_TYPEISSHM(p) 0
-# endif
-# endif
-
-/* contiguous */
-# ifndef S_ISCTG
-# define S_ISCTG(p) 0
-# endif
-
-/* Cray DMF (data migration facility): off line, with data */
-# ifndef S_ISOFD
-# define S_ISOFD(p) 0
-# endif
-
-/* Cray DMF (data migration facility): off line, with no data */
-# ifndef S_ISOFL
-# define S_ISOFL(p) 0
-# endif
-
-/* If any of the following are undefined,
- define them to their de facto standard values. */
-# if !S_ISUID
-# define S_ISUID 04000
-# endif
-# if !S_ISGID
-# define S_ISGID 02000
-# endif
-
-/* S_ISVTX is a common extension to POSIX. */
-# ifndef S_ISVTX
-# define S_ISVTX 01000
-# endif
-
-# if !S_IRUSR && S_IREAD
-# define S_IRUSR S_IREAD
-# endif
-# if !S_IRUSR
-# define S_IRUSR 00400
-# endif
-# if !S_IRGRP
-# define S_IRGRP (S_IRUSR >> 3)
-# endif
-# if !S_IROTH
-# define S_IROTH (S_IRUSR >> 6)
-# endif
-
-# if !S_IWUSR && S_IWRITE
-# define S_IWUSR S_IWRITE
-# endif
-# if !S_IWUSR
-# define S_IWUSR 00200
-# endif
-# if !S_IWGRP
-# define S_IWGRP (S_IWUSR >> 3)
-# endif
-# if !S_IWOTH
-# define S_IWOTH (S_IWUSR >> 6)
-# endif
-
-# if !S_IXUSR && S_IEXEC
-# define S_IXUSR S_IEXEC
-# endif
-# if !S_IXUSR
-# define S_IXUSR 00100
-# endif
-# if !S_IXGRP
-# define S_IXGRP (S_IXUSR >> 3)
-# endif
-# if !S_IXOTH
-# define S_IXOTH (S_IXUSR >> 6)
-# endif
-
-# if !S_IRWXU
-# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
-# endif
-# if !S_IRWXG
-# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
-# endif
-# if !S_IRWXO
-# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
-# endif
-
-/* S_IXUGO is a common extension to POSIX. */
-# if !S_IXUGO
-# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
-# endif
-
-# ifndef S_IRWXUGO
-# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
-# endif
-
-/* All the mode bits that can be affected by chmod. */
-# define CHMOD_MODE_BITS \
- (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
-
-#endif /* STAT_MACROS_H */
diff --git a/contrib/gnu-sort/lib/stdio-safer.h b/contrib/gnu-sort/lib/stdio-safer.h
deleted file mode 100644
index 8a22f12..0000000
--- a/contrib/gnu-sort/lib/stdio-safer.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Invoke stdio functions, but avoid some glitches.
-
- Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert. */
-
-#include <stdio.h>
-
-FILE *fopen_safer (char const *, char const *);
diff --git a/contrib/gnu-sort/lib/strnlen.c b/contrib/gnu-sort/lib/strnlen.c
deleted file mode 100644
index c9f3898..0000000
--- a/contrib/gnu-sort/lib/strnlen.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Find the length of STRING, but scan at most MAXLEN characters.
- Copyright (C) 1996, 1997, 1998, 2000-2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-#undef strnlen
-
-#include <string.h>
-
-#undef __strnlen
-#undef strnlen
-
-#ifndef _LIBC
-# define strnlen rpl_strnlen
-#endif
-
-#ifndef weak_alias
-# define __strnlen strnlen
-#endif
-
-/* Find the length of STRING, but scan at most MAXLEN characters.
- If no '\0' terminator is found in that many characters, return MAXLEN. */
-
-size_t
-__strnlen (const char *string, size_t maxlen)
-{
- const char *end = memchr (string, '\0', maxlen);
- return end ? (size_t) (end - string) : maxlen;
-}
-#ifdef weak_alias
-weak_alias (__strnlen, strnlen)
-#endif
diff --git a/contrib/gnu-sort/lib/timespec.h b/contrib/gnu-sort/lib/timespec.h
deleted file mode 100644
index 2c32a23..0000000
--- a/contrib/gnu-sort/lib/timespec.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* timespec -- System time interface
-
- Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#if ! defined TIMESPEC_H
-# define TIMESPEC_H
-
-/* You must include config.h before including this file. */
-
-# include <sys/types.h>
-# if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-# else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-# endif
-
-# if ! HAVE_STRUCT_TIMESPEC
-/* Some systems don't define this struct, e.g., AIX 4.1, Ultrix 4.3. */
-struct timespec
-{
- time_t tv_sec;
- long tv_nsec;
-};
-# endif
-
-# ifdef ST_MTIM_NSEC
-# define ST_TIME_CMP_NS(a, b, ns) ((a).ns < (b).ns ? -1 : (a).ns > (b).ns)
-# else
-# define ST_TIME_CMP_NS(a, b, ns) 0
-# endif
-# define ST_TIME_CMP(a, b, s, ns) \
- ((a).s < (b).s ? -1 : (a).s > (b).s ? 1 : ST_TIME_CMP_NS(a, b, ns))
-# define ATIME_CMP(a, b) ST_TIME_CMP (a, b, st_atime, st_atim.ST_MTIM_NSEC)
-# define CTIME_CMP(a, b) ST_TIME_CMP (a, b, st_ctime, st_ctim.ST_MTIM_NSEC)
-# define MTIME_CMP(a, b) ST_TIME_CMP (a, b, st_mtime, st_mtim.ST_MTIM_NSEC)
-
-# ifdef ST_MTIM_NSEC
-# define TIMESPEC_NS(timespec) ((timespec).ST_MTIM_NSEC)
-# else
-# define TIMESPEC_NS(timespec) 0
-# endif
-
-# if ! HAVE_DECL_NANOSLEEP
-/* Don't specify a prototype here. Some systems (e.g., OSF) declare
- nanosleep with a conflicting one (const-less first parameter). */
-int nanosleep ();
-# endif
-
-int gettime (struct timespec *);
-int settime (struct timespec const *);
-
-#endif
diff --git a/contrib/gnu-sort/lib/umaxtostr.c b/contrib/gnu-sort/lib/umaxtostr.c
deleted file mode 100644
index 4f49a7f..0000000
--- a/contrib/gnu-sort/lib/umaxtostr.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#define inttostr umaxtostr
-#define inttype uintmax_t
-#include "inttostr.c"
diff --git a/contrib/gnu-sort/lib/unistd-safer.h b/contrib/gnu-sort/lib/unistd-safer.h
deleted file mode 100644
index 2976e9d..0000000
--- a/contrib/gnu-sort/lib/unistd-safer.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Invoke unistd functions, but avoid some glitches.
-
- Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert. */
-
-int dup_safer (int);
diff --git a/contrib/gnu-sort/lib/version-etc.c b/contrib/gnu-sort/lib/version-etc.c
deleted file mode 100644
index ccc135b..0000000
--- a/contrib/gnu-sort/lib/version-etc.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Utility to help print --version output in a consistent format.
- Copyright (C) 1999-2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* $FreeBSD$ */
-
-/* Written by Jim Meyering. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Specification. */
-#include "version-etc.h"
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "unlocked-io.h"
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-/* Default copyright goes to the FSF. */
-
-const char* version_etc_copyright =
- /* Do *not* mark this string for translation. */
- "Copyright (C) 2004 Free Software Foundation, Inc.";
-
-
-/* Like version_etc, below, but with the NULL-terminated author list
- provided via a variable of type va_list. */
-void
-version_etc_va (FILE *stream,
- const char *command_name, const char *package,
- const char *version, va_list authors)
-{
- size_t n_authors;
-
- /* Count the number of authors. */
- {
- va_list tmp_authors;
-
-#ifdef va_copy
- va_copy (tmp_authors, authors);
-#else
- tmp_authors = authors;
-#endif
-
- n_authors = 0;
- while (va_arg (tmp_authors, const char *) != NULL)
- ++n_authors;
-#ifdef va_copy
- va_end (tmp_authors);
-#endif
- }
-
- if (command_name)
- fprintf (stream, "%s (%s) %s\n", command_name, package, version);
- else
- fprintf (stream, "%s %s\n", package, version);
-
- switch (n_authors)
- {
- case 0:
- /* The caller must provide at least one author name. */
- abort ();
- case 1:
- /* TRANSLATORS: %s denotes an author name. */
- vfprintf (stream, _("Written by %s.\n"), authors);
- break;
- case 2:
- /* TRANSLATORS: Each %s denotes an author name. */
- vfprintf (stream, _("Written by %s and %s.\n"), authors);
- break;
- case 3:
- /* TRANSLATORS: Each %s denotes an author name. */
- vfprintf (stream, _("Written by %s, %s, and %s.\n"), authors);
- break;
- case 4:
- /* TRANSLATORS: Each %s denotes an author name.
- You can use line breaks, estimating that each author name occupies
- ca. 16 screen columns and that a screen line has ca. 80 columns. */
- vfprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"), authors);
- break;
- case 5:
- /* TRANSLATORS: Each %s denotes an author name.
- You can use line breaks, estimating that each author name occupies
- ca. 16 screen columns and that a screen line has ca. 80 columns. */
- vfprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"), authors);
- break;
- case 6:
- /* TRANSLATORS: Each %s denotes an author name.
- You can use line breaks, estimating that each author name occupies
- ca. 16 screen columns and that a screen line has ca. 80 columns. */
- vfprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"),
- authors);
- break;
- case 7:
- /* TRANSLATORS: Each %s denotes an author name.
- You can use line breaks, estimating that each author name occupies
- ca. 16 screen columns and that a screen line has ca. 80 columns. */
- vfprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"),
- authors);
- break;
- case 8:
- /* TRANSLATORS: Each %s denotes an author name.
- You can use line breaks, estimating that each author name occupies
- ca. 16 screen columns and that a screen line has ca. 80 columns. */
- vfprintf (stream, _("\
-Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"),
- authors);
- break;
- case 9:
- /* TRANSLATORS: Each %s denotes an author name.
- You can use line breaks, estimating that each author name occupies
- ca. 16 screen columns and that a screen line has ca. 80 columns. */
- vfprintf (stream, _("\
-Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"),
- authors);
- break;
- default:
- /* 10 or more authors. Use an abbreviation, since the human reader
- will probably not want to read the entire list anyway. */
- /* TRANSLATORS: Each %s denotes an author name.
- You can use line breaks, estimating that each author name occupies
- ca. 16 screen columns and that a screen line has ca. 80 columns. */
- vfprintf (stream, _("\
-Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"),
- authors);
- break;
- }
- va_end (authors);
- putc ('\n', stream);
-
- fputs (version_etc_copyright, stream);
- putc ('\n', stream);
-
- fputs (_("\
-This is free software; see the source for copying conditions. There is NO\n\
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"),
- stream);
-}
-
-
-/* Display the --version information the standard way.
-
- If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of
- the program. The formats are therefore:
-
- PACKAGE VERSION
-
- or
-
- COMMAND_NAME (PACKAGE) VERSION.
-
- The author names are passed as separate arguments, with an additional
- NULL argument at the end. */
-void
-version_etc (FILE *stream,
- const char *command_name, const char *package,
- const char *version, /* const char *author1, ...*/ ...)
-{
- va_list authors;
-
- va_start (authors, version);
- version_etc_va (stream, command_name, package, version, authors);
-}
diff --git a/contrib/gnu-sort/lib/version-etc.h b/contrib/gnu-sort/lib/version-etc.h
deleted file mode 100644
index d505e75..0000000
--- a/contrib/gnu-sort/lib/version-etc.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Utility to help print --version output in a consistent format.
- Copyright (C) 1999, 2003 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Jim Meyering. */
-
-#ifndef VERSION_ETC_H
-# define VERSION_ETC_H 1
-
-# include <stdarg.h>
-# include <stdio.h>
-
-extern const char *version_etc_copyright;
-
-extern void version_etc_va (FILE *stream,
- const char *command_name, const char *package,
- const char *version, va_list authors);
-
-extern void version_etc (FILE *stream,
- const char *command_name, const char *package,
- const char *version,
- /* const char *author1, ...*/ ...);
-
-#endif /* VERSION_ETC_H */
diff --git a/contrib/gnu-sort/lib/xalloc-die.c b/contrib/gnu-sort/lib/xalloc-die.c
deleted file mode 100644
index ca3a689..0000000
--- a/contrib/gnu-sort/lib/xalloc-die.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Report a memory allocation failure and exit.
-
- Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004 Free
- Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "xalloc.h"
-
-#include <stdlib.h>
-
-#include "error.h"
-#include "exitfail.h"
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-#define N_(msgid) msgid
-
-void
-xalloc_die (void)
-{
- error (exit_failure, 0, "%s", _("memory exhausted"));
-
- /* The `noreturn' cannot be given to error, since it may return if
- its first argument is 0. To help compilers understand the
- xalloc_die does not return, call abort. Also, the abort is a
- safety feature if exit_failure is 0 (which shouldn't happen). */
- abort ();
-}
diff --git a/contrib/gnu-sort/lib/xalloc.h b/contrib/gnu-sort/lib/xalloc.h
deleted file mode 100644
index d81f2a6..0000000
--- a/contrib/gnu-sort/lib/xalloc.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* xalloc.h -- malloc with out-of-memory checking
-
- Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef XALLOC_H_
-# define XALLOC_H_
-
-# include <stddef.h>
-
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-
-# ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
-# define __attribute__(x)
-# endif
-# endif
-
-# ifndef ATTRIBUTE_NORETURN
-# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-# endif
-
-/* This function is always triggered when memory is exhausted.
- It must be defined by the application, either explicitly
- or by using gnulib's xalloc-die module. This is the
- function to call when one wants the program to die because of a
- memory allocation failure. */
-extern void xalloc_die (void) ATTRIBUTE_NORETURN;
-
-void *xmalloc (size_t s);
-void *xnmalloc (size_t n, size_t s);
-void *xzalloc (size_t s);
-void *xcalloc (size_t n, size_t s);
-void *xrealloc (void *p, size_t s);
-void *xnrealloc (void *p, size_t n, size_t s);
-void *x2realloc (void *p, size_t *pn);
-void *x2nrealloc (void *p, size_t *pn, size_t s);
-void *xclone (void const *p, size_t s);
-char *xstrdup (const char *str);
-
-/* Return 1 if an array of N objects, each of size S, cannot exist due
- to size arithmetic overflow. S must be positive and N must be
- nonnegative. This is a macro, not an inline function, so that it
- works correctly even when SIZE_MAX < N.
-
- By gnulib convention, SIZE_MAX represents overflow in size
- calculations, so the conservative dividend to use here is
- SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value.
- However, malloc (SIZE_MAX) fails on all known hosts where
- sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
- exactly-SIZE_MAX allocations on such hosts; this avoids a test and
- branch when S is known to be 1. */
-# define xalloc_oversized(n, s) \
- ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
-
-/* These macros are deprecated; they will go away soon, and are retained
- temporarily only to ease conversion to the functions described above. */
-# define CCLONE(p, n) xclone (p, (n) * sizeof *(p))
-# define CLONE(p) xclone (p, sizeof *(p))
-# define NEW(type, var) type *var = xmalloc (sizeof (type))
-# define XCALLOC(type, n) xcalloc (n, sizeof (type))
-# define XMALLOC(type, n) xnmalloc (n, sizeof (type))
-# define XREALLOC(p, type, n) xnrealloc (p, n, sizeof (type))
-# define XFREE(p) free (p)
-
-
-# ifdef __cplusplus
-}
-# endif
-
-
-#endif /* !XALLOC_H_ */
diff --git a/contrib/gnu-sort/lib/xmalloc.c b/contrib/gnu-sort/lib/xmalloc.c
deleted file mode 100644
index 9b7a948..0000000
--- a/contrib/gnu-sort/lib/xmalloc.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* xmalloc.c -- malloc with out of memory checking
-
- Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "xalloc.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
-/* Allocate an array of N objects, each with S bytes of memory,
- dynamically, with error checking. S must be nonzero. */
-
-static inline void *
-xnmalloc_inline (size_t n, size_t s)
-{
- void *p;
- if (xalloc_oversized (n, s) || (! (p = malloc (n * s)) && n != 0))
- xalloc_die ();
- return p;
-}
-
-void *
-xnmalloc (size_t n, size_t s)
-{
- return xnmalloc_inline (n, s);
-}
-
-/* Allocate N bytes of memory dynamically, with error checking. */
-
-void *
-xmalloc (size_t n)
-{
- return xnmalloc_inline (n, 1);
-}
-
-/* Change the size of an allocated block of memory P to an array of N
- objects each of S bytes, with error checking. S must be nonzero. */
-
-static inline void *
-xnrealloc_inline (void *p, size_t n, size_t s)
-{
- if (xalloc_oversized (n, s) || (! (p = realloc (p, n * s)) && n != 0))
- xalloc_die ();
- return p;
-}
-
-void *
-xnrealloc (void *p, size_t n, size_t s)
-{
- return xnrealloc_inline (p, n, s);
-}
-
-/* Change the size of an allocated block of memory P to N bytes,
- with error checking. */
-
-void *
-xrealloc (void *p, size_t n)
-{
- return xnrealloc_inline (p, n, 1);
-}
-
-
-/* If P is null, allocate a block of at least *PN such objects;
- otherwise, reallocate P so that it contains more than *PN objects
- each of S bytes. *PN must be nonzero unless P is null, and S must
- be nonzero. Set *PN to the new number of objects, and return the
- pointer to the new block. *PN is never set to zero, and the
- returned pointer is never null.
-
- Repeated reallocations are guaranteed to make progress, either by
- allocating an initial block with a nonzero size, or by allocating a
- larger block.
-
- In the following implementation, nonzero sizes are doubled so that
- repeated reallocations have O(N log N) overall cost rather than
- O(N**2) cost, but the specification for this function does not
- guarantee that sizes are doubled.
-
- Here is an example of use:
-
- int *p = NULL;
- size_t used = 0;
- size_t allocated = 0;
-
- void
- append_int (int value)
- {
- if (used == allocated)
- p = x2nrealloc (p, &allocated, sizeof *p);
- p[used++] = value;
- }
-
- This causes x2nrealloc to allocate a block of some nonzero size the
- first time it is called.
-
- To have finer-grained control over the initial size, set *PN to a
- nonzero value before calling this function with P == NULL. For
- example:
-
- int *p = NULL;
- size_t used = 0;
- size_t allocated = 0;
- size_t allocated1 = 1000;
-
- void
- append_int (int value)
- {
- if (used == allocated)
- {
- p = x2nrealloc (p, &allocated1, sizeof *p);
- allocated = allocated1;
- }
- p[used++] = value;
- }
-
- */
-
-static inline void *
-x2nrealloc_inline (void *p, size_t *pn, size_t s)
-{
- size_t n = *pn;
-
- if (! p)
- {
- if (! n)
- {
- /* The approximate size to use for initial small allocation
- requests, when the invoking code specifies an old size of
- zero. 64 bytes is the largest "small" request for the
- GNU C library malloc. */
- enum { DEFAULT_MXFAST = 64 };
-
- n = DEFAULT_MXFAST / s;
- n += !n;
- }
- }
- else
- {
- if (SIZE_MAX / 2 / s < n)
- xalloc_die ();
- n *= 2;
- }
-
- *pn = n;
- return xrealloc (p, n * s);
-}
-
-void *
-x2nrealloc (void *p, size_t *pn, size_t s)
-{
- return x2nrealloc_inline (p, pn, s);
-}
-
-/* If P is null, allocate a block of at least *PN bytes; otherwise,
- reallocate P so that it contains more than *PN bytes. *PN must be
- nonzero unless P is null. Set *PN to the new block's size, and
- return the pointer to the new block. *PN is never set to zero, and
- the returned pointer is never null. */
-
-void *
-x2realloc (void *p, size_t *pn)
-{
- return x2nrealloc_inline (p, pn, 1);
-}
-
-/* Allocate S bytes of zeroed memory dynamically, with error checking.
- There's no need for xnzalloc (N, S), since it would be equivalent
- to xcalloc (N, S). */
-
-void *
-xzalloc (size_t s)
-{
- return memset (xmalloc (s), 0, s);
-}
-
-/* Allocate zeroed memory for N elements of S bytes, with error
- checking. S must be nonzero. */
-
-void *
-xcalloc (size_t n, size_t s)
-{
- void *p;
- /* Test for overflow, since some calloc implementations don't have
- proper overflow checks. */
- if (xalloc_oversized (n, s) || (! (p = calloc (n, s)) && n != 0))
- xalloc_die ();
- return p;
-}
-
-/* Clone an object P of size S, with error checking. There's no need
- for xnclone (P, N, S), since xclone (P, N * S) works without any
- need for an arithmetic overflow check. */
-
-void *
-xclone (void const *p, size_t s)
-{
- return memcpy (xmalloc (s), p, s);
-}
diff --git a/contrib/gnu-sort/lib/xmemcoll.c b/contrib/gnu-sort/lib/xmemcoll.c
deleted file mode 100644
index 433d67f..0000000
--- a/contrib/gnu-sort/lib/xmemcoll.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Locale-specific memory comparison.
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Contributed by Paul Eggert <eggert@twinsun.com>. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <errno.h>
-#include <stdlib.h>
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-#include "error.h"
-#include "exitfail.h"
-#include "memcoll.h"
-#include "quotearg.h"
-#include "xmemcoll.h"
-
-/* Compare S1 (with length S1LEN) and S2 (with length S2LEN) according
- to the LC_COLLATE locale. S1 and S2 do not overlap, and are not
- adjacent. Temporarily modify the bytes after S1 and S2, but
- restore their original contents before returning. Report an error
- and exit if there is an error. */
-
-int
-xmemcoll (char *s1, size_t s1len, char *s2, size_t s2len)
-{
- int diff = memcoll (s1, s1len, s2, s2len);
- int collation_errno = errno;
-
- if (collation_errno)
- {
- error (0, collation_errno, _("string comparison failed"));
- error (0, 0, _("Set LC_ALL='C' to work around the problem."));
- error (exit_failure, 0,
- _("The strings compared were %s and %s."),
- quotearg_n_style_mem (0, locale_quoting_style, s1, s1len),
- quotearg_n_style_mem (1, locale_quoting_style, s2, s2len));
- }
-
- return diff;
-}
diff --git a/contrib/gnu-sort/lib/xmemcoll.h b/contrib/gnu-sort/lib/xmemcoll.h
deleted file mode 100644
index 2f422e8..0000000
--- a/contrib/gnu-sort/lib/xmemcoll.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include <stddef.h>
-int xmemcoll (char *, size_t, char *, size_t);
diff --git a/contrib/gnu-sort/lib/xstrtol.c b/contrib/gnu-sort/lib/xstrtol.c
deleted file mode 100644
index 906e4a1..0000000
--- a/contrib/gnu-sort/lib/xstrtol.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/* A more useful interface to strtol.
-
- Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2003, 2004 Free
- Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Jim Meyering. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifndef __strtol
-# define __strtol strtol
-# define __strtol_t long int
-# define __xstrtol xstrtol
-# define STRTOL_T_MINIMUM LONG_MIN
-# define STRTOL_T_MAXIMUM LONG_MAX
-#endif
-
-/* Some pre-ANSI implementations (e.g. SunOS 4)
- need stderr defined if assertion checking is enabled. */
-#include <stdio.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* The extra casts work around common compiler bugs. */
-#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-#define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
- ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
- : (t) 0))
-#define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
-
-#ifndef STRTOL_T_MINIMUM
-# define STRTOL_T_MINIMUM TYPE_MINIMUM (__strtol_t)
-# define STRTOL_T_MAXIMUM TYPE_MAXIMUM (__strtol_t)
-#endif
-
-#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-
-#include "xstrtol.h"
-
-#if !HAVE_DECL_STRTOIMAX && !defined strtoimax
-intmax_t strtoimax ();
-#endif
-
-#if !HAVE_DECL_STRTOUMAX && !defined strtoumax
-uintmax_t strtoumax ();
-#endif
-
-static strtol_error
-bkm_scale (__strtol_t *x, int scale_factor)
-{
- if (TYPE_SIGNED (__strtol_t) && *x < STRTOL_T_MINIMUM / scale_factor)
- {
- *x = STRTOL_T_MINIMUM;
- return LONGINT_OVERFLOW;
- }
- if (STRTOL_T_MAXIMUM / scale_factor < *x)
- {
- *x = STRTOL_T_MAXIMUM;
- return LONGINT_OVERFLOW;
- }
- *x *= scale_factor;
- return LONGINT_OK;
-}
-
-static strtol_error
-bkm_scale_by_power (__strtol_t *x, int base, int power)
-{
- strtol_error err = LONGINT_OK;
- while (power--)
- err |= bkm_scale (x, base);
- return err;
-}
-
-/* FIXME: comment. */
-
-strtol_error
-__xstrtol (const char *s, char **ptr, int strtol_base,
- __strtol_t *val, const char *valid_suffixes)
-{
- char *t_ptr;
- char **p;
- __strtol_t tmp;
- strtol_error err = LONGINT_OK;
-
- assert (0 <= strtol_base && strtol_base <= 36);
-
- p = (ptr ? ptr : &t_ptr);
-
- if (! TYPE_SIGNED (__strtol_t))
- {
- const char *q = s;
- unsigned char ch = *q;
- while (ISSPACE (ch))
- ch = *++q;
- if (ch == '-')
- return LONGINT_INVALID;
- }
-
- errno = 0;
- tmp = __strtol (s, p, strtol_base);
-
- if (*p == s)
- {
- /* If there is no number but there is a valid suffix, assume the
- number is 1. The string is invalid otherwise. */
- if (valid_suffixes && **p && strchr (valid_suffixes, **p))
- tmp = 1;
- else
- return LONGINT_INVALID;
- }
- else if (errno != 0)
- {
- if (errno != ERANGE)
- return LONGINT_INVALID;
- err = LONGINT_OVERFLOW;
- }
-
- /* Let valid_suffixes == NULL mean `allow any suffix'. */
- /* FIXME: update all callers except the ones that allow suffixes
- after the number, changing last parameter NULL to `""'. */
- if (!valid_suffixes)
- {
- *val = tmp;
- return err;
- }
-
- if (**p != '\0')
- {
- int base = 1024;
- int suffixes = 1;
- strtol_error overflow;
-
- if (!strchr (valid_suffixes, **p))
- {
- *val = tmp;
- return err | LONGINT_INVALID_SUFFIX_CHAR;
- }
-
- if (strchr (valid_suffixes, '0'))
- {
- /* The ``valid suffix'' '0' is a special flag meaning that
- an optional second suffix is allowed, which can change
- the base. A suffix "B" (e.g. "100MB") stands for a power
- of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for
- a power of 1024. If no suffix (e.g. "100M"), assume
- power-of-1024. */
-
- switch (p[0][1])
- {
- case 'i':
- if (p[0][2] == 'B')
- suffixes += 2;
- break;
-
- case 'B':
- case 'D': /* 'D' is obsolescent */
- base = 1000;
- suffixes++;
- break;
- }
- }
-
- switch (**p)
- {
- case 'b':
- overflow = bkm_scale (&tmp, 512);
- break;
-
- case 'B':
- overflow = bkm_scale (&tmp, 1024);
- break;
-
- case 'c':
- overflow = 0;
- break;
-
- case 'E': /* exa or exbi */
- overflow = bkm_scale_by_power (&tmp, base, 6);
- break;
-
- case 'G': /* giga or gibi */
- case 'g': /* 'g' is undocumented; for compatibility only */
- overflow = bkm_scale_by_power (&tmp, base, 3);
- break;
-
- case 'k': /* kilo */
- case 'K': /* kibi */
- overflow = bkm_scale_by_power (&tmp, base, 1);
- break;
-
- case 'M': /* mega or mebi */
- case 'm': /* 'm' is undocumented; for compatibility only */
- overflow = bkm_scale_by_power (&tmp, base, 2);
- break;
-
- case 'P': /* peta or pebi */
- overflow = bkm_scale_by_power (&tmp, base, 5);
- break;
-
- case 'T': /* tera or tebi */
- case 't': /* 't' is undocumented; for compatibility only */
- overflow = bkm_scale_by_power (&tmp, base, 4);
- break;
-
- case 'w':
- overflow = bkm_scale (&tmp, 2);
- break;
-
- case 'Y': /* yotta or 2**80 */
- overflow = bkm_scale_by_power (&tmp, base, 8);
- break;
-
- case 'Z': /* zetta or 2**70 */
- overflow = bkm_scale_by_power (&tmp, base, 7);
- break;
-
- default:
- *val = tmp;
- return err | LONGINT_INVALID_SUFFIX_CHAR;
- }
-
- err |= overflow;
- *p += suffixes;
- if (**p)
- err |= LONGINT_INVALID_SUFFIX_CHAR;
- }
-
- *val = tmp;
- return err;
-}
-
-#ifdef TESTING_XSTRTO
-
-# include <stdio.h>
-# include "error.h"
-
-char *program_name;
-
-int
-main (int argc, char **argv)
-{
- strtol_error s_err;
- int i;
-
- program_name = argv[0];
- for (i=1; i<argc; i++)
- {
- char *p;
- __strtol_t val;
-
- s_err = __xstrtol (argv[i], &p, 0, &val, "bckmw");
- if (s_err == LONGINT_OK)
- {
- printf ("%s->%lu (%s)\n", argv[i], val, p);
- }
- else
- {
- STRTOL_FATAL_ERROR (argv[i], "arg", s_err);
- }
- }
- exit (0);
-}
-
-#endif /* TESTING_XSTRTO */
diff --git a/contrib/gnu-sort/lib/xstrtol.h b/contrib/gnu-sort/lib/xstrtol.h
deleted file mode 100644
index 0d6b984..0000000
--- a/contrib/gnu-sort/lib/xstrtol.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* A more useful interface to strtol.
-
- Copyright (C) 1995, 1996, 1998, 1999, 2001, 2002, 2003, 2004 Free
- Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef XSTRTOL_H_
-# define XSTRTOL_H_ 1
-
-# include "exitfail.h"
-
-# if HAVE_INTTYPES_H
-# include <inttypes.h>
-# endif
-# if HAVE_STDINT_H
-# include <stdint.h>
-# endif
-
-# ifndef _STRTOL_ERROR
-enum strtol_error
- {
- LONGINT_OK = 0,
-
- /* These two values can be ORed together, to indicate that both
- errors occurred. */
- LONGINT_OVERFLOW = 1,
- LONGINT_INVALID_SUFFIX_CHAR = 2,
-
- LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR
- | LONGINT_OVERFLOW),
- LONGINT_INVALID = 4
- };
-typedef enum strtol_error strtol_error;
-# endif
-
-# define _DECLARE_XSTRTOL(name, type) \
- strtol_error name (const char *, char **, int, type *, const char *);
-_DECLARE_XSTRTOL (xstrtol, long int)
-_DECLARE_XSTRTOL (xstrtoul, unsigned long int)
-_DECLARE_XSTRTOL (xstrtoimax, intmax_t)
-_DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
-
-# define _STRTOL_ERROR(Exit_code, Str, Argument_type_string, Err) \
- do \
- { \
- switch ((Err)) \
- { \
- default: \
- abort (); \
- \
- case LONGINT_INVALID: \
- error ((Exit_code), 0, "invalid %s `%s'", \
- (Argument_type_string), (Str)); \
- break; \
- \
- case LONGINT_INVALID_SUFFIX_CHAR: \
- case LONGINT_INVALID_SUFFIX_CHAR | LONGINT_OVERFLOW: \
- error ((Exit_code), 0, "invalid character following %s in `%s'", \
- (Argument_type_string), (Str)); \
- break; \
- \
- case LONGINT_OVERFLOW: \
- error ((Exit_code), 0, "%s `%s' too large", \
- (Argument_type_string), (Str)); \
- break; \
- } \
- } \
- while (0)
-
-# define STRTOL_FATAL_ERROR(Str, Argument_type_string, Err) \
- _STRTOL_ERROR (exit_failure, Str, Argument_type_string, Err)
-
-# define STRTOL_FAIL_WARN(Str, Argument_type_string, Err) \
- _STRTOL_ERROR (0, Str, Argument_type_string, Err)
-
-#endif /* not XSTRTOL_H_ */
diff --git a/contrib/gnu-sort/lib/xstrtoul.c b/contrib/gnu-sort/lib/xstrtoul.c
deleted file mode 100644
index 285f7b9..0000000
--- a/contrib/gnu-sort/lib/xstrtoul.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#define __strtol strtoul
-#define __strtol_t unsigned long int
-#define __xstrtol xstrtoul
-#define STRTOL_T_MINIMUM 0
-#define STRTOL_T_MAXIMUM ULONG_MAX
-#include "xstrtol.c"
diff --git a/contrib/gnu-sort/lib/xstrtoumax.c b/contrib/gnu-sort/lib/xstrtoumax.c
deleted file mode 100644
index 8518ef0..0000000
--- a/contrib/gnu-sort/lib/xstrtoumax.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* xstrtoumax.c -- A more useful interface to strtoumax.
- Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Paul Eggert. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "xstrtol.h"
-
-#define __strtol strtoumax
-#define __strtol_t uintmax_t
-#define __xstrtol xstrtoumax
-#ifdef UINTMAX_MAX
-# define STRTOL_T_MINIMUM 0
-# define STRTOL_T_MAXIMUM UINTMAX_MAX
-#endif
-#include "xstrtol.c"
diff --git a/contrib/gnu-sort/man/sort.1 b/contrib/gnu-sort/man/sort.1
deleted file mode 100644
index 2bb445d..0000000
--- a/contrib/gnu-sort/man/sort.1
+++ /dev/null
@@ -1,113 +0,0 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.33.
-.TH SORT "1" "March 2004" "sort (coreutils) 5.2.1" "User Commands"
-.SH NAME
-sort \- sort lines of text files
-.SH SYNOPSIS
-.B sort
-[\fIOPTION\fR]... [\fIFILE\fR]...
-.SH DESCRIPTION
-.\" Add any additional description here
-.PP
-Write sorted concatenation of all FILE(s) to standard output.
-.PP
-Ordering options:
-.PP
-Mandatory arguments to long options are mandatory for short options too.
-.HP
-\fB\-b\fR, \fB\-\-ignore\-leading\-blanks\fR ignore leading blanks
-.TP
-\fB\-d\fR, \fB\-\-dictionary\-order\fR
-consider only blanks and alphanumeric characters
-.TP
-\fB\-f\fR, \fB\-\-ignore\-case\fR
-fold lower case to upper case characters
-.TP
-\fB\-g\fR, \fB\-\-general\-numeric\-sort\fR
-compare according to general numerical value
-.TP
-\fB\-i\fR, \fB\-\-ignore\-nonprinting\fR
-consider only printable characters
-.TP
-\fB\-M\fR, \fB\-\-month\-sort\fR
-compare (unknown) < `JAN' < ... < `DEC'
-.TP
-\fB\-n\fR, \fB\-\-numeric\-sort\fR
-compare according to string numerical value
-.TP
-\fB\-r\fR, \fB\-\-reverse\fR
-reverse the result of comparisons
-.PP
-Other options:
-.TP
-\fB\-c\fR, \fB\-\-check\fR
-check whether input is sorted; do not sort
-.TP
-\fB\-k\fR, \fB\-\-key\fR=\fIPOS1[\fR,POS2]
-start a key at POS1, end it at POS 2 (origin 1)
-.TP
-\fB\-m\fR, \fB\-\-merge\fR
-merge already sorted files; do not sort
-.TP
-\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR
-write result to FILE instead of standard output
-.TP
-\fB\-s\fR, \fB\-\-stable\fR
-stabilize sort by disabling last-resort comparison
-.TP
-\fB\-S\fR, \fB\-\-buffer\-size\fR=\fISIZE\fR
-use SIZE for main memory buffer
-.HP
-\fB\-t\fR, \fB\-\-field\-separator\fR=\fISEP\fR use SEP instead of non-blank to blank transition
-.TP
-\fB\-T\fR, \fB\-\-temporary\-directory\fR=\fIDIR\fR
-use DIR for temporaries, not $TMPDIR or /tmp;
-multiple options specify multiple directories
-.TP
-\fB\-u\fR, \fB\-\-unique\fR
-with \fB\-c\fR, check for strict ordering;
-without \fB\-c\fR, output only the first of an equal run
-.TP
-\fB\-z\fR, \fB\-\-zero\-terminated\fR
-end lines with 0 byte, not newline
-.TP
-\fB\-\-help\fR
-display this help and exit
-.TP
-\fB\-\-version\fR
-output version information and exit
-.PP
-POS is F[.C][OPTS], where F is the field number and C the character position
-in the field. OPTS is one or more single-letter ordering options, which
-override global ordering options for that key. If no key is given, use the
-entire line as the key.
-.PP
-SIZE may be followed by the following multiplicative suffixes:
-% 1% of memory, b 1, K 1024 (default), and so on for M, G, T, P, E, Z, Y.
-.PP
-With no FILE, or when FILE is -, read standard input.
-.PP
-*** WARNING ***
-The locale specified by the environment affects sort order.
-Set LC_ALL=C to get the traditional sort order that uses
-native byte values.
-.SH AUTHOR
-Written by Mike Haertel and Paul Eggert.
-.SH "REPORTING BUGS"
-Report bugs to <bug-coreutils@gnu.org>.
-.SH COPYRIGHT
-Copyright \(co 2004 Free Software Foundation, Inc.
-.br
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-.SH "SEE ALSO"
-The full documentation for
-.B sort
-is maintained as a Texinfo manual. If the
-.B info
-and
-.B sort
-programs are properly installed at your site, the command
-.IP
-.B info coreutils sort
-.PP
-should give you access to the complete manual.
diff --git a/contrib/gnu-sort/src/sort.c b/contrib/gnu-sort/src/sort.c
deleted file mode 100644
index 0b9d33f..0000000
--- a/contrib/gnu-sort/src/sort.c
+++ /dev/null
@@ -1,3237 +0,0 @@
-/* $FreeBSD$ */
-/* sort - sort lines of text (with all kinds of options).
- Copyright (C) 88, 1991-2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- Written December 1988 by Mike Haertel.
- The author may be reached (Email) at the address mike@gnu.ai.mit.edu,
- or (US mail) as Mike Haertel c/o Free Software Foundation.
-
- Ørn E. Hansen added NLS support in 1997. */
-
-#include <config.h>
-
-#include <assert.h>
-#include <getopt.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <stdio.h>
-
-/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
-/* Get mbstate_t, mbrtowc(), wcwidth(). */
-#if HAVE_WCHAR_H
-# include <wchar.h>
-#endif
-
-/* Get isw* functions. */
-#if HAVE_WCTYPE_H
-# include <wctype.h>
-#endif
-
-/* Get nl_langinfo(). */
-#if HAVE_LANGINFO_CODESET
-# include <langinfo.h>
-#endif
-
-/* Include this after wctype.h so that we `#undef' ISPRINT
- (from Solaris's euc.h, from widec.h, from wctype.h) before
- redefining and using it. */
-#include "system.h"
-#include "error.h"
-#include "hard-locale.h"
-#include "inttostr.h"
-#include "long-options.h"
-#include "physmem.h"
-#include "posixver.h"
-#include "quote.h"
-#include "stdio-safer.h"
-#include "xmemcoll.h"
-#include "xstrtol.h"
-
-#if HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-#ifndef RLIMIT_DATA
-struct rlimit { size_t rlim_cur; };
-# define getrlimit(Resource, Rlp) (-1)
-#endif
-
-/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
- installation; work around this configuration error. */
-#if !defined MB_LEN_MAX || MB_LEN_MAX == 1
-# define MB_LEN_MAX 16
-#endif
-
-/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
-#if HAVE_MBRTOWC && defined mbstate_t
-# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
-#endif
-
-/* The official name of this program (e.g., no `g' prefix). */
-#define PROGRAM_NAME "sort"
-
-#define AUTHORS "Mike Haertel", "Paul Eggert"
-
-#if HAVE_LANGINFO_CODESET
-# include <langinfo.h>
-#endif
-
-#ifndef SA_NOCLDSTOP
-# define sigprocmask(How, Set, Oset) /* empty */
-# define sigset_t int
-#endif
-
-#ifndef STDC_HEADERS
-double strtod ();
-#endif
-
-#define UCHAR_LIM (UCHAR_MAX + 1)
-
-#ifndef DEFAULT_TMPDIR
-# define DEFAULT_TMPDIR "/tmp"
-#endif
-
-/* Exit statuses. */
-enum
- {
- /* POSIX says to exit with status 1 if invoked with -c and the
- input is not properly sorted. */
- SORT_OUT_OF_ORDER = 1,
-
- /* POSIX says any other irregular exit must exit with a status
- code greater than 1. */
- SORT_FAILURE = 2
- };
-
-#define C_DECIMAL_POINT '.'
-#define NEGATION_SIGN '-'
-#define NUMERIC_ZERO '0'
-
-#if HAVE_SETLOCALE
-
-static char decimal_point;
-static int th_sep; /* if CHAR_MAX + 1, then there is no thousands separator */
-static int force_general_numcompare = 0;
-
-/* Nonzero if the corresponding locales are hard. */
-static bool hard_LC_COLLATE;
-# if HAVE_NL_LANGINFO
-static bool hard_LC_TIME;
-# endif
-
-# define IS_THOUSANDS_SEP(x) ((x) == th_sep)
-
-#else
-
-# define decimal_point C_DECIMAL_POINT
-# define IS_THOUSANDS_SEP(x) false
-
-#endif
-
-#define NONZERO(x) (x != 0)
-
-/* get a multibyte character's byte length. */
-#define GET_BYTELEN_OF_CHAR(LIM, PTR, MBLENGTH, STATE) \
- do \
- { \
- wchar_t wc; \
- mbstate_t state_bak; \
- \
- state_bak = STATE; \
- mblength = mbrtowc (&wc, PTR, LIM - PTR, &STATE); \
- \
- switch (MBLENGTH) \
- { \
- case (size_t)-1: \
- case (size_t)-2: \
- STATE = state_bak; \
- /* Fall through. */ \
- case 0: \
- MBLENGTH = 1; \
- } \
- } \
- while (0)
-
-/* The kind of blanks for '-b' to skip in various options. */
-enum blanktype { bl_start, bl_end, bl_both };
-
-/* The character marking end of line. Default to \n. */
-static char eolchar = '\n';
-
-/* Lines are held in core as counted strings. */
-struct line
-{
- char *text; /* Text of the line. */
- size_t length; /* Length including final newline. */
- char *keybeg; /* Start of first key. */
- char *keylim; /* Limit of first key. */
-};
-
-/* Input buffers. */
-struct buffer
-{
- char *buf; /* Dynamically allocated buffer,
- partitioned into 3 regions:
- - input data;
- - unused area;
- - an array of lines, in reverse order. */
- size_t used; /* Number of bytes used for input data. */
- size_t nlines; /* Number of lines in the line array. */
- size_t alloc; /* Number of bytes allocated. */
- size_t left; /* Number of bytes left from previous reads. */
- size_t line_bytes; /* Number of bytes to reserve for each line. */
- bool eof; /* An EOF has been read. */
-};
-
-struct keyfield
-{
- size_t sword; /* Zero-origin 'word' to start at. */
- size_t schar; /* Additional characters to skip. */
- size_t eword; /* Zero-origin first word after field. */
- size_t echar; /* Additional characters in field. */
- bool const *ignore; /* Boolean array of characters to ignore. */
- char const *translate; /* Translation applied to characters. */
- bool skipsblanks; /* Skip leading blanks when finding start. */
- bool skipeblanks; /* Skip leading blanks when finding end. */
- bool numeric; /* Flag for numeric comparison. Handle
- strings of digits with optional decimal
- point, but no exponential notation. */
- bool general_numeric; /* Flag for general, numeric comparison.
- Handle numbers in exponential notation. */
- bool month; /* Flag for comparison by month name. */
- bool reverse; /* Reverse the sense of comparison. */
- struct keyfield *next; /* Next keyfield to try. */
-};
-
-struct month
-{
- char const *name;
- int val;
-};
-
-/* The name this program was run with. */
-char *program_name;
-
-/* FIXME: None of these tables work with multibyte character sets.
- Also, there are many other bugs when handling multibyte characters.
- One way to fix this is to rewrite `sort' to use wide characters
- internally, but doing this with good performance is a bit
- tricky. */
-
-/* Table of blanks. */
-static bool blanks[UCHAR_LIM];
-
-/* Table of non-printing characters. */
-static bool nonprinting[UCHAR_LIM];
-
-/* Table of non-dictionary characters (not letters, digits, or blanks). */
-static bool nondictionary[UCHAR_LIM];
-
-/* Translation table folding lower case to upper. */
-static char fold_toupper[UCHAR_LIM];
-
-#define MONTHS_PER_YEAR 12
-
-/* Table mapping month names to integers.
- Alphabetic order allows binary search. */
-static struct month monthtab[] =
-{
- {"APR", 4},
- {"AUG", 8},
- {"DEC", 12},
- {"FEB", 2},
- {"JAN", 1},
- {"JUL", 7},
- {"JUN", 6},
- {"MAR", 3},
- {"MAY", 5},
- {"NOV", 11},
- {"OCT", 10},
- {"SEP", 9}
-};
-
-/* During the merge phase, the number of files to merge at once. */
-#define NMERGE 16
-
-/* Minimum size for a merge or check buffer. */
-#define MIN_MERGE_BUFFER_SIZE (2 + sizeof (struct line))
-
-/* Minimum sort size; the code might not work with smaller sizes. */
-#define MIN_SORT_SIZE (NMERGE * MIN_MERGE_BUFFER_SIZE)
-
-/* The number of bytes needed for a merge or check buffer, which can
- function relatively efficiently even if it holds only one line. If
- a longer line is seen, this value is increased. */
-static size_t merge_buffer_size = MAX (MIN_MERGE_BUFFER_SIZE, 256 * 1024);
-
-/* The approximate maximum number of bytes of main memory to use, as
- specified by the user. Zero if the user has not specified a size. */
-static size_t sort_size;
-
-/* The guessed size for non-regular files. */
-#define INPUT_FILE_SIZE_GUESS (1024 * 1024)
-
-/* Array of directory names in which any temporary files are to be created. */
-static char const **temp_dirs;
-
-/* Number of temporary directory names used. */
-static size_t temp_dir_count;
-
-/* Number of allocated slots in temp_dirs. */
-static size_t temp_dir_alloc;
-
-/* Flag to reverse the order of all comparisons. */
-static bool reverse;
-
-/* Flag for stable sort. This turns off the last ditch bytewise
- comparison of lines, and instead leaves lines in the same order
- they were read if all keys compare equal. */
-static bool stable;
-
-/* Tab character separating fields. If tab_default, then fields are
- separated by the empty string between a non-blank character and a blank
- character. */
-static bool tab_default = true;
-static unsigned char tab[MB_LEN_MAX + 1];
-static size_t tab_length = 1;
-
-/* Flag to remove consecutive duplicate lines from the output.
- Only the last of a sequence of equal lines will be output. */
-static bool unique;
-
-/* Nonzero if any of the input files are the standard input. */
-static bool have_read_stdin;
-
-/* List of key field comparisons to be tried. */
-static struct keyfield *keylist;
-
-static void sortlines_temp (struct line *, size_t, struct line *);
-
-void
-usage (int status)
-{
- if (status != EXIT_SUCCESS)
- fprintf (stderr, _("Try `%s --help' for more information.\n"),
- program_name);
- else
- {
- printf (_("\
-Usage: %s [OPTION]... [FILE]...\n\
-"),
- program_name);
- fputs (_("\
-Write sorted concatenation of all FILE(s) to standard output.\n\
-\n\
-Ordering options:\n\
-\n\
-"), stdout);
- fputs (_("\
-Mandatory arguments to long options are mandatory for short options too.\n\
-"), stdout);
- fputs (_("\
- -b, --ignore-leading-blanks ignore leading blanks\n\
- -d, --dictionary-order consider only blanks and alphanumeric characters\n\
- -f, --ignore-case fold lower case to upper case characters\n\
-"), stdout);
- fputs (_("\
- -g, --general-numeric-sort compare according to general numerical value\n\
- -i, --ignore-nonprinting consider only printable characters\n\
- -M, --month-sort compare (unknown) < `JAN' < ... < `DEC'\n\
- -n, --numeric-sort compare according to string numerical value\n\
- -r, --reverse reverse the result of comparisons\n\
-\n\
-"), stdout);
- fputs (_("\
-Other options:\n\
-\n\
- -c, --check check whether input is sorted; do not sort\n\
- -k, --key=POS1[,POS2] start a key at POS1, end it at POS 2 (origin 1)\n\
- -m, --merge merge already sorted files; do not sort\n\
- -o, --output=FILE write result to FILE instead of standard output\n\
- -s, --stable stabilize sort by disabling last-resort comparison\n\
- -S, --buffer-size=SIZE use SIZE for main memory buffer\n\
-"), stdout);
- printf (_("\
- -t, --field-separator=SEP use SEP instead of non-blank to blank transition\n\
- -T, --temporary-directory=DIR use DIR for temporaries, not $TMPDIR or %s;\n\
- multiple options specify multiple directories\n\
- -u, --unique with -c, check for strict ordering;\n\
- without -c, output only the first of an equal run\n\
-"), DEFAULT_TMPDIR);
- fputs (_("\
- -z, --zero-terminated end lines with 0 byte, not newline\n\
-"), stdout);
- fputs (HELP_OPTION_DESCRIPTION, stdout);
- fputs (VERSION_OPTION_DESCRIPTION, stdout);
- fputs (_("\
-\n\
-POS is F[.C][OPTS], where F is the field number and C the character position\n\
-in the field. OPTS is one or more single-letter ordering options, which\n\
-override global ordering options for that key. If no key is given, use the\n\
-entire line as the key.\n\
-\n\
-SIZE may be followed by the following multiplicative suffixes:\n\
-"), stdout);
- fputs (_("\
-% 1% of memory, b 1, K 1024 (default), and so on for M, G, T, P, E, Z, Y.\n\
-\n\
-With no FILE, or when FILE is -, read standard input.\n\
-\n\
-*** WARNING ***\n\
-The locale specified by the environment affects sort order.\n\
-Set LC_ALL=C to get the traditional sort order that uses\n\
-native byte values.\n\
-"), stdout );
- printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
- }
-
- exit (status);
-}
-
-#define COMMON_SHORT_OPTIONS "-bcdfgik:mMno:rsS:t:T:uz"
-
-static struct option const long_options[] =
-{
- {"ignore-leading-blanks", no_argument, NULL, 'b'},
- {"check", no_argument, NULL, 'c'},
- {"dictionary-order", no_argument, NULL, 'd'},
- {"ignore-case", no_argument, NULL, 'f'},
- {"general-numeric-sort", no_argument, NULL, 'g'},
- {"ignore-nonprinting", no_argument, NULL, 'i'},
- {"key", required_argument, NULL, 'k'},
- {"merge", no_argument, NULL, 'm'},
- {"month-sort", no_argument, NULL, 'M'},
- {"numeric-sort", no_argument, NULL, 'n'},
- {"output", required_argument, NULL, 'o'},
- {"reverse", no_argument, NULL, 'r'},
- {"stable", no_argument, NULL, 's'},
- {"buffer-size", required_argument, NULL, 'S'},
- {"field-separator", required_argument, NULL, 't'},
- {"temporary-directory", required_argument, NULL, 'T'},
- {"unique", no_argument, NULL, 'u'},
- {"zero-terminated", no_argument, NULL, 'z'},
- {GETOPT_HELP_OPTION_DECL},
- {GETOPT_VERSION_OPTION_DECL},
- {0, 0, 0, 0},
-};
-
-/* The set of signals that are caught. */
-static sigset_t caught_signals;
-
-/* The list of temporary files. */
-struct tempnode
-{
- struct tempnode *volatile next;
- char name[1]; /* Actual size is 1 + file name length. */
-};
-static struct tempnode *volatile temphead;
-
-/* Fucntion pointers. */
-static void
-(*inittables) (void);
-
-static char *
-(* begfield) (const struct line *line, const struct keyfield *key);
-
-static char *
-(* limfield) (const struct line *line, const struct keyfield *key);
-
-static int
-(*getmonth) (const char *s, size_t len);
-
-static int
-(* keycompare) (const struct line *a, const struct line *b);
-
-/* Test for white space multibyte character.
- Set LENGTH the byte length of investigated multibyte character. */
-#if HAVE_MBRTOWC
-static int
-ismbblank (const char *str, size_t len, size_t *length)
-{
- size_t mblength;
- wchar_t wc;
- mbstate_t state;
-
- memset (&state, '\0', sizeof(mbstate_t));
- mblength = mbrtowc (&wc, str, len, &state);
-
- if (mblength == (size_t)-1 || mblength == (size_t)-2)
- {
- *length = 1;
- return 0;
- }
-
- *length = (mblength < 1) ? 1 : mblength;
- return iswblank (wc);
-}
-#endif
-
-/* Clean up any remaining temporary files. */
-
-static void
-cleanup (void)
-{
- struct tempnode const *node;
-
- for (node = temphead; node; node = node->next)
- unlink (node->name);
-}
-
-/* Report MESSAGE for FILE, then clean up and exit.
- If FILE is null, it represents standard output. */
-
-static void die (char const *, char const *) ATTRIBUTE_NORETURN;
-static void
-die (char const *message, char const *file)
-{
- error (0, errno, "%s: %s", message, file ? file : _("standard output"));
- exit (SORT_FAILURE);
-}
-
-/* Create a new temporary file, returning its newly allocated name.
- Store into *PFP a stream open for writing. */
-
-static char *
-create_temp_file (FILE **pfp)
-{
- static char const slashbase[] = "/sortXXXXXX";
- static size_t temp_dir_index;
- sigset_t oldset;
- int fd;
- int saved_errno;
- char const *temp_dir = temp_dirs[temp_dir_index];
- size_t len = strlen (temp_dir);
- struct tempnode *node =
- xmalloc (sizeof node->next + len + sizeof slashbase);
- char *file = node->name;
-
- memcpy (file, temp_dir, len);
- memcpy (file + len, slashbase, sizeof slashbase);
- node->next = temphead;
- if (++temp_dir_index == temp_dir_count)
- temp_dir_index = 0;
-
- /* Create the temporary file in a critical section, to avoid races. */
- sigprocmask (SIG_BLOCK, &caught_signals, &oldset);
- fd = mkstemp (file);
- if (0 <= fd)
- temphead = node;
- saved_errno = errno;
- sigprocmask (SIG_SETMASK, &oldset, NULL);
- errno = saved_errno;
-
- if (fd < 0 || (*pfp = fdopen (fd, "w")) == NULL)
- die (_("cannot create temporary file"), file);
-
- return file;
-}
-
-/* Return a stream for FILE, opened with mode HOW. A null FILE means
- standard output; HOW should be "w". When opening for input, "-"
- means standard input. To avoid confusion, do not return file
- descriptors 0, 1, or 2. */
-
-static FILE *
-xfopen (const char *file, const char *how)
-{
- FILE *fp;
-
- if (!file)
- fp = stdout;
- else if (STREQ (file, "-") && *how == 'r')
- {
- have_read_stdin = true;
- fp = stdin;
- }
- else
- {
- if ((fp = fopen_safer (file, how)) == NULL)
- die (_("open failed"), file);
- }
-
- return fp;
-}
-
-/* Close FP, whose name is FILE, and report any errors. */
-
-static void
-xfclose (FILE *fp, char const *file)
-{
- if (fp == stdin)
- {
- /* Allow reading stdin from tty more than once. */
- if (feof (fp))
- clearerr (fp);
- }
- else
- {
- if (fclose (fp) != 0)
- die (_("close failed"), file);
- }
-}
-
-static void
-write_bytes (const char *buf, size_t n_bytes, FILE *fp, const char *output_file)
-{
- if (fwrite (buf, 1, n_bytes, fp) != n_bytes)
- die (_("write failed"), output_file);
-}
-
-/* Append DIR to the array of temporary directory names. */
-static void
-add_temp_dir (char const *dir)
-{
- if (temp_dir_count == temp_dir_alloc)
- temp_dirs = x2nrealloc (temp_dirs, &temp_dir_alloc, sizeof *temp_dirs);
-
- temp_dirs[temp_dir_count++] = dir;
-}
-
-/* Search through the list of temporary files for NAME;
- remove it if it is found on the list. */
-
-static void
-zaptemp (const char *name)
-{
- struct tempnode *volatile *pnode;
- struct tempnode *node;
-
- for (pnode = &temphead; (node = *pnode); pnode = &node->next)
- if (node->name == name)
- {
- unlink (name);
- *pnode = node->next;
- free (node);
- break;
- }
-}
-
-#if HAVE_LANGINFO_CODESET
-
-static int
-struct_month_cmp (const void *m1, const void *m2)
-{
- struct month const *month1 = m1;
- struct month const *month2 = m2;
- return strcmp (month1->name, month2->name);
-}
-
-#endif
-
-/* Initialize the character class tables. */
-
-static void
-inittables_uni (void)
-{
- int i;
-
- for (i = 0; i < UCHAR_LIM; ++i)
- {
- blanks[i] = !!ISBLANK (i);
- nonprinting[i] = !ISPRINT (i);
- nondictionary[i] = !ISALNUM (i) && !ISBLANK (i);
- fold_toupper[i] = (ISLOWER (i) ? toupper (i) : i);
- }
-
-#if HAVE_NL_LANGINFO
- /* If we're not in the "C" locale, read different names for months. */
- if (hard_LC_TIME)
- {
- for (i = 0; i < MONTHS_PER_YEAR; i++)
- {
- char const *s;
- size_t s_len;
- size_t j;
- char *name;
-
- s = (char *) nl_langinfo (ABMON_1 + i);
- s_len = strlen (s);
- monthtab[i].name = name = xmalloc (s_len + 1);
- monthtab[i].val = i + 1;
-
- for (j = 0; j < s_len; j++)
- name[j] = fold_toupper[to_uchar (s[j])];
- name[j] = '\0';
- }
- qsort ((void *) monthtab, MONTHS_PER_YEAR,
- sizeof *monthtab, struct_month_cmp);
- }
-#endif
-}
-
-#if HAVE_MBRTOWC
-static void
-inittables_mb (void)
-{
- int i, j, k, l;
- char *name, *s;
- size_t s_len, mblength;
- char mbc[MB_LEN_MAX];
- wchar_t wc, pwc;
- mbstate_t state_mb, state_wc;
-
- for (i = 0; i < MONTHS_PER_YEAR; i++)
- {
- s = (char *) nl_langinfo (ABMON_1 + i);
- s_len = strlen (s);
- monthtab[i].name = name = (char *) xmalloc (s_len + 1);
- monthtab[i].val = i + 1;
-
- memset (&state_mb, '\0', sizeof (mbstate_t));
- memset (&state_wc, '\0', sizeof (mbstate_t));
-
- for (j = 0; j < s_len;)
- {
- if (!ismbblank (s + j, s_len - j, &mblength))
- break;
- j += mblength;
- }
-
- for (k = 0; j < s_len;)
- {
- mblength = mbrtowc (&wc, (s + j), (s_len - j), &state_mb);
- assert (mblength != (size_t)-1 && mblength != (size_t)-2);
- if (mblength == 0)
- break;
-
- pwc = towupper (wc);
- if (pwc == wc)
- {
- memcpy (mbc, s + j, mblength);
- j += mblength;
- }
- else
- {
- j += mblength;
- mblength = wcrtomb (mbc, pwc, &state_wc);
- assert (mblength != (size_t)0 && mblength != (size_t)-1);
- }
-
- for (l = 0; l < mblength; l++)
- name[k++] = mbc[l];
- }
- name[k] = '\0';
- }
- qsort ((void *) monthtab, MONTHS_PER_YEAR,
- sizeof (struct month), struct_month_cmp);
-}
-#endif
-
-/* Specify the amount of main memory to use when sorting. */
-static void
-specify_sort_size (char const *s)
-{
- uintmax_t n;
- char *suffix;
- enum strtol_error e = xstrtoumax (s, &suffix, 10, &n, "EgGkKmMPtTYZ");
-
- /* The default unit is KiB. */
- if (e == LONGINT_OK && ISDIGIT (suffix[-1]))
- {
- if (n <= UINTMAX_MAX / 1024)
- n *= 1024;
- else
- e = LONGINT_OVERFLOW;
- }
-
- /* A 'b' suffix means bytes; a '%' suffix means percent of memory. */
- if (e == LONGINT_INVALID_SUFFIX_CHAR && ISDIGIT (suffix[-1]) && ! suffix[1])
- switch (suffix[0])
- {
- case 'b':
- e = LONGINT_OK;
- break;
-
- case '%':
- {
- double mem = physmem_total () * n / 100;
-
- /* Use "<", not "<=", to avoid problems with rounding. */
- if (mem < UINTMAX_MAX)
- {
- n = mem;
- e = LONGINT_OK;
- }
- else
- e = LONGINT_OVERFLOW;
- }
- break;
- }
-
- if (e == LONGINT_OK)
- {
- /* If multiple sort sizes are specified, take the maximum, so
- that option order does not matter. */
- if (n < sort_size)
- return;
-
- sort_size = n;
- if (sort_size == n)
- {
- sort_size = MAX (sort_size, MIN_SORT_SIZE);
- return;
- }
-
- e = LONGINT_OVERFLOW;
- }
-
- STRTOL_FATAL_ERROR (s, _("sort size"), e);
-}
-
-/* Return the default sort size. */
-static size_t
-default_sort_size (void)
-{
- /* Let MEM be available memory or 1/8 of total memory, whichever
- is greater. */
- double avail = physmem_available ();
- double total = physmem_total ();
- double mem = MAX (avail, total / 8);
- struct rlimit rlimit;
-
- /* Let SIZE be MEM, but no more than the maximum object size or
- system resource limits. Avoid the MIN macro here, as it is not
- quite right when only one argument is floating point. Don't
- bother to check for values like RLIM_INFINITY since in practice
- they are not much less than SIZE_MAX. */
- size_t size = SIZE_MAX;
- if (mem < size)
- size = mem;
- if (getrlimit (RLIMIT_DATA, &rlimit) == 0 && rlimit.rlim_cur < size)
- size = rlimit.rlim_cur;
-#ifdef RLIMIT_AS
- if (getrlimit (RLIMIT_AS, &rlimit) == 0 && rlimit.rlim_cur < size)
- size = rlimit.rlim_cur;
-#endif
-
- /* Leave a large safety margin for the above limits, as failure can
- occur when they are exceeded. */
- size /= 2;
-
-#ifdef RLIMIT_RSS
- /* Leave a 1/16 margin for RSS to leave room for code, stack, etc.
- Exceeding RSS is not fatal, but can be quite slow. */
- if (getrlimit (RLIMIT_RSS, &rlimit) == 0 && rlimit.rlim_cur / 16 * 15 < size)
- size = rlimit.rlim_cur / 16 * 15;
-#endif
-
- /* Use no less than the minimum. */
- return MAX (size, MIN_SORT_SIZE);
-}
-
-/* Return the sort buffer size to use with the input files identified
- by FPS and FILES, which are alternate paths to the same files.
- NFILES gives the number of input files; NFPS may be less. Assume
- that each input line requires LINE_BYTES extra bytes' worth of line
- information. Do not exceed a bound on the size: if the bound is
- not specified by the user, use a default. */
-
-static size_t
-sort_buffer_size (FILE *const *fps, int nfps,
- char *const *files, int nfiles,
- size_t line_bytes)
-{
- /* A bound on the input size. If zero, the bound hasn't been
- determined yet. */
- static size_t size_bound;
-
- /* In the worst case, each input byte is a newline. */
- size_t worst_case_per_input_byte = line_bytes + 1;
-
- /* Keep enough room for one extra input line and an extra byte.
- This extra room might be needed when preparing to read EOF. */
- size_t size = worst_case_per_input_byte + 1;
-
- int i;
-
- for (i = 0; i < nfiles; i++)
- {
- struct stat st;
- off_t file_size;
- size_t worst_case;
-
- if ((i < nfps ? fstat (fileno (fps[i]), &st)
- : STREQ (files[i], "-") ? fstat (STDIN_FILENO, &st)
- : stat (files[i], &st))
- != 0)
- die (_("stat failed"), files[i]);
-
- if (S_ISREG (st.st_mode))
- file_size = st.st_size;
- else
- {
- /* The file has unknown size. If the user specified a sort
- buffer size, use that; otherwise, guess the size. */
- if (sort_size)
- return sort_size;
- file_size = INPUT_FILE_SIZE_GUESS;
- }
-
- if (! size_bound)
- {
- size_bound = sort_size;
- if (! size_bound)
- size_bound = default_sort_size ();
- }
-
- /* Add the amount of memory needed to represent the worst case
- where the input consists entirely of newlines followed by a
- single non-newline. Check for overflow. */
- worst_case = file_size * worst_case_per_input_byte + 1;
- if (file_size != worst_case / worst_case_per_input_byte
- || size_bound - size <= worst_case)
- return size_bound;
- size += worst_case;
- }
-
- return size;
-}
-
-/* Initialize BUF. Reserve LINE_BYTES bytes for each line; LINE_BYTES
- must be at least sizeof (struct line). Allocate ALLOC bytes
- initially. */
-
-static void
-initbuf (struct buffer *buf, size_t line_bytes, size_t alloc)
-{
- /* Ensure that the line array is properly aligned. If the desired
- size cannot be allocated, repeatedly halve it until allocation
- succeeds. The smaller allocation may hurt overall performance,
- but that's better than failing. */
- for (;;)
- {
- alloc += sizeof (struct line) - alloc % sizeof (struct line);
- buf->buf = malloc (alloc);
- if (buf->buf)
- break;
- alloc /= 2;
- if (alloc <= line_bytes + 1)
- xalloc_die ();
- }
-
- buf->line_bytes = line_bytes;
- buf->alloc = alloc;
- buf->used = buf->left = buf->nlines = 0;
- buf->eof = false;
-}
-
-/* Return one past the limit of the line array. */
-
-static inline struct line *
-buffer_linelim (struct buffer const *buf)
-{
- return (struct line *) (buf->buf + buf->alloc);
-}
-
-/* Return a pointer to the first character of the field specified
- by KEY in LINE. */
-
-static char *
-begfield_uni (const struct line *line, const struct keyfield *key)
-{
- register char *ptr = line->text, *lim = ptr + line->length - 1;
- register size_t sword = key->sword;
- register size_t schar = key->schar;
- register size_t remaining_bytes;
-
- /* The leading field separator itself is included in a field when -t
- is absent. */
-
- if (!tab_default)
- while (ptr < lim && sword--)
- {
- while (ptr < lim && *ptr != tab[0])
- ++ptr;
- if (ptr < lim)
- ++ptr;
- }
- else
- while (ptr < lim && sword--)
- {
- while (ptr < lim && blanks[to_uchar (*ptr)])
- ++ptr;
- while (ptr < lim && !blanks[to_uchar (*ptr)])
- ++ptr;
- }
-
- if (key->skipsblanks)
- while (ptr < lim && blanks[to_uchar (*ptr)])
- ++ptr;
-
- /* Advance PTR by SCHAR (if possible), but no further than LIM. */
- remaining_bytes = lim - ptr;
- if (schar < remaining_bytes)
- ptr += schar;
- else
- ptr = lim;
-
- return ptr;
-}
-
-#if HAVE_MBRTOWC
-static char *
-begfield_mb (const struct line *line, const struct keyfield *key)
-{
- int i;
- char *ptr = line->text, *lim = ptr + line->length - 1;
- size_t sword = key->sword;
- size_t schar = key->schar;
- size_t mblength;
- mbstate_t state;
-
- memset (&state, '\0', sizeof(mbstate_t));
-
- if (!tab_default)
- while (ptr < lim && sword--)
- {
- while (ptr < lim && memcmp (ptr, tab, tab_length) != 0)
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
- ptr += mblength;
- }
- if (ptr < lim)
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
- ptr += mblength;
- }
- }
- else
- while (ptr < lim && sword--)
- {
- while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
- ptr += mblength;
- if (ptr < lim)
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
- ptr += mblength;
- }
- while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength))
- ptr += mblength;
- }
-
- if (key->skipsblanks)
- while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
- ptr += mblength;
-
- for (i = 0; i < schar; i++)
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-
- if (ptr + mblength > lim)
- break;
- else
- ptr += mblength;
- }
-
- return ptr;
-}
-#endif
-
-/* Return the limit of (a pointer to the first character after) the field
- in LINE specified by KEY. */
-
-static char *
-limfield_uni (const struct line *line, const struct keyfield *key)
-{
- register char *ptr = line->text, *lim = ptr + line->length - 1;
- register size_t eword = key->eword, echar = key->echar;
- register size_t remaining_bytes;
-
- /* Move PTR past EWORD fields or to one past the last byte on LINE,
- whichever comes first. If there are more than EWORD fields, leave
- PTR pointing at the beginning of the field having zero-based index,
- EWORD. If a delimiter character was specified (via -t), then that
- `beginning' is the first character following the delimiting TAB.
- Otherwise, leave PTR pointing at the first `blank' character after
- the preceding field. */
- if (!tab_default)
- while (ptr < lim && eword--)
- {
- while (ptr < lim && *ptr != tab[0])
- ++ptr;
- if (ptr < lim && (eword | echar))
- ++ptr;
- }
- else
- while (ptr < lim && eword--)
- {
- while (ptr < lim && blanks[to_uchar (*ptr)])
- ++ptr;
- while (ptr < lim && !blanks[to_uchar (*ptr)])
- ++ptr;
- }
-
-#ifdef POSIX_UNSPECIFIED
- /* The following block of code makes GNU sort incompatible with
- standard Unix sort, so it's ifdef'd out for now.
- The POSIX spec isn't clear on how to interpret this.
- FIXME: request clarification.
-
- From: kwzh@gnu.ai.mit.edu (Karl Heuer)
- Date: Thu, 30 May 96 12:20:41 -0400
- [Translated to POSIX 1003.1-2001 terminology by Paul Eggert.]
-
- [...]I believe I've found another bug in `sort'.
-
- $ cat /tmp/sort.in
- a b c 2 d
- pq rs 1 t
- $ textutils-1.15/src/sort -k1.7,1.7 </tmp/sort.in
- a b c 2 d
- pq rs 1 t
- $ /bin/sort -k1.7,1.7 </tmp/sort.in
- pq rs 1 t
- a b c 2 d
-
- Unix sort produced the answer I expected: sort on the single character
- in column 7. GNU sort produced different results, because it disagrees
- on the interpretation of the key-end spec "M.N". Unix sort reads this
- as "skip M-1 fields, then N-1 characters"; but GNU sort wants it to mean
- "skip M-1 fields, then either N-1 characters or the rest of the current
- field, whichever comes first". This extra clause applies only to
- key-ends, not key-starts.
- */
-
- /* Make LIM point to the end of (one byte past) the current field. */
- if (!tab_default)
- {
- char *newlim;
- newlim = memchr (ptr, tab[0], lim - ptr);
- if (newlim)
- lim = newlim;
- }
- else
- {
- char *newlim;
- newlim = ptr;
- while (newlim < lim && blanks[to_uchar (*newlim)])
- ++newlim;
- while (newlim < lim && !blanks[to_uchar (*newlim)])
- ++newlim;
- lim = newlim;
- }
-#endif
-
- /* If we're ignoring leading blanks when computing the End
- of the field, don't start counting bytes until after skipping
- past any leading blanks. */
- if (key->skipeblanks)
- while (ptr < lim && blanks[to_uchar (*ptr)])
- ++ptr;
-
- /* Advance PTR by ECHAR (if possible), but no further than LIM. */
- remaining_bytes = lim - ptr;
- if (echar < remaining_bytes)
- ptr += echar;
- else
- ptr = lim;
-
- return ptr;
-}
-
-#if HAVE_MBRTOWC
-static char *
-limfield_mb (const struct line *line, const struct keyfield *key)
-{
- char *ptr = line->text, *lim = ptr + line->length - 1;
- size_t eword = key->eword, echar = key->echar;
- int i;
- size_t mblength;
- mbstate_t state;
-
- memset (&state, '\0', sizeof(mbstate_t));
-
- if (!tab_default)
- while (ptr < lim && eword--)
- {
- while (ptr < lim && memcmp (ptr, tab, tab_length) != 0)
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
- ptr += mblength;
- }
- if (ptr < lim && (eword | echar))
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
- ptr += mblength;
- }
- }
- else
- while (ptr < lim && eword--)
- {
- while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
- ptr += mblength;
- if (ptr < lim)
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
- ptr += mblength;
- }
- while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength))
- ptr += mblength;
- }
-
-
-# ifdef POSIX_UNSPECIFIED
- /* Make LIM point to the end of (one byte past) the current field. */
- if (!tab_default)
- {
- char *newlim, *p;
-
- newlim = NULL;
- for (p = ptr; p < lim;)
- {
- if (memcmp (p, tab, tab_length) == 0)
- {
- newlim = p;
- break;
- }
-
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
- p += mblength;
- }
- }
- else
- {
- char *newlim;
- newlim = ptr;
-
- while (newlim < lim && ismbblank (newlim, lim - newlim, &mblength))
- newlim += mblength;
- if (ptr < lim)
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
- ptr += mblength;
- }
- while (newlim < lim && !ismbblank (newlim, lim - newlim, &mblength))
- newlim += mblength;
- lim = newlim;
- }
-# endif
-
- /* If we're skipping leading blanks, don't start counting characters
- * until after skipping past any leading blanks. */
- if (key->skipeblanks)
- while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
- ptr += mblength;
-
- memset (&state, '\0', sizeof(mbstate_t));
-
- /* Advance PTR by ECHAR (if possible), but no further than LIM. */
- for (i = 0; i < echar; i++)
- {
- GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-
- if (ptr + mblength > lim)
- break;
- else
- ptr += mblength;
- }
-
- return ptr;
-}
-#endif
-
-/* Fill BUF reading from FP, moving buf->left bytes from the end
- of buf->buf to the beginning first. If EOF is reached and the
- file wasn't terminated by a newline, supply one. Set up BUF's line
- table too. FILE is the name of the file corresponding to FP.
- Return true if some input was read. */
-
-static bool
-fillbuf (struct buffer *buf, register FILE *fp, char const *file)
-{
- struct keyfield const *key = keylist;
- char eol = eolchar;
- size_t line_bytes = buf->line_bytes;
- size_t mergesize = merge_buffer_size - MIN_MERGE_BUFFER_SIZE;
-
- if (buf->eof)
- return false;
-
- if (buf->used != buf->left)
- {
- memmove (buf->buf, buf->buf + buf->used - buf->left, buf->left);
- buf->used = buf->left;
- buf->nlines = 0;
- }
-
- for (;;)
- {
- char *ptr = buf->buf + buf->used;
- struct line *linelim = buffer_linelim (buf);
- struct line *line = linelim - buf->nlines;
- size_t avail = (char *) linelim - buf->nlines * line_bytes - ptr;
- char *line_start = buf->nlines ? line->text + line->length : buf->buf;
-
- while (line_bytes + 1 < avail)
- {
- /* Read as many bytes as possible, but do not read so many
- bytes that there might not be enough room for the
- corresponding line array. The worst case is when the
- rest of the input file consists entirely of newlines,
- except that the last byte is not a newline. */
- size_t readsize = (avail - 1) / (line_bytes + 1);
- size_t bytes_read = fread (ptr, 1, readsize, fp);
- char *ptrlim = ptr + bytes_read;
- char *p;
- avail -= bytes_read;
-
- if (bytes_read != readsize)
- {
- if (ferror (fp))
- die (_("read failed"), file);
- if (feof (fp))
- {
- buf->eof = true;
- if (buf->buf == ptrlim)
- return false;
- if (ptrlim[-1] != eol)
- *ptrlim++ = eol;
- }
- }
-
- /* Find and record each line in the just-read input. */
- while ((p = memchr (ptr, eol, ptrlim - ptr)))
- {
- ptr = p + 1;
- line--;
- line->text = line_start;
- line->length = ptr - line_start;
- mergesize = MAX (mergesize, line->length);
- avail -= line_bytes;
-
- if (key)
- {
- /* Precompute the position of the first key for
- efficiency. */
- line->keylim = (key->eword == SIZE_MAX
- ? p
- : limfield (line, key));
-
- if (key->sword != SIZE_MAX)
- line->keybeg = begfield (line, key);
- else
- {
- if (key->skipsblanks)
-#if HAVE_MBRTOWC
- {
- if (MB_CUR_MAX > 1)
- {
- size_t mblength;
-
- while (ismbblank (line_start, ptr - line_start, &mblength))
- line_start += mblength;
- }
- else
-#endif
- {
- while (blanks[to_uchar (*line_start)])
- line_start++;
- }
- }
- line->keybeg = line_start;
- }
- }
-
- line_start = ptr;
- }
-
- ptr = ptrlim;
- if (buf->eof)
- break;
- }
-
- buf->used = ptr - buf->buf;
- buf->nlines = buffer_linelim (buf) - line;
- if (buf->nlines != 0)
- {
- buf->left = ptr - line_start;
- merge_buffer_size = mergesize + MIN_MERGE_BUFFER_SIZE;
- return true;
- }
-
- /* The current input line is too long to fit in the buffer.
- Double the buffer size and try again. */
- buf->buf = x2nrealloc (buf->buf, &buf->alloc, sizeof *(buf->buf));
- }
-}
-
-/* Compare strings A and B containing decimal fractions < 1. Each string
- should begin with a decimal point followed immediately by the digits
- of the fraction. Strings not of this form are considered to be zero. */
-
-/* The goal here, is to take two numbers a and b... compare these
- in parallel. Instead of converting each, and then comparing the
- outcome. Most likely stopping the comparison before the conversion
- is complete. The algorithm used, in the old sort:
-
- Algorithm: fraccompare
- Action : compare two decimal fractions
- accepts : char *a, char *b
- returns : -1 if a<b, 0 if a=b, 1 if a>b.
- implement:
-
- if *a == decimal_point AND *b == decimal_point
- find first character different in a and b.
- if both are digits, return the difference *a - *b.
- if *a is a digit
- skip past zeros
- if digit return 1, else 0
- if *b is a digit
- skip past zeros
- if digit return -1, else 0
- if *a is a decimal_point
- skip past decimal_point and zeros
- if digit return 1, else 0
- if *b is a decimal_point
- skip past decimal_point and zeros
- if digit return -1, else 0
- return 0 */
-
-static int
-fraccompare (register const char *a, register const char *b)
-{
- if (*a == decimal_point && *b == decimal_point)
- {
- while (*++a == *++b)
- if (! ISDIGIT (*a))
- return 0;
- if (ISDIGIT (*a) && ISDIGIT (*b))
- return *a - *b;
- if (ISDIGIT (*a))
- goto a_trailing_nonzero;
- if (ISDIGIT (*b))
- goto b_trailing_nonzero;
- return 0;
- }
- else if (*a++ == decimal_point)
- {
- a_trailing_nonzero:
- while (*a == NUMERIC_ZERO)
- a++;
- return ISDIGIT (*a);
- }
- else if (*b++ == decimal_point)
- {
- b_trailing_nonzero:
- while (*b == NUMERIC_ZERO)
- b++;
- return - ISDIGIT (*b);
- }
- return 0;
-}
-
-/* Compare strings A and B as numbers without explicitly converting them to
- machine numbers. Comparatively slow for short strings, but asymptotically
- hideously fast. */
-
-static int
-numcompare (register const char *a, register const char *b)
-{
- char tmpa;
- char tmpb;
- int tmp;
- size_t log_a;
- size_t log_b;
-
-#if HAVE_MBRTOWC
- if (MB_CUR_MAX > 1)
- {
- size_t mblength;
- size_t alen = strnlen (a, MB_LEN_MAX);
- size_t blen = strnlen (b, MB_LEN_MAX);
-
- while (ismbblank (a, alen, &mblength))
- a += mblength, alen -= mblength;
- while (ismbblank (b, blen, &mblength))
- b += mblength, blen -= mblength;
-
- tmpa = *a;
- tmpb = *b;
- }
- else
-#endif
- {
- tmpa = *a;
- tmpb = *b;
-
- while (blanks[to_uchar (tmpa)])
- tmpa = *++a;
- while (blanks[to_uchar (tmpb)])
- tmpb = *++b;
- }
-
- if (tmpa == NEGATION_SIGN)
- {
- do
- tmpa = *++a;
- while (tmpa == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpa));
- if (tmpb != NEGATION_SIGN)
- {
- if (tmpa == decimal_point)
- do
- tmpa = *++a;
- while (tmpa == NUMERIC_ZERO);
- if (ISDIGIT (tmpa))
- return -1;
- while (tmpb == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpb))
- tmpb = *++b;
- if (tmpb == decimal_point)
- do
- tmpb = *++b;
- while (tmpb == NUMERIC_ZERO);
- if (ISDIGIT (tmpb))
- return -1;
- return 0;
- }
- do
- tmpb = *++b;
- while (tmpb == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpb));
-
- while (tmpa == tmpb && ISDIGIT (tmpa))
- {
- do
- tmpa = *++a;
- while (IS_THOUSANDS_SEP (tmpa));
- do
- tmpb = *++b;
- while (IS_THOUSANDS_SEP (tmpb));
- }
-
- if ((tmpa == decimal_point && !ISDIGIT (tmpb))
- || (tmpb == decimal_point && !ISDIGIT (tmpa)))
- return -fraccompare (a, b);
-
- tmp = tmpb - tmpa;
-
- for (log_a = 0; ISDIGIT (tmpa); ++log_a)
- do
- tmpa = *++a;
- while (IS_THOUSANDS_SEP (tmpa));
-
- for (log_b = 0; ISDIGIT (tmpb); ++log_b)
- do
- tmpb = *++b;
- while (IS_THOUSANDS_SEP (tmpb));
-
- if (log_a != log_b)
- return log_a < log_b ? 1 : -1;
-
- if (!log_a)
- return 0;
-
- return tmp;
- }
- else if (tmpb == NEGATION_SIGN)
- {
- do
- tmpb = *++b;
- while (tmpb == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpb));
- if (tmpb == decimal_point)
- do
- tmpb = *++b;
- while (tmpb == NUMERIC_ZERO);
- if (ISDIGIT (tmpb))
- return 1;
- while (tmpa == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpa))
- tmpa = *++a;
- if (tmpa == decimal_point)
- do
- tmpa = *++a;
- while (tmpa == NUMERIC_ZERO);
- if (ISDIGIT (tmpa))
- return 1;
- return 0;
- }
- else
- {
- while (tmpa == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpa))
- tmpa = *++a;
- while (tmpb == NUMERIC_ZERO || IS_THOUSANDS_SEP (tmpb))
- tmpb = *++b;
-
- while (tmpa == tmpb && ISDIGIT (tmpa))
- {
- do
- tmpa = *++a;
- while (IS_THOUSANDS_SEP (tmpa));
- do
- tmpb = *++b;
- while (IS_THOUSANDS_SEP (tmpb));
- }
-
- if ((tmpa == decimal_point && !ISDIGIT (tmpb))
- || (tmpb == decimal_point && !ISDIGIT (tmpa)))
- return fraccompare (a, b);
-
- tmp = tmpa - tmpb;
-
- for (log_a = 0; ISDIGIT (tmpa); ++log_a)
- do
- tmpa = *++a;
- while (IS_THOUSANDS_SEP (tmpa));
-
- for (log_b = 0; ISDIGIT (tmpb); ++log_b)
- do
- tmpb = *++b;
- while (IS_THOUSANDS_SEP (tmpb));
-
- if (log_a != log_b)
- return log_a < log_b ? -1 : 1;
-
- if (!log_a)
- return 0;
-
- return tmp;
- }
-}
-
-static int
-general_numcompare (const char *sa, const char *sb)
-{
- /* FIXME: add option to warn about failed conversions. */
- /* FIXME: maybe add option to try expensive FP conversion
- only if A and B can't be compared more cheaply/accurately. */
-
- char *bufa, *ea;
- char *bufb, *eb;
- double a;
- double b;
-
- char *p;
- struct lconv *lconvp = localeconv ();
- size_t thousands_sep_len = strlen (lconvp->thousands_sep);
-
- bufa = (char *) xmalloc (strlen (sa) + 1);
- bufb = (char *) xmalloc (strlen (sb) + 1);
- strcpy (bufa, sa);
- strcpy (bufb, sb);
-
- if (force_general_numcompare)
- {
- while (1)
- {
- a = strtod (bufa, &ea);
- if (memcmp (ea, lconvp->thousands_sep, thousands_sep_len) == 0)
- {
- for (p = ea; *(p + thousands_sep_len) != '\0'; p++)
- *p = *(p + thousands_sep_len);
- *p = '\0';
- continue;
- }
- break;
- }
-
- while (1)
- {
- b = strtod (bufb, &eb);
- if (memcmp (eb, lconvp->thousands_sep, thousands_sep_len) == 0)
- {
- for (p = eb; *(p + thousands_sep_len) != '\0'; p++)
- *p = *(p + thousands_sep_len);
- *p = '\0';
- continue;
- }
- break;
- }
- }
- else
- {
- a = strtod (bufa, &ea);
- b = strtod (bufb, &eb);
- }
-
- /* Put conversion errors at the start of the collating sequence. */
- free (bufa);
- free (bufb);
- if (bufa == ea)
- return bufb == eb ? 0 : -1;
- if (bufb == eb)
- return 1;
-
- /* Sort numbers in the usual way, where -0 == +0. Put NaNs after
- conversion errors but before numbers; sort them by internal
- bit-pattern, for lack of a more portable alternative. */
- return (a < b ? -1
- : a > b ? 1
- : a == b ? 0
- : b == b ? -1
- : a == a ? 1
- : memcmp ((char *) &a, (char *) &b, sizeof a));
-}
-
-/* Return an integer in 1..12 of the month name S with length LEN.
- Return 0 if the name in S is not recognized. */
-
-static int
-getmonth_uni (const char *s, size_t len)
-{
- char *month;
- register size_t i;
- register int lo = 0, hi = MONTHS_PER_YEAR, result;
-
- while (len > 0 && blanks[to_uchar (*s)])
- {
- ++s;
- --len;
- }
-
- if (len == 0)
- return 0;
-
- month = alloca (len + 1);
- for (i = 0; i < len; ++i)
- month[i] = fold_toupper[to_uchar (s[i])];
- month[len] = '\0';
-
- do
- {
- int ix = (lo + hi) / 2;
-
- if (strncmp (month, monthtab[ix].name, strlen (monthtab[ix].name)) < 0)
- hi = ix;
- else
- lo = ix;
- }
- while (hi - lo > 1);
-
- result = (!strncmp (month, monthtab[lo].name, strlen (monthtab[lo].name))
- ? monthtab[lo].val : 0);
-
- return result;
-}
-
-#if HAVE_MBRTOWC
-static int
-getmonth_mb (const char *s, size_t len)
-{
- char *month;
- register size_t i;
- register int lo = 0, hi = MONTHS_PER_YEAR, result;
- char *tmp;
- size_t wclength, mblength;
- const char **pp;
- const wchar_t **wpp;
- wchar_t *month_wcs;
- mbstate_t state;
-
- while (len > 0 && ismbblank (s, len, &mblength))
- {
- s += mblength;
- len -= mblength;
- }
-
- if (len == 0)
- return 0;
-
- month = (char *) alloca (len + 1);
-
- tmp = (char *) alloca (len + 1);
- memcpy (tmp, s, len);
- tmp[len] = '\0';
- pp = (const char **)&tmp;
- month_wcs = (wchar_t *) alloca ((len + 1) * sizeof (wchar_t));
- memset (&state, '\0', sizeof(mbstate_t));
-
- wclength = mbsrtowcs (month_wcs, pp, len + 1, &state);
- assert (wclength != (size_t)-1 && *pp == NULL);
-
- for (i = 0; i < wclength; i++)
- month_wcs[i] = towupper(month_wcs[i]);
- month_wcs[i] = L'\0';
-
- wpp = (const wchar_t **)&month_wcs;
-
- mblength = wcsrtombs (month, wpp, len + 1, &state);
- assert (mblength != (-1) && *wpp == NULL);
-
- do
- {
- int ix = (lo + hi) / 2;
-
- if (strncmp (month, monthtab[ix].name, strlen (monthtab[ix].name)) < 0)
- hi = ix;
- else
- lo = ix;
- }
- while (hi - lo > 1);
-
- result = (!strncmp (month, monthtab[lo].name, strlen (monthtab[lo].name))
- ? monthtab[lo].val : 0);
-
- return result;
-}
-#endif
-
-/* Compare two lines A and B trying every key in sequence until there
- are no more keys or a difference is found. */
-
-static int
-keycompare_uni (const struct line *a, const struct line *b)
-{
- struct keyfield const *key = keylist;
-
- /* For the first iteration only, the key positions have been
- precomputed for us. */
- register char *texta = a->keybeg;
- register char *textb = b->keybeg;
- register char *lima = a->keylim;
- register char *limb = b->keylim;
-
- int diff;
-
- for (;;)
- {
- register char const *translate = key->translate;
- register bool const *ignore = key->ignore;
-
- /* Find the lengths. */
- size_t lena = lima <= texta ? 0 : lima - texta;
- size_t lenb = limb <= textb ? 0 : limb - textb;
-
- /* Actually compare the fields. */
- if (key->numeric | key->general_numeric)
- {
- char savea = *lima, saveb = *limb;
-
- *lima = *limb = '\0';
- diff = ((key->numeric ? numcompare : general_numcompare)
- (texta, textb));
- *lima = savea, *limb = saveb;
- }
- else if (key->month)
- diff = getmonth (texta, lena) - getmonth (textb, lenb);
- /* Sorting like this may become slow, so in a simple locale the user
- can select a faster sort that is similar to ascii sort */
- else if (HAVE_SETLOCALE && hard_LC_COLLATE)
- {
- if (ignore || translate)
- {
- char *copy_a = alloca (lena + 1 + lenb + 1);
- char *copy_b = copy_a + lena + 1;
- size_t new_len_a, new_len_b, i;
-
- /* Ignore and/or translate chars before comparing. */
- for (new_len_a = new_len_b = i = 0; i < MAX (lena, lenb); i++)
- {
- if (i < lena)
- {
- copy_a[new_len_a] = (translate
- ? translate[to_uchar (texta[i])]
- : texta[i]);
- if (!ignore || !ignore[to_uchar (texta[i])])
- ++new_len_a;
- }
- if (i < lenb)
- {
- copy_b[new_len_b] = (translate
- ? translate[to_uchar (textb[i])]
- : textb [i]);
- if (!ignore || !ignore[to_uchar (textb[i])])
- ++new_len_b;
- }
- }
-
- diff = xmemcoll (copy_a, new_len_a, copy_b, new_len_b);
- }
- else if (lena == 0)
- diff = - NONZERO (lenb);
- else if (lenb == 0)
- goto greater;
- else
- diff = xmemcoll (texta, lena, textb, lenb);
- }
- else if (ignore)
- {
-#define CMP_WITH_IGNORE(A, B) \
- do \
- { \
- for (;;) \
- { \
- while (texta < lima && ignore[to_uchar (*texta)]) \
- ++texta; \
- while (textb < limb && ignore[to_uchar (*textb)]) \
- ++textb; \
- if (! (texta < lima && textb < limb)) \
- break; \
- diff = to_uchar (A) - to_uchar (B); \
- if (diff) \
- goto not_equal; \
- ++texta; \
- ++textb; \
- } \
- \
- diff = (texta < lima) - (textb < limb); \
- } \
- while (0)
-
- if (translate)
- CMP_WITH_IGNORE (translate[to_uchar (*texta)],
- translate[to_uchar (*textb)]);
- else
- CMP_WITH_IGNORE (*texta, *textb);
- }
- else if (lena == 0)
- diff = - NONZERO (lenb);
- else if (lenb == 0)
- goto greater;
- else
- {
- if (translate)
- {
- while (texta < lima && textb < limb)
- {
- diff = (to_uchar (translate[to_uchar (*texta++)])
- - to_uchar (translate[to_uchar (*textb++)]));
- if (diff)
- goto not_equal;
- }
- }
- else
- {
- diff = memcmp (texta, textb, MIN (lena, lenb));
- if (diff)
- goto not_equal;
- }
- diff = lena < lenb ? -1 : lena != lenb;
- }
-
- if (diff)
- goto not_equal;
-
- key = key->next;
- if (! key)
- break;
-
- /* Find the beginning and limit of the next field. */
- if (key->eword != SIZE_MAX)
- lima = limfield (a, key), limb = limfield (b, key);
- else
- lima = a->text + a->length - 1, limb = b->text + b->length - 1;
-
- if (key->sword != SIZE_MAX)
- texta = begfield (a, key), textb = begfield (b, key);
- else
- {
- texta = a->text, textb = b->text;
- if (key->skipsblanks)
- {
- while (texta < lima && blanks[to_uchar (*texta)])
- ++texta;
- while (textb < limb && blanks[to_uchar (*textb)])
- ++textb;
- }
- }
- }
-
- return 0;
-
- greater:
- diff = 1;
- not_equal:
- return key->reverse ? -diff : diff;
-}
-
-#if HAVE_MBRTOWC
-static int
-keycompare_mb (const struct line *a, const struct line *b)
-{
- struct keyfield *key = keylist;
-
- /* For the first iteration only, the key positions have been
- precomputed for us. */
- char *texta = a->keybeg;
- char *textb = b->keybeg;
- char *lima = a->keylim;
- char *limb = b->keylim;
-
- size_t mblength_a, mblength_b;
- wchar_t wc_a, wc_b;
- mbstate_t state_a, state_b;
-
- int diff;
-
- memset (&state_a, '\0', sizeof(mbstate_t));
- memset (&state_b, '\0', sizeof(mbstate_t));
-
- for (;;)
- {
- unsigned char *translate = (unsigned char *) key->translate;
- bool const *ignore = key->ignore;
-
- /* Find the lengths. */
- size_t lena = lima <= texta ? 0 : lima - texta;
- size_t lenb = limb <= textb ? 0 : limb - textb;
-
- /* Actually compare the fields. */
- if (key->numeric | key->general_numeric)
- {
- char savea = *lima, saveb = *limb;
-
- *lima = *limb = '\0';
- if (force_general_numcompare)
- diff = general_numcompare (texta, textb);
- else
- diff = ((key->numeric ? numcompare : general_numcompare)
- (texta, textb));
- *lima = savea, *limb = saveb;
- }
- else if (key->month)
- diff = getmonth (texta, lena) - getmonth (textb, lenb);
- else
- {
- if (ignore || translate)
- {
- char *copy_a = (char *) alloca (lena + 1 + lenb + 1);
- char *copy_b = copy_a + lena + 1;
- size_t new_len_a, new_len_b;
- size_t i, j;
-
- /* Ignore and/or translate chars before comparing. */
-# define IGNORE_CHARS(NEW_LEN, LEN, TEXT, COPY, WC, MBLENGTH, STATE) \
- do \
- { \
- wchar_t uwc; \
- char mbc[MB_LEN_MAX]; \
- mbstate_t state_wc; \
- \
- for (NEW_LEN = i = 0; i < LEN;) \
- { \
- mbstate_t state_bak; \
- \
- state_bak = STATE; \
- MBLENGTH = mbrtowc (&WC, TEXT + i, LEN - i, &STATE); \
- \
- if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1 \
- || MBLENGTH == 0) \
- { \
- if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1) \
- STATE = state_bak; \
- if (!ignore) \
- COPY[NEW_LEN++] = TEXT[i++]; \
- continue; \
- } \
- \
- if (ignore) \
- { \
- if ((ignore == nonprinting && !iswprint (WC)) \
- || (ignore == nondictionary \
- && !iswalnum (WC) && !iswblank (WC))) \
- { \
- i += MBLENGTH; \
- continue; \
- } \
- } \
- \
- if (translate) \
- { \
- \
- uwc = toupper(WC); \
- if (WC == uwc) \
- { \
- memcpy (mbc, TEXT + i, MBLENGTH); \
- i += MBLENGTH; \
- } \
- else \
- { \
- i += MBLENGTH; \
- WC = uwc; \
- memset (&state_wc, '\0', sizeof (mbstate_t)); \
- \
- MBLENGTH = wcrtomb (mbc, WC, &state_wc); \
- assert (MBLENGTH != (size_t)-1 && MBLENGTH != 0); \
- } \
- \
- for (j = 0; j < MBLENGTH; j++) \
- COPY[NEW_LEN++] = mbc[j]; \
- } \
- else \
- for (j = 0; j < MBLENGTH; j++) \
- COPY[NEW_LEN++] = TEXT[i++]; \
- } \
- COPY[NEW_LEN] = '\0'; \
- } \
- while (0)
- IGNORE_CHARS (new_len_a, lena, texta, copy_a,
- wc_a, mblength_a, state_a);
- IGNORE_CHARS (new_len_b, lenb, textb, copy_b,
- wc_b, mblength_b, state_b);
- diff = xmemcoll (copy_a, new_len_a, copy_b, new_len_b);
- }
- else if (lena == 0)
- diff = - NONZERO (lenb);
- else if (lenb == 0)
- goto greater;
- else
- diff = xmemcoll (texta, lena, textb, lenb);
- }
-
- if (diff)
- goto not_equal;
-
- key = key->next;
- if (! key)
- break;
-
- /* Find the beginning and limit of the next field. */
- if (key->eword != -1)
- lima = limfield (a, key), limb = limfield (b, key);
- else
- lima = a->text + a->length - 1, limb = b->text + b->length - 1;
-
- if (key->sword != -1)
- texta = begfield (a, key), textb = begfield (b, key);
- else
- {
- texta = a->text, textb = b->text;
- if (key->skipsblanks)
- {
- while (texta < lima && ismbblank (texta, lima - texta, &mblength_a))
- texta += mblength_a;
- while (textb < limb && ismbblank (textb, limb - textb, &mblength_b))
- textb += mblength_b;
- }
- }
- }
-
- return 0;
-
-greater:
- diff = 1;
-not_equal:
- return key->reverse ? -diff : diff;
-}
-#endif
-
-/* Compare two lines A and B, returning negative, zero, or positive
- depending on whether A compares less than, equal to, or greater than B. */
-
-static int
-compare (register const struct line *a, register const struct line *b)
-{
- int diff;
- size_t alen, blen;
-
- /* First try to compare on the specified keys (if any).
- The only two cases with no key at all are unadorned sort,
- and unadorned sort -r. */
- if (keylist)
- {
- diff = keycompare (a, b);
- alloca (0);
- if (diff | unique | stable)
- return diff;
- }
-
- /* If the keys all compare equal (or no keys were specified)
- fall through to the default comparison. */
- alen = a->length - 1, blen = b->length - 1;
-
- if (alen == 0)
- diff = - NONZERO (blen);
- else if (blen == 0)
- diff = 1;
- else if (HAVE_SETLOCALE && hard_LC_COLLATE)
- diff = xmemcoll (a->text, alen, b->text, blen);
- else if (! (diff = memcmp (a->text, b->text, MIN (alen, blen))))
- diff = alen < blen ? -1 : alen != blen;
-
- return reverse ? -diff : diff;
-}
-
-/* Check that the lines read from FILE_NAME come in order. Print a
- diagnostic (FILE_NAME, line number, contents of line) to stderr and return
- false if they are not in order. Otherwise, print no diagnostic
- and return true. */
-
-static bool
-check (char const *file_name)
-{
- FILE *fp = xfopen (file_name, "r");
- struct buffer buf; /* Input buffer. */
- struct line temp; /* Copy of previous line. */
- size_t alloc = 0;
- uintmax_t line_number = 0;
- struct keyfield const *key = keylist;
- bool nonunique = ! unique;
- bool ordered = true;
-
- initbuf (&buf, sizeof (struct line),
- MAX (merge_buffer_size, sort_size));
- temp.text = NULL;
-
- while (fillbuf (&buf, fp, file_name))
- {
- struct line const *line = buffer_linelim (&buf);
- struct line const *linebase = line - buf.nlines;
-
- /* Make sure the line saved from the old buffer contents is
- less than or equal to the first line of the new buffer. */
- if (alloc && nonunique <= compare (&temp, line - 1))
- {
- found_disorder:
- {
- struct line const *disorder_line = line - 1;
- uintmax_t disorder_line_number =
- buffer_linelim (&buf) - disorder_line + line_number;
- char hr_buf[INT_BUFSIZE_BOUND (uintmax_t)];
- fprintf (stderr, _("%s: %s:%s: disorder: "),
- program_name, file_name,
- umaxtostr (disorder_line_number, hr_buf));
- write_bytes (disorder_line->text, disorder_line->length, stderr,
- _("standard error"));
- ordered = false;
- break;
- }
- }
-
- /* Compare each line in the buffer with its successor. */
- while (linebase < --line)
- if (nonunique <= compare (line, line - 1))
- goto found_disorder;
-
- line_number += buf.nlines;
-
- /* Save the last line of the buffer. */
- if (alloc < line->length)
- {
- do
- {
- alloc *= 2;
- if (! alloc)
- {
- alloc = line->length;
- break;
- }
- }
- while (alloc < line->length);
-
- temp.text = xrealloc (temp.text, alloc);
- }
- memcpy (temp.text, line->text, line->length);
- temp.length = line->length;
- if (key)
- {
- temp.keybeg = temp.text + (line->keybeg - line->text);
- temp.keylim = temp.text + (line->keylim - line->text);
- }
- }
-
- xfclose (fp, file_name);
- free (buf.buf);
- if (temp.text)
- free (temp.text);
- return ordered;
-}
-
-/* Merge lines from FILES onto OFP. NFILES cannot be greater than
- NMERGE. Close input and output files before returning.
- OUTPUT_FILE gives the name of the output file. If it is NULL,
- the output file is standard output. If OFP is NULL, the output
- file has not been opened yet (or written to, if standard output). */
-
-static void
-mergefps (char **files, register int nfiles,
- FILE *ofp, const char *output_file)
-{
- FILE *fps[NMERGE]; /* Input streams for each file. */
- struct buffer buffer[NMERGE]; /* Input buffers for each file. */
- struct line saved; /* Saved line storage for unique check. */
- struct line const *savedline = NULL;
- /* &saved if there is a saved line. */
- size_t savealloc = 0; /* Size allocated for the saved line. */
- struct line const *cur[NMERGE]; /* Current line in each line table. */
- struct line const *base[NMERGE]; /* Base of each line table. */
- int ord[NMERGE]; /* Table representing a permutation of fps,
- such that cur[ord[0]] is the smallest line
- and will be next output. */
- register int i, j, t;
- struct keyfield const *key = keylist;
- saved.text = NULL;
-
- /* Read initial lines from each input file. */
- for (i = 0; i < nfiles; )
- {
- fps[i] = xfopen (files[i], "r");
- initbuf (&buffer[i], sizeof (struct line),
- MAX (merge_buffer_size, sort_size / nfiles));
- if (fillbuf (&buffer[i], fps[i], files[i]))
- {
- struct line const *linelim = buffer_linelim (&buffer[i]);
- cur[i] = linelim - 1;
- base[i] = linelim - buffer[i].nlines;
- i++;
- }
- else
- {
- /* fps[i] is empty; eliminate it from future consideration. */
- xfclose (fps[i], files[i]);
- zaptemp (files[i]);
- free (buffer[i].buf);
- --nfiles;
- for (j = i; j < nfiles; ++j)
- files[j] = files[j + 1];
- }
- }
-
- if (! ofp)
- ofp = xfopen (output_file, "w");
-
- /* Set up the ord table according to comparisons among input lines.
- Since this only reorders two items if one is strictly greater than
- the other, it is stable. */
- for (i = 0; i < nfiles; ++i)
- ord[i] = i;
- for (i = 1; i < nfiles; ++i)
- if (0 < compare (cur[ord[i - 1]], cur[ord[i]]))
- t = ord[i - 1], ord[i - 1] = ord[i], ord[i] = t, i = 0;
-
- /* Repeatedly output the smallest line until no input remains. */
- while (nfiles)
- {
- struct line const *smallest = cur[ord[0]];
-
- /* If uniquified output is turned on, output only the first of
- an identical series of lines. */
- if (unique)
- {
- if (savedline && compare (savedline, smallest))
- {
- savedline = 0;
- write_bytes (saved.text, saved.length, ofp, output_file);
- }
- if (!savedline)
- {
- savedline = &saved;
- if (savealloc < smallest->length)
- {
- do
- if (! savealloc)
- {
- savealloc = smallest->length;
- break;
- }
- while ((savealloc *= 2) < smallest->length);
-
- saved.text = xrealloc (saved.text, savealloc);
- }
- saved.length = smallest->length;
- memcpy (saved.text, smallest->text, saved.length);
- if (key)
- {
- saved.keybeg =
- saved.text + (smallest->keybeg - smallest->text);
- saved.keylim =
- saved.text + (smallest->keylim - smallest->text);
- }
- }
- }
- else
- write_bytes (smallest->text, smallest->length, ofp, output_file);
-
- /* Check if we need to read more lines into core. */
- if (base[ord[0]] < smallest)
- cur[ord[0]] = smallest - 1;
- else
- {
- if (fillbuf (&buffer[ord[0]], fps[ord[0]], files[ord[0]]))
- {
- struct line const *linelim = buffer_linelim (&buffer[ord[0]]);
- cur[ord[0]] = linelim - 1;
- base[ord[0]] = linelim - buffer[ord[0]].nlines;
- }
- else
- {
- /* We reached EOF on fps[ord[0]]. */
- for (i = 1; i < nfiles; ++i)
- if (ord[i] > ord[0])
- --ord[i];
- --nfiles;
- xfclose (fps[ord[0]], files[ord[0]]);
- zaptemp (files[ord[0]]);
- free (buffer[ord[0]].buf);
- for (i = ord[0]; i < nfiles; ++i)
- {
- fps[i] = fps[i + 1];
- files[i] = files[i + 1];
- buffer[i] = buffer[i + 1];
- cur[i] = cur[i + 1];
- base[i] = base[i + 1];
- }
- for (i = 0; i < nfiles; ++i)
- ord[i] = ord[i + 1];
- continue;
- }
- }
-
- /* The new line just read in may be larger than other lines
- already in core; push it back in the queue until we encounter
- a line larger than it. */
- for (i = 1; i < nfiles; ++i)
- {
- t = compare (cur[ord[0]], cur[ord[i]]);
- if (!t)
- t = ord[0] - ord[i];
- if (t < 0)
- break;
- }
- t = ord[0];
- for (j = 1; j < i; ++j)
- ord[j - 1] = ord[j];
- ord[i - 1] = t;
- }
-
- if (unique && savedline)
- {
- write_bytes (saved.text, saved.length, ofp, output_file);
- free (saved.text);
- }
-
- xfclose (ofp, output_file);
-}
-
-/* Merge into T the two sorted arrays of lines LO (with NLO members)
- and HI (with NHI members). T, LO, and HI point just past their
- respective arrays, and the arrays are in reverse order. NLO and
- NHI must be positive, and HI - NHI must equal T - (NLO + NHI). */
-
-static inline void
-mergelines (struct line *t,
- struct line const *lo, size_t nlo,
- struct line const *hi, size_t nhi)
-{
- for (;;)
- if (compare (lo - 1, hi - 1) <= 0)
- {
- *--t = *--lo;
- if (! --nlo)
- {
- /* HI - NHI equalled T - (NLO + NHI) when this function
- began. Therefore HI must equal T now, and there is no
- need to copy from HI to T. */
- return;
- }
- }
- else
- {
- *--t = *--hi;
- if (! --nhi)
- {
- do
- *--t = *--lo;
- while (--nlo);
-
- return;
- }
- }
-}
-
-/* Sort the array LINES with NLINES members, using TEMP for temporary space.
- NLINES must be at least 2.
- The input and output arrays are in reverse order, and LINES and
- TEMP point just past the end of their respective arrays.
-
- Use a recursive divide-and-conquer algorithm, in the style
- suggested by Knuth volume 3 (2nd edition), exercise 5.2.4-23. Use
- the optimization suggested by exercise 5.2.4-10; this requires room
- for only 1.5*N lines, rather than the usual 2*N lines. Knuth
- writes that this memory optimization was originally published by
- D. A. Bell, Comp J. 1 (1958), 75. */
-
-static void
-sortlines (struct line *lines, size_t nlines, struct line *temp)
-{
- if (nlines == 2)
- {
- if (0 < compare (&lines[-1], &lines[-2]))
- {
- struct line tmp = lines[-1];
- lines[-1] = lines[-2];
- lines[-2] = tmp;
- }
- }
- else
- {
- size_t nlo = nlines / 2;
- size_t nhi = nlines - nlo;
- struct line *lo = lines;
- struct line *hi = lines - nlo;
- struct line *sorted_lo = temp;
-
- sortlines (hi, nhi, temp);
- if (1 < nlo)
- sortlines_temp (lo, nlo, sorted_lo);
- else
- sorted_lo[-1] = lo[-1];
-
- mergelines (lines, sorted_lo, nlo, hi, nhi);
- }
-}
-
-/* Like sortlines (LINES, NLINES, TEMP), except output into TEMP
- rather than sorting in place. */
-
-static void
-sortlines_temp (struct line *lines, size_t nlines, struct line *temp)
-{
- if (nlines == 2)
- {
- bool swap = (0 < compare (&lines[-1], &lines[-2]));
- temp[-1] = lines[-1 - swap];
- temp[-2] = lines[-2 + swap];
- }
- else
- {
- size_t nlo = nlines / 2;
- size_t nhi = nlines - nlo;
- struct line *lo = lines;
- struct line *hi = lines - nlo;
- struct line *sorted_hi = temp - nlo;
-
- sortlines_temp (hi, nhi, sorted_hi);
- if (1 < nlo)
- sortlines (lo, nlo, temp);
-
- mergelines (temp, lo, nlo, sorted_hi, nhi);
- }
-}
-
-/* Return the index of the first of NFILES FILES that is the same file
- as OUTFILE. If none can be the same, return NFILES.
-
- This test ensures that an otherwise-erroneous use like
- "sort -m -o FILE ... FILE ..." copies FILE before writing to it.
- It's not clear that POSIX requires this nicety.
- Detect common error cases, but don't try to catch obscure cases like
- "cat ... FILE ... | sort -m -o FILE"
- where traditional "sort" doesn't copy the input and where
- people should know that they're getting into trouble anyway.
- Catching these obscure cases would slow down performance in
- common cases. */
-
-static int
-first_same_file (char * const *files, int nfiles, char const *outfile)
-{
- int i;
- bool got_outstat = false;
- struct stat instat, outstat;
-
- for (i = 0; i < nfiles; i++)
- {
- bool standard_input = STREQ (files[i], "-");
-
- if (outfile && STREQ (outfile, files[i]) && ! standard_input)
- return i;
-
- if (! got_outstat)
- {
- got_outstat = true;
- if ((outfile
- ? stat (outfile, &outstat)
- : fstat (STDOUT_FILENO, &outstat))
- != 0)
- return nfiles;
- }
-
- if (((standard_input
- ? fstat (STDIN_FILENO, &instat)
- : stat (files[i], &instat))
- == 0)
- && SAME_INODE (instat, outstat))
- return i;
- }
-
- return nfiles;
-}
-
-/* Merge NFILES FILES onto OUTPUT_FILE. However, merge at most
- MAX_MERGE input files directly onto OUTPUT_FILE. MAX_MERGE cannot
- exceed NMERGE. A null OUTPUT_FILE stands for standard output. */
-
-static void
-merge (char **files, int nfiles, int max_merge, char const *output_file)
-{
- while (max_merge < nfiles)
- {
- FILE *tfp;
- int i, t = 0;
- char *temp;
- for (i = 0; i < nfiles / NMERGE; ++i)
- {
- temp = create_temp_file (&tfp);
- mergefps (&files[i * NMERGE], NMERGE, tfp, temp);
- files[t++] = temp;
- }
- temp = create_temp_file (&tfp);
- mergefps (&files[i * NMERGE], nfiles % NMERGE, tfp, temp);
- files[t++] = temp;
- nfiles = t;
- if (nfiles == 1)
- break;
- }
-
- mergefps (files, nfiles, NULL, output_file);
-}
-
-/* Sort NFILES FILES onto OUTPUT_FILE. */
-
-static void
-sort (char * const *files, int nfiles, char const *output_file)
-{
- struct buffer buf;
- int n_temp_files = 0;
- bool output_file_created = false;
-
- buf.alloc = 0;
-
- while (nfiles)
- {
- char const *temp_output;
- char const *file = *files;
- FILE *fp = xfopen (file, "r");
- FILE *tfp;
- size_t bytes_per_line = (2 * sizeof (struct line)
- - sizeof (struct line) / 2);
-
- if (! buf.alloc)
- initbuf (&buf, bytes_per_line,
- sort_buffer_size (&fp, 1, files, nfiles, bytes_per_line));
- buf.eof = false;
- files++;
- nfiles--;
-
- while (fillbuf (&buf, fp, file))
- {
- struct line *line;
- struct line *linebase;
-
- if (buf.eof && nfiles
- && (bytes_per_line + 1
- < (buf.alloc - buf.used - bytes_per_line * buf.nlines)))
- {
- /* End of file, but there is more input and buffer room.
- Concatenate the next input file; this is faster in
- the usual case. */
- buf.left = buf.used;
- break;
- }
-
- line = buffer_linelim (&buf);
- linebase = line - buf.nlines;
- if (1 < buf.nlines)
- sortlines (line, buf.nlines, linebase);
- if (buf.eof && !nfiles && !n_temp_files && !buf.left)
- {
- xfclose (fp, file);
- tfp = xfopen (output_file, "w");
- temp_output = output_file;
- output_file_created = true;
- }
- else
- {
- ++n_temp_files;
- temp_output = create_temp_file (&tfp);
- }
-
- do
- {
- line--;
- write_bytes (line->text, line->length, tfp, temp_output);
- if (unique)
- while (linebase < line && compare (line, line - 1) == 0)
- line--;
- }
- while (linebase < line);
-
- xfclose (tfp, temp_output);
-
- if (output_file_created)
- goto finish;
- }
- xfclose (fp, file);
- }
-
- finish:
- free (buf.buf);
-
- if (! output_file_created)
- {
- int i = n_temp_files;
- struct tempnode *node;
- char **tempfiles = xnmalloc (n_temp_files, sizeof *tempfiles);
- for (node = temphead; i > 0; node = node->next)
- tempfiles[--i] = node->name;
- merge (tempfiles, n_temp_files, NMERGE, output_file);
- free (tempfiles);
- }
-}
-
-/* Insert key KEY at the end of the key list. */
-
-static void
-insertkey (struct keyfield *key)
-{
- struct keyfield **p;
-
- for (p = &keylist; *p; p = &(*p)->next)
- continue;
- *p = key;
- key->next = NULL;
-}
-
-/* Report a bad field specification SPEC, with extra info MSGID. */
-
-static void badfieldspec (char const *, char const *)
- ATTRIBUTE_NORETURN;
-static void
-badfieldspec (char const *spec, char const *msgid)
-{
- error (SORT_FAILURE, 0, _("%s: invalid field specification `%s'"),
- _(msgid), spec);
- abort ();
-}
-
-/* Parse the leading integer in STRING and store the resulting value
- (which must fit into size_t) into *VAL. Return the address of the
- suffix after the integer. If MSGID is NULL, return NULL after
- failure; otherwise, report MSGID and exit on failure. */
-
-static char const *
-parse_field_count (char const *string, size_t *val, char const *msgid)
-{
- char *suffix;
- uintmax_t n;
-
- switch (xstrtoumax (string, &suffix, 10, &n, ""))
- {
- case LONGINT_OK:
- case LONGINT_INVALID_SUFFIX_CHAR:
- *val = n;
- if (*val == n)
- break;
- /* Fall through. */
- case LONGINT_OVERFLOW:
- case LONGINT_OVERFLOW | LONGINT_INVALID_SUFFIX_CHAR:
- if (msgid)
- error (SORT_FAILURE, 0, _("%s: count `%.*s' too large"),
- _(msgid), (int) (suffix - string), string);
- return NULL;
-
- case LONGINT_INVALID:
- if (msgid)
- error (SORT_FAILURE, 0, _("%s: invalid count at start of `%s'"),
- _(msgid), string);
- return NULL;
- }
-
- return suffix;
-}
-
-/* Handle interrupts and hangups. */
-
-static void
-sighandler (int sig)
-{
-#ifndef SA_NOCLDSTOP
- signal (sig, SIG_IGN);
-#endif
-
- cleanup ();
-
- signal (sig, SIG_DFL);
- raise (sig);
-}
-
-/* Set the ordering options for KEY specified in S.
- Return the address of the first character in S that
- is not a valid ordering option.
- BLANKTYPE is the kind of blanks that 'b' should skip. */
-
-static char *
-set_ordering (register const char *s, struct keyfield *key,
- enum blanktype blanktype)
-{
- while (*s)
- {
- switch (*s)
- {
- case 'b':
- if (blanktype == bl_start || blanktype == bl_both)
- key->skipsblanks = true;
- if (blanktype == bl_end || blanktype == bl_both)
- key->skipeblanks = true;
- break;
- case 'd':
- key->ignore = nondictionary;
- break;
- case 'f':
- key->translate = fold_toupper;
- break;
- case 'g':
- key->general_numeric = true;
- break;
- case 'i':
- /* Option order should not matter, so don't let -i override
- -d. -d implies -i, but -i does not imply -d. */
- if (! key->ignore)
- key->ignore = nonprinting;
- break;
- case 'M':
- key->month = true;
- break;
- case 'n':
- key->numeric = true;
- break;
- case 'r':
- key->reverse = true;
- break;
- default:
- return (char *) s;
- }
- ++s;
- }
- return (char *) s;
-}
-
-static struct keyfield *
-new_key (void)
-{
- struct keyfield *key = xzalloc (sizeof *key);
- key->eword = SIZE_MAX;
- return key;
-}
-
-int
-main (int argc, char **argv)
-{
- struct keyfield *key;
- struct keyfield gkey;
- char const *s;
- int c = 0;
- bool checkonly = false;
- bool mergeonly = false;
- int nfiles = 0;
- bool posixly_correct = (getenv ("POSIXLY_CORRECT") != NULL);
- bool obsolete_usage = (posix2_version () < 200112);
- char const *short_options = (obsolete_usage
- ? COMMON_SHORT_OPTIONS "y::"
- : COMMON_SHORT_OPTIONS "y:");
- char *minus = "-", **files;
- char const *outfile = NULL;
-
- initialize_main (&argc, &argv);
- program_name = argv[0];
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-
- atexit (cleanup);
-
- initialize_exit_failure (SORT_FAILURE);
- atexit (close_stdout);
-
- hard_LC_COLLATE = hard_locale (LC_COLLATE);
-#if HAVE_NL_LANGINFO
- hard_LC_TIME = hard_locale (LC_TIME);
-#endif
-
-#if HAVE_SETLOCALE
- /* Let's get locale's representation of the decimal point */
- {
- struct lconv const *lconvp = localeconv ();
-
- decimal_point = *lconvp->decimal_point;
- if (! decimal_point || lconvp->decimal_point[1])
- {
- decimal_point = C_DECIMAL_POINT;
- if (lconvp->decimal_point[0] && lconvp->decimal_point[1])
- force_general_numcompare = 1;
- }
-
- /* We don't support multibyte thousands separators yet. */
- th_sep = *lconvp->thousands_sep;
- if (! th_sep || lconvp->thousands_sep[1])
- {
- th_sep = CHAR_MAX + 1;
- if (lconvp->thousands_sep[0] && lconvp->thousands_sep[1])
- force_general_numcompare = 1;
- }
- }
-#endif
-
-#if HAVE_MBRTOWC
- if (MB_CUR_MAX > 1)
- {
- inittables = inittables_mb;
- begfield = begfield_mb;
- limfield = limfield_mb;
- getmonth = getmonth_mb;
- keycompare = keycompare_mb;
- }
- else
-#endif
- {
- inittables = inittables_uni;
- begfield = begfield_uni;
- limfield = limfield_uni;
- keycompare = keycompare_uni;
- getmonth = getmonth_uni;
- }
-
- have_read_stdin = false;
- inittables ();
-
- {
- int i;
- static int const sig[] = { SIGHUP, SIGINT, SIGPIPE, SIGTERM };
- enum { nsigs = sizeof sig / sizeof sig[0] };
-
-#ifdef SA_NOCLDSTOP
- struct sigaction act;
-
- sigemptyset (&caught_signals);
- for (i = 0; i < nsigs; i++)
- {
- sigaction (sig[i], NULL, &act);
- if (act.sa_handler != SIG_IGN)
- sigaddset (&caught_signals, sig[i]);
- }
-
- act.sa_handler = sighandler;
- act.sa_mask = caught_signals;
- act.sa_flags = 0;
-
- for (i = 0; i < nsigs; i++)
- if (sigismember (&caught_signals, sig[i]))
- sigaction (sig[i], &act, NULL);
-#else
- for (i = 0; i < nsigs; i++)
- if (signal (sig[i], SIG_IGN) != SIG_IGN)
- signal (sig[i], sighandler);
-#endif
- }
-
- gkey.sword = gkey.eword = SIZE_MAX;
- gkey.ignore = NULL;
- gkey.translate = NULL;
- gkey.numeric = gkey.general_numeric = gkey.month = gkey.reverse = false;
- gkey.skipsblanks = gkey.skipeblanks = false;
-
- files = xnmalloc (argc, sizeof *files);
-
- for (;;)
- {
- /* Parse an operand as a file after "--" was seen; or if
- pedantic and a file was seen, unless the POSIX version
- predates 1003.1-2001 and -c was not seen and the operand is
- "-o FILE" or "-oFILE". */
-
- if (c == -1
- || (posixly_correct && nfiles != 0
- && ! (obsolete_usage
- && ! checkonly
- && optind != argc
- && argv[optind][0] == '-' && argv[optind][1] == 'o'
- && (argv[optind][2] || optind + 1 != argc)))
- || ((c = getopt_long (argc, argv, short_options,
- long_options, NULL))
- == -1))
- {
- if (argc <= optind)
- break;
- files[nfiles++] = argv[optind++];
- }
- else switch (c)
- {
- case 1:
- key = NULL;
- if (obsolete_usage && optarg[0] == '+')
- {
- /* Treat +POS1 [-POS2] as a key if possible; but silently
- treat an operand as a file if it is not a valid +POS1. */
- key = new_key ();
- s = parse_field_count (optarg + 1, &key->sword, NULL);
- if (s && *s == '.')
- s = parse_field_count (s + 1, &key->schar, NULL);
- if (! (key->sword | key->schar))
- key->sword = SIZE_MAX;
- if (! s || *set_ordering (s, key, bl_start))
- {
- free (key);
- key = NULL;
- }
- else
- {
- if (optind != argc && argv[optind][0] == '-'
- && ISDIGIT (argv[optind][1]))
- {
- char const *optarg1 = argv[optind++];
- s = parse_field_count (optarg1 + 1, &key->eword,
- N_("invalid number after `-'"));
- if (*s == '.')
- s = parse_field_count (s + 1, &key->echar,
- N_("invalid number after `.'"));
- if (*set_ordering (s, key, bl_end))
- badfieldspec (optarg1,
- N_("stray character in field spec"));
- }
- insertkey (key);
- }
- }
- if (! key)
- files[nfiles++] = optarg;
- break;
-
- case 'b':
- case 'd':
- case 'f':
- case 'g':
- case 'i':
- case 'M':
- case 'n':
- case 'r':
- {
- char str[2];
- str[0] = c;
- str[1] = '\0';
- set_ordering (str, &gkey, bl_both);
- }
- break;
-
- case 'c':
- checkonly = true;
- break;
-
- case 'k':
- key = new_key ();
-
- /* Get POS1. */
- s = parse_field_count (optarg, &key->sword,
- N_("invalid number at field start"));
- if (! key->sword--)
- {
- /* Provoke with `sort -k0' */
- badfieldspec (optarg, N_("field number is zero"));
- }
- if (*s == '.')
- {
- s = parse_field_count (s + 1, &key->schar,
- N_("invalid number after `.'"));
- if (! key->schar--)
- {
- /* Provoke with `sort -k1.0' */
- badfieldspec (optarg, N_("character offset is zero"));
- }
- }
- if (! (key->sword | key->schar))
- key->sword = SIZE_MAX;
- s = set_ordering (s, key, bl_start);
- if (*s != ',')
- {
- key->eword = SIZE_MAX;
- key->echar = 0;
- }
- else
- {
- /* Get POS2. */
- s = parse_field_count (s + 1, &key->eword,
- N_("invalid number after `,'"));
- if (! key->eword--)
- {
- /* Provoke with `sort -k1,0' */
- badfieldspec (optarg, N_("field number is zero"));
- }
- if (*s == '.')
- s = parse_field_count (s + 1, &key->echar,
- N_("invalid number after `.'"));
- else
- {
- /* `-k 2,3' is equivalent to `+1 -3'. */
- key->eword++;
- }
- s = set_ordering (s, key, bl_end);
- }
- if (*s)
- badfieldspec (optarg, N_("stray character in field spec"));
- insertkey (key);
- break;
-
- case 'm':
- mergeonly = true;
- break;
-
- case 'o':
- if (outfile && !STREQ (outfile, optarg))
- error (SORT_FAILURE, 0, _("multiple output files specified"));
- outfile = optarg;
- break;
-
- case 's':
- stable = true;
- break;
-
- case 'S':
- specify_sort_size (optarg);
- break;
-
- case 't':
- {
- char newtab[MB_LEN_MAX + 1];
- size_t newtab_length = 1;
- strncpy (newtab, optarg, MB_LEN_MAX);
- if (! newtab[0])
- error (SORT_FAILURE, 0, _("empty tab"));
-#if HAVE_MBRTOWC
- if (MB_CUR_MAX > 1)
- {
- wchar_t wc;
- mbstate_t state;
- size_t i;
-
- memset (&state, '\0', sizeof (mbstate_t));
- newtab_length = mbrtowc (&wc, newtab, strnlen (newtab, MB_LEN_MAX), &state);
- switch (newtab_length)
- {
- case (size_t) -1:
- case (size_t) -2:
- case 0:
- newtab_length = 1;
- }
-
- if (optarg[newtab_length])
- {
- /* Provoke with `sort -txx'. Complain about
- "multi-character tab" instead of "multibyte tab", so
- that the diagnostic's wording does not need to be
- changed once multibyte characters are supported. */
- error (SORT_FAILURE, 0, _("multi-character tab `%s'"),
- optarg);
- }
- }
- else
-#endif
-
- if (optarg[1])
- {
- if (STREQ (optarg, "\\0"))
- newtab[0] = '\0';
- else
- {
- /* Provoke with `sort -txx'. Complain about
- "multi-character tab" instead of "multibyte tab", so
- that the diagnostic's wording does not need to be
- changed once multibyte characters are supported. */
- error (SORT_FAILURE, 0, _("multi-character tab `%s'"),
- optarg);
- }
- }
- if (!tab_default && (tab_length != newtab_length
- || memcmp(tab, newtab, tab_length) != 0))
- error (SORT_FAILURE, 0, _("incompatible tabs"));
- memcpy(tab, newtab, newtab_length);
- tab_length = newtab_length;
- tab_default = false;
- }
- break;
-
- case 'T':
- add_temp_dir (optarg);
- break;
-
- case 'u':
- unique = true;
- break;
-
- case 'y':
- /* Accept and ignore e.g. -y0 for compatibility with Solaris
- 2.x through Solaris 7. -y is marked as obsolete starting
- with Solaris 8. */
- break;
-
- case 'z':
- eolchar = 0;
- break;
-
- case_GETOPT_HELP_CHAR;
-
- case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
-
- default:
- usage (SORT_FAILURE);
- }
- }
-
- /* Inheritance of global options to individual keys. */
- for (key = keylist; key; key = key->next)
- if (! (key->ignore || key->translate
- || (key->skipsblanks | key->reverse
- | key->skipeblanks | key->month | key->numeric
- | key->general_numeric)))
- {
- key->ignore = gkey.ignore;
- key->translate = gkey.translate;
- key->skipsblanks = gkey.skipsblanks;
- key->skipeblanks = gkey.skipeblanks;
- key->month = gkey.month;
- key->numeric = gkey.numeric;
- key->general_numeric = gkey.general_numeric;
- key->reverse = gkey.reverse;
- }
-
- if (!keylist && (gkey.ignore || gkey.translate
- || (gkey.skipsblanks | gkey.skipeblanks | gkey.month
- | gkey.numeric | gkey.general_numeric)))
- insertkey (&gkey);
- reverse = gkey.reverse;
-
- if (temp_dir_count == 0)
- {
- char const *tmp_dir = getenv ("TMPDIR");
- add_temp_dir (tmp_dir ? tmp_dir : DEFAULT_TMPDIR);
- }
-
- if (nfiles == 0)
- {
- nfiles = 1;
- files = &minus;
- }
-
- if (checkonly)
- {
- if (nfiles > 1)
- {
- error (0, 0, _("extra operand %s not allowed with -c"),
- quote (files[1]));
- usage (SORT_FAILURE);
- }
-
- /* POSIX requires that sort return 1 IFF invoked with -c and the
- input is not properly sorted. */
- exit (check (files[0]) ? EXIT_SUCCESS : SORT_OUT_OF_ORDER);
- }
-
- if (mergeonly)
- {
- int max_merge = first_same_file (files, MIN (nfiles, NMERGE), outfile);
- merge (files, nfiles, max_merge, outfile);
- }
- else
- sort (files, nfiles, outfile);
-
- if (have_read_stdin && fclose (stdin) == EOF)
- die (_("close failed"), "-");
-
- exit (EXIT_SUCCESS);
-}
diff --git a/contrib/gnu-sort/src/system.h b/contrib/gnu-sort/src/system.h
deleted file mode 100644
index 3497969..0000000
--- a/contrib/gnu-sort/src/system.h
+++ /dev/null
@@ -1,831 +0,0 @@
-/* system-dependent definitions for fileutils, textutils, and sh-utils packages.
- Copyright (C) 1989, 1991-2004 Free Software Foundation, Inc.
-
- 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 2, or (at your option)
- any later version.
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include <alloca.h>
-
-/* Include sys/types.h before this file. */
-
-#if 2 <= __GLIBC__ && 2 <= __GLIBC_MINOR__
-# if ! defined _SYS_TYPES_H
-you must include <sys/types.h> before including this file
-# endif
-#endif
-
-#include <sys/stat.h>
-
-#if !defined HAVE_MKFIFO
-# define mkfifo(path, mode) (mknod ((path), (mode) | S_IFIFO, 0))
-#endif
-
-#if HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
-
-/* <unistd.h> should be included before any preprocessor test
- of _POSIX_VERSION. */
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#ifndef STDIN_FILENO
-# define STDIN_FILENO 0
-#endif
-
-#ifndef STDOUT_FILENO
-# define STDOUT_FILENO 1
-#endif
-
-#ifndef STDERR_FILENO
-# define STDERR_FILENO 2
-#endif
-
-
-/* limits.h must come before pathmax.h because limits.h on some systems
- undefs PATH_MAX, whereas pathmax.h sets PATH_MAX. */
-#include <limits.h>
-
-#include "pathmax.h"
-#include "localedir.h"
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
-/* Since major is a function on SVR4, we can't use `ifndef major'. */
-#if MAJOR_IN_MKDEV
-# include <sys/mkdev.h>
-# define HAVE_MAJOR
-#endif
-#if MAJOR_IN_SYSMACROS
-# include <sys/sysmacros.h>
-# define HAVE_MAJOR
-#endif
-#ifdef major /* Might be defined in sys/types.h. */
-# define HAVE_MAJOR
-#endif
-
-#ifndef HAVE_MAJOR
-# define major(dev) (((dev) >> 8) & 0xff)
-# define minor(dev) ((dev) & 0xff)
-# define makedev(maj, min) (((maj) << 8) | (min))
-#endif
-#undef HAVE_MAJOR
-
-#if ! defined makedev && defined mkdev
-# define makedev(maj, min) mkdev (maj, min)
-#endif
-
-#if HAVE_UTIME_H
-# include <utime.h>
-#endif
-
-/* Some systems (even some that do have <utime.h>) don't declare this
- structure anywhere. */
-#ifndef HAVE_STRUCT_UTIMBUF
-struct utimbuf
-{
- long actime;
- long modtime;
-};
-#endif
-
-/* Don't use bcopy! Use memmove if source and destination may overlap,
- memcpy otherwise. */
-
-#include <string.h>
-#if ! HAVE_DECL_MEMRCHR
-void *memrchr (const void *, int, size_t);
-#endif
-
-#include <errno.h>
-
-/* Some systems don't define the following symbols. */
-#ifndef ENOSYS
-# define ENOSYS (-1)
-#endif
-#ifndef EISDIR
-# define EISDIR (-1)
-#endif
-
-#include <stdbool.h>
-
-#define getopt system_getopt
-#include <stdlib.h>
-#undef getopt
-
-/* The following test is to work around the gross typo in
- systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
- is defined to 0, not 1. */
-#if !EXIT_FAILURE
-# undef EXIT_FAILURE
-# define EXIT_FAILURE 1
-#endif
-
-#ifndef EXIT_SUCCESS
-# define EXIT_SUCCESS 0
-#endif
-
-/* Exit statuses for programs like 'env' that exec other programs.
- EXIT_FAILURE might not be 1, so use EXIT_FAIL in such programs. */
-enum
-{
- EXIT_FAIL = 1,
- EXIT_CANNOT_INVOKE = 126,
- EXIT_ENOENT = 127
-};
-
-#include "exitfail.h"
-
-/* Set exit_failure to STATUS if that's not the default already. */
-static inline void
-initialize_exit_failure (int status)
-{
- if (status != EXIT_FAILURE)
- exit_failure = status;
-}
-
-#if HAVE_FCNTL_H
-# include <fcntl.h>
-#else
-# include <sys/file.h>
-#endif
-
-#if !defined SEEK_SET
-# define SEEK_SET 0
-# define SEEK_CUR 1
-# define SEEK_END 2
-#endif
-#ifndef F_OK
-# define F_OK 0
-# define X_OK 1
-# define W_OK 2
-# define R_OK 4
-#endif
-
-/* For systems that distinguish between text and binary I/O.
- O_BINARY is usually declared in fcntl.h */
-#if !defined O_BINARY && defined _O_BINARY
- /* For MSC-compatible compilers. */
-# define O_BINARY _O_BINARY
-# define O_TEXT _O_TEXT
-#endif
-
-#if !defined O_DIRECT
-# define O_DIRECT 0
-#endif
-
-#if !defined O_DSYNC
-# define O_DSYNC 0
-#endif
-
-#if !defined O_NDELAY
-# define O_NDELAY 0
-#endif
-
-#if !defined O_NONBLOCK
-# define O_NONBLOCK O_NDELAY
-#endif
-
-#if !defined O_NOCTTY
-# define O_NOCTTY 0
-#endif
-
-#if !defined O_NOFOLLOW
-# define O_NOFOLLOW 0
-#endif
-
-#if !defined O_RSYNC
-# define O_RSYNC 0
-#endif
-
-#if !defined O_SYNC
-# define O_SYNC 0
-#endif
-
-#ifdef __BEOS__
- /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
-# undef O_BINARY
-# undef O_TEXT
-#endif
-
-#if O_BINARY
-# ifndef __DJGPP__
-# define setmode _setmode
-# define fileno(_fp) _fileno (_fp)
-# endif /* not DJGPP */
-# define SET_MODE(_f, _m) setmode (_f, _m)
-# define SET_BINARY(_f) do {if (!isatty(_f)) setmode (_f, O_BINARY);} while (0)
-# define SET_BINARY2(_f1, _f2) \
- do { \
- if (!isatty (_f1)) \
- { \
- setmode (_f1, O_BINARY); \
- if (!isatty (_f2)) \
- setmode (_f2, O_BINARY); \
- } \
- } while(0)
-#else
-# define SET_MODE(_f, _m) (void)0
-# define SET_BINARY(f) (void)0
-# define SET_BINARY2(f1,f2) (void)0
-# ifndef O_BINARY
-# define O_BINARY 0
-# endif
-# define O_TEXT 0
-#endif /* O_BINARY */
-
-#if HAVE_DIRENT_H
-# include <dirent.h>
-# define NLENGTH(direct) (strlen((direct)->d_name))
-#else /* not HAVE_DIRENT_H */
-# define dirent direct
-# define NLENGTH(direct) ((direct)->d_namlen)
-# if HAVE_SYS_NDIR_H
-# include <sys/ndir.h>
-# endif /* HAVE_SYS_NDIR_H */
-# if HAVE_SYS_DIR_H
-# include <sys/dir.h>
-# endif /* HAVE_SYS_DIR_H */
-# if HAVE_NDIR_H
-# include <ndir.h>
-# endif /* HAVE_NDIR_H */
-#endif /* HAVE_DIRENT_H */
-
-#if CLOSEDIR_VOID
-/* Fake a return value. */
-# define CLOSEDIR(d) (closedir (d), 0)
-#else
-# define CLOSEDIR(d) closedir (d)
-#endif
-
-/* Get or fake the disk device blocksize.
- Usually defined by sys/param.h (if at all). */
-#if !defined DEV_BSIZE && defined BSIZE
-# define DEV_BSIZE BSIZE
-#endif
-#if !defined DEV_BSIZE && defined BBSIZE /* SGI */
-# define DEV_BSIZE BBSIZE
-#endif
-#ifndef DEV_BSIZE
-# define DEV_BSIZE 4096
-#endif
-
-/* Extract or fake data from a `struct stat'.
- ST_BLKSIZE: Preferred I/O blocksize for the file, in bytes.
- ST_NBLOCKS: Number of blocks in the file, including indirect blocks.
- ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */
-#ifndef HAVE_STRUCT_STAT_ST_BLOCKS
-# define ST_BLKSIZE(statbuf) DEV_BSIZE
-# if defined _POSIX_SOURCE || !defined BSIZE /* fileblocks.c uses BSIZE. */
-# define ST_NBLOCKS(statbuf) \
- ((statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0))
-# else /* !_POSIX_SOURCE && BSIZE */
-# define ST_NBLOCKS(statbuf) \
- (S_ISREG ((statbuf).st_mode) \
- || S_ISDIR ((statbuf).st_mode) \
- ? st_blocks ((statbuf).st_size) : 0)
-# endif /* !_POSIX_SOURCE && BSIZE */
-#else /* HAVE_STRUCT_STAT_ST_BLOCKS */
-/* Some systems, like Sequents, return st_blksize of 0 on pipes.
- Also, when running `rsh hpux11-system cat any-file', cat would
- determine that the output stream had an st_blksize of 2147421096.
- So here we arbitrarily limit the `optimal' block size to 4MB.
- If anyone knows of a system for which the legitimate value for
- st_blksize can exceed 4MB, please report it as a bug in this code. */
-# define ST_BLKSIZE(statbuf) ((0 < (statbuf).st_blksize \
- && (statbuf).st_blksize <= (1 << 22)) /* 4MB */ \
- ? (statbuf).st_blksize : DEV_BSIZE)
-# if defined hpux || defined __hpux__ || defined __hpux
-/* HP-UX counts st_blocks in 1024-byte units.
- This loses when mixing HP-UX and BSD file systems with NFS. */
-# define ST_NBLOCKSIZE 1024
-# else /* !hpux */
-# if defined _AIX && defined _I386
-/* AIX PS/2 counts st_blocks in 4K units. */
-# define ST_NBLOCKSIZE (4 * 1024)
-# else /* not AIX PS/2 */
-# if defined _CRAY
-# define ST_NBLOCKS(statbuf) \
- (S_ISREG ((statbuf).st_mode) \
- || S_ISDIR ((statbuf).st_mode) \
- ? (statbuf).st_blocks * ST_BLKSIZE(statbuf)/ST_NBLOCKSIZE : 0)
-# endif /* _CRAY */
-# endif /* not AIX PS/2 */
-# endif /* !hpux */
-#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
-
-#ifndef ST_NBLOCKS
-# define ST_NBLOCKS(statbuf) ((statbuf).st_blocks)
-#endif
-
-#ifndef ST_NBLOCKSIZE
-# define ST_NBLOCKSIZE 512
-#endif
-
-/* Redirection and wildcarding when done by the utility itself.
- Generally a noop, but used in particular for native VMS. */
-#ifndef initialize_main
-# define initialize_main(ac, av)
-#endif
-
-#include "stat-macros.h"
-
-#include "timespec.h"
-
-#ifndef RETSIGTYPE
-# define RETSIGTYPE void
-#endif
-
-#ifdef __DJGPP__
- /* We need the declaration of setmode. */
-# include <io.h>
- /* We need the declaration of __djgpp_set_ctrl_c. */
-# include <sys/exceptn.h>
-#endif
-
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#if HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-#if ULONG_MAX < ULLONG_MAX
-# define LONGEST_MODIFIER "ll"
-#else
-# define LONGEST_MODIFIER "l"
-#endif
-#if PRI_MACROS_BROKEN
-# undef PRIdMAX
-# undef PRIoMAX
-# undef PRIuMAX
-# undef PRIxMAX
-#endif
-#ifndef PRIdMAX
-# define PRIdMAX LONGEST_MODIFIER "d"
-#endif
-#ifndef PRIoMAX
-# define PRIoMAX LONGEST_MODIFIER "o"
-#endif
-#ifndef PRIuMAX
-# define PRIuMAX LONGEST_MODIFIER "u"
-#endif
-#ifndef PRIxMAX
-# define PRIxMAX LONGEST_MODIFIER "x"
-#endif
-
-#include <ctype.h>
-
-/* Jim Meyering writes:
-
- "... Some ctype macros are valid only for character codes that
- isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
- using /bin/cc or gcc but without giving an ansi option). So, all
- ctype uses should be through macros like ISPRINT... If
- STDC_HEADERS is defined, then autoconf has verified that the ctype
- macros don't need to be guarded with references to isascii. ...
- Defining isascii to 1 should let any compiler worth its salt
- eliminate the && through constant folding."
-
- Bruno Haible adds:
-
- "... Furthermore, isupper(c) etc. have an undefined result if c is
- outside the range -1 <= c <= 255. One is tempted to write isupper(c)
- with c being of type `char', but this is wrong if c is an 8-bit
- character >= 128 which gets sign-extended to a negative value.
- The macro ISUPPER protects against this as well." */
-
-#if STDC_HEADERS || (!defined (isascii) && !HAVE_ISASCII)
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#ifdef isblank
-# define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
-#else
-# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
-#endif
-#ifdef isgraph
-# define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c))
-#else
-# define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c))
-#endif
-
-/* This is defined in <sys/euc.h> on at least Solaris2.6 systems. */
-#undef ISPRINT
-
-#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
-#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
-#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
-#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
-#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
-#define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c))
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
-#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
-#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
-
-#if STDC_HEADERS
-# define TOLOWER(Ch) tolower (Ch)
-# define TOUPPER(Ch) toupper (Ch)
-#else
-# define TOLOWER(Ch) (ISUPPER (Ch) ? tolower (Ch) : (Ch))
-# define TOUPPER(Ch) (ISLOWER (Ch) ? toupper (Ch) : (Ch))
-#endif
-
-/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
- - Its arg may be any int or unsigned int; it need not be an unsigned char.
- - It's guaranteed to evaluate its argument exactly once.
- - It's typically faster.
- POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to
- ISDIGIT_LOCALE unless it's important to use the locale's definition
- of `digit' even when the host does not conform to POSIX. */
-#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
-
-/* Convert a possibly-signed character to an unsigned character. This is
- a bit safer than casting to unsigned char, since it catches some type
- errors that the cast doesn't. */
-static inline unsigned char to_uchar (char ch) { return ch; }
-
-/* Take care of NLS matters. */
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#else
-# define setlocale(Category, Locale) /* empty */
-#endif
-
-#include "gettext.h"
-#if ! ENABLE_NLS
-# undef textdomain
-# define textdomain(Domainname) /* empty */
-# undef bindtextdomain
-# define bindtextdomain(Domainname, Dirname) /* empty */
-#endif
-
-#define _(msgid) gettext (msgid)
-#define N_(msgid) msgid
-
-#ifndef HAVE_SETLOCALE
-# define HAVE_SETLOCALE 0
-#endif
-
-#define STREQ(a, b) (strcmp ((a), (b)) == 0)
-
-#if !HAVE_DECL_FREE
-void free ();
-#endif
-
-#if !HAVE_DECL_MALLOC
-char *malloc ();
-#endif
-
-#if !HAVE_DECL_MEMCHR
-char *memchr ();
-#endif
-
-#if !HAVE_DECL_REALLOC
-char *realloc ();
-#endif
-
-#if !HAVE_DECL_STPCPY
-# ifndef stpcpy
-char *stpcpy ();
-# endif
-#endif
-
-#if !HAVE_DECL_STRNDUP
-char *strndup ();
-#endif
-
-#if !HAVE_DECL_STRSTR
-char *strstr ();
-#endif
-
-#if !HAVE_DECL_GETENV
-char *getenv ();
-#endif
-
-#if !HAVE_DECL_LSEEK
-off_t lseek ();
-#endif
-
-/* This is needed on some AIX systems. */
-#if !HAVE_DECL_STRTOUL
-unsigned long strtoul ();
-#endif
-
-#if !HAVE_DECL_GETLOGIN
-char *getlogin ();
-#endif
-
-#if !HAVE_DECL_TTYNAME
-char *ttyname ();
-#endif
-
-#if !HAVE_DECL_GETEUID
-uid_t geteuid ();
-#endif
-
-#if !HAVE_DECL_GETPWUID
-struct passwd *getpwuid ();
-#endif
-
-#if !HAVE_DECL_GETGRGID
-struct group *getgrgid ();
-#endif
-
-#if !HAVE_DECL_GETUID
-uid_t getuid ();
-#endif
-
-#include "xalloc.h"
-
-#if ! defined HAVE_MEMPCPY && ! defined mempcpy
-/* Be CAREFUL that there are no side effects in N. */
-# define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N)))
-#endif
-
-/* Include automatically-generated macros for unlocked I/O. */
-#include "unlocked-io.h"
-
-#define SAME_INODE(Stat_buf_1, Stat_buf_2) \
- ((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \
- && (Stat_buf_1).st_dev == (Stat_buf_2).st_dev)
-
-#define DOT_OR_DOTDOT(Basename) \
- (Basename[0] == '.' && (Basename[1] == '\0' \
- || (Basename[1] == '.' && Basename[2] == '\0')))
-
-/* A wrapper for readdir so that callers don't see entries for `.' or `..'. */
-static inline struct dirent const *
-readdir_ignoring_dot_and_dotdot (DIR *dirp)
-{
- while (1)
- {
- struct dirent const *dp = readdir (dirp);
- if (dp == NULL || ! DOT_OR_DOTDOT (dp->d_name))
- return dp;
- }
-}
-
-#if SETVBUF_REVERSED
-# define SETVBUF(Stream, Buffer, Type, Size) \
- setvbuf (Stream, Type, Buffer, Size)
-#else
-# define SETVBUF(Stream, Buffer, Type, Size) \
- setvbuf (Stream, Buffer, Type, Size)
-#endif
-
-/* Factor out some of the common --help and --version processing code. */
-
-/* These enum values cannot possibly conflict with the option values
- ordinarily used by commands, including CHAR_MAX + 1, etc. Avoid
- CHAR_MIN - 1, as it may equal -1, the getopt end-of-options value. */
-enum
-{
- GETOPT_HELP_CHAR = (CHAR_MIN - 2),
- GETOPT_VERSION_CHAR = (CHAR_MIN - 3)
-};
-
-#define GETOPT_HELP_OPTION_DECL \
- "help", no_argument, 0, GETOPT_HELP_CHAR
-#define GETOPT_VERSION_OPTION_DECL \
- "version", no_argument, 0, GETOPT_VERSION_CHAR
-
-#define case_GETOPT_HELP_CHAR \
- case GETOPT_HELP_CHAR: \
- usage (EXIT_SUCCESS); \
- break;
-
-#define HELP_OPTION_DESCRIPTION \
- _(" --help display this help and exit\n")
-#define VERSION_OPTION_DESCRIPTION \
- _(" --version output version information and exit\n")
-
-#include "closeout.h"
-#include "version-etc.h"
-
-#define case_GETOPT_VERSION_CHAR(Program_name, Authors) \
- case GETOPT_VERSION_CHAR: \
- version_etc (stdout, Program_name, GNU_PACKAGE, VERSION, Authors, \
- (char *) NULL); \
- exit (EXIT_SUCCESS); \
- break;
-
-#ifndef MAX
-# define MAX(a, b) ((a) > (b) ? (a) : (b))
-#endif
-
-#ifndef MIN
-# define MIN(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
-/* The extra casts work around common compiler bugs. */
-#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-/* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
- It is necessary at least when t == time_t. */
-#define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
- ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
-#define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
-
-/* Upper bound on the string length of an integer converted to string.
- 302 / 1000 is ceil (log10 (2.0)). Subtract 1 for the sign bit;
- add 1 for integer division truncation; add 1 more for a minus sign. */
-#define INT_STRLEN_BOUND(t) ((sizeof (t) * CHAR_BIT - 1) * 302 / 1000 + 2)
-
-#ifndef CHAR_MIN
-# define CHAR_MIN TYPE_MINIMUM (char)
-#endif
-
-#ifndef CHAR_MAX
-# define CHAR_MAX TYPE_MAXIMUM (char)
-#endif
-
-#ifndef SCHAR_MIN
-# define SCHAR_MIN (-1 - SCHAR_MAX)
-#endif
-
-#ifndef SCHAR_MAX
-# define SCHAR_MAX (CHAR_MAX == UCHAR_MAX ? CHAR_MAX / 2 : CHAR_MAX)
-#endif
-
-#ifndef UCHAR_MAX
-# define UCHAR_MAX TYPE_MAXIMUM (unsigned char)
-#endif
-
-#ifndef SHRT_MIN
-# define SHRT_MIN TYPE_MINIMUM (short int)
-#endif
-
-#ifndef SHRT_MAX
-# define SHRT_MAX TYPE_MAXIMUM (short int)
-#endif
-
-#ifndef INT_MAX
-# define INT_MAX TYPE_MAXIMUM (int)
-#endif
-
-#ifndef INT_MIN
-# define INT_MIN TYPE_MINIMUM (int)
-#endif
-
-#ifndef INTMAX_MAX
-# define INTMAX_MAX TYPE_MAXIMUM (intmax_t)
-#endif
-
-#ifndef INTMAX_MIN
-# define INTMAX_MIN TYPE_MINIMUM (intmax_t)
-#endif
-
-#ifndef UINT_MAX
-# define UINT_MAX TYPE_MAXIMUM (unsigned int)
-#endif
-
-#ifndef LONG_MAX
-# define LONG_MAX TYPE_MAXIMUM (long int)
-#endif
-
-#ifndef ULONG_MAX
-# define ULONG_MAX TYPE_MAXIMUM (unsigned long int)
-#endif
-
-#ifndef SIZE_MAX
-# define SIZE_MAX TYPE_MAXIMUM (size_t)
-#endif
-
-#ifndef SSIZE_MAX
-# define SSIZE_MAX TYPE_MAXIMUM (ssize_t)
-#endif
-
-#ifndef UINTMAX_MAX
-# define UINTMAX_MAX TYPE_MAXIMUM (uintmax_t)
-#endif
-
-#ifndef OFF_T_MIN
-# define OFF_T_MIN TYPE_MINIMUM (off_t)
-#endif
-
-#ifndef OFF_T_MAX
-# define OFF_T_MAX TYPE_MAXIMUM (off_t)
-#endif
-
-#ifndef UID_T_MAX
-# define UID_T_MAX TYPE_MAXIMUM (uid_t)
-#endif
-
-#ifndef GID_T_MAX
-# define GID_T_MAX TYPE_MAXIMUM (gid_t)
-#endif
-
-#ifndef PID_T_MAX
-# define PID_T_MAX TYPE_MAXIMUM (pid_t)
-#endif
-
-/* Use this to suppress gcc's `...may be used before initialized' warnings. */
-#ifdef lint
-# define IF_LINT(Code) Code
-#else
-# define IF_LINT(Code) /* empty */
-#endif
-
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
-# define __attribute__(x)
-# endif
-#endif
-
-#ifndef ATTRIBUTE_NORETURN
-# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-#endif
-
-#ifndef ATTRIBUTE_UNUSED
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif
-
-#if defined strdupa
-# define ASSIGN_STRDUPA(DEST, S) \
- do { DEST = strdupa (S); } while (0)
-#else
-# define ASSIGN_STRDUPA(DEST, S) \
- do \
- { \
- const char *s_ = (S); \
- size_t len_ = strlen (s_) + 1; \
- char *tmp_dest_ = alloca (len_); \
- DEST = memcpy (tmp_dest_, (s_), len_); \
- } \
- while (0)
-#endif
-
-#ifndef EOVERFLOW
-# define EOVERFLOW EINVAL
-#endif
-
-#if ! HAVE_FSEEKO && ! defined fseeko
-# define fseeko(s, o, w) ((o) == (long int) (o) \
- ? fseek (s, o, w) \
- : (errno = EOVERFLOW, -1))
-#endif
-
-/* Compute the greatest common divisor of U and V using Euclid's
- algorithm. U and V must be nonzero. */
-
-static inline size_t
-gcd (size_t u, size_t v)
-{
- do
- {
- size_t t = u % v;
- u = v;
- v = t;
- }
- while (v);
-
- return u;
-}
-
-/* Compute the least common multiple of U and V. U and V must be
- nonzero. There is no overflow checking, so callers should not
- specify outlandish sizes. */
-
-static inline size_t
-lcm (size_t u, size_t v)
-{
- return u * (v / gcd (u, v));
-}
-
-/* Return PTR, aligned upward to the next multiple of ALIGNMENT.
- ALIGNMENT must be nonzero. The caller must arrange for ((char *)
- PTR) through ((char *) PTR + ALIGNMENT - 1) to be addressable
- locations. */
-
-static inline void *
-ptr_align (void *ptr, size_t alignment)
-{
- char *p0 = ptr;
- char *p1 = p0 + alignment - 1;
- return p1 - (size_t) p1 % alignment;
-}
diff --git a/gnu/usr.bin/Makefile b/gnu/usr.bin/Makefile
index b222c47..3a61327 100644
--- a/gnu/usr.bin/Makefile
+++ b/gnu/usr.bin/Makefile
@@ -17,7 +17,6 @@ SUBDIR= ${_binutils} \
${_rcs} \
sdiff \
send-pr \
- sort \
${_texinfo}
.if ${MK_CXX} != "no"
diff --git a/gnu/usr.bin/sort/Makefile b/gnu/usr.bin/sort/Makefile
deleted file mode 100644
index bf193bc..0000000
--- a/gnu/usr.bin/sort/Makefile
+++ /dev/null
@@ -1,46 +0,0 @@
-# $FreeBSD$
-
-SORTDIR= ${.CURDIR}/../../../contrib/gnu-sort
-.PATH: ${SORTDIR}/lib ${SORTDIR}/src ${SORTDIR}/man
-
-.include <bsd.own.mk>
-
-.if ${MK_GNU_SORT} == "yes"
-PROG= sort
-.else
-PROG= gnusort
-
-CLEANFILES+= gnusort.1
-gnusort.1: sort.1
- cp ${.ALLSRC} ${.TARGET}
-.endif
-
-SRCS= sort.c \
- __fpending.c \
- argmatch.c \
- closeout.c \
- dup-safer.c \
- error.c \
- exitfail.c \
- fopen-safer.c \
- hard-locale.c \
- human.c \
- long-options.c \
- memcoll.c \
- physmem.c \
- posixver.c \
- quote.c \
- quotearg.c \
- strnlen.c \
- umaxtostr.c \
- version-etc.c \
- xalloc-die.c \
- xmalloc.c \
- xmemcoll.c \
- xstrtoul.c \
- xstrtoumax.c
-
-CFLAGS+=-DHAVE_CONFIG_H -DHAVE_LANGINFO_H=1 -DHAVE_NL_LANGINFO=1 \
- -I${.CURDIR} -I${SORTDIR}/lib
-
-.include <bsd.prog.mk>
diff --git a/gnu/usr.bin/sort/alloca.h b/gnu/usr.bin/sort/alloca.h
deleted file mode 100644
index 59a1309..0000000
--- a/gnu/usr.bin/sort/alloca.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* $FreeBSD$ */
-extern void *alloca(size_t size);
diff --git a/gnu/usr.bin/sort/config.h b/gnu/usr.bin/sort/config.h
deleted file mode 100644
index 601b368..0000000
--- a/gnu/usr.bin/sort/config.h
+++ /dev/null
@@ -1,1519 +0,0 @@
-/* $FreeBSD$ */
-/* config.h. Generated by configure. */
-/* config.hin. Generated from configure.ac by autoheader. */
-
-/* Define if you have the Andrew File System. */
-/* #undef AFS */
-
-/* Define to the function xargmatch calls on failures. */
-#define ARGMATCH_DIE usage (1)
-
-/* Define to the declaration of the xargmatch failure function. */
-#define ARGMATCH_DIE_DECL extern void usage ()
-
-/* Define to 1 if the `closedir' function returns void instead of `int'. */
-/* #undef CLOSEDIR_VOID */
-
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
- systems. This function is required for `alloca.c' support on those systems.
- */
-/* #undef CRAY_STACKSEG_END */
-
-/* Define to 1 if using `alloca.c'. */
-/* #undef C_ALLOCA */
-
-/* Define to 1 if using `getloadavg.c'. */
-/* #undef C_GETLOADAVG */
-
-/* Define the default level of POSIX conformance. The value is of the form
- YYYYMM, specifying the year and month the standard was adopted. If not
- defined here, it defaults to the value of _POSIX2_VERSION in <unistd.h>.
- Define to 199209 to default to POSIX 1003.2-1992, which makes standard
- programs like `head', `tail', and `sort' accept obsolete options like `+10'
- and `-10'. Define to 200112 to default to POSIX 1003.1-2001, which makes
- these standard programs treat leading-`+' operands as file names and
- require modern usages like `-n 10' instead of `-10'. Whether defined here
- or not, the default can be overridden at run time via the _POSIX2_VERSION
- environment variable. */
-/* #undef DEFAULT_POSIX2_VERSION */
-
-/* Define to 1 for DGUX with <sys/dg_sys_info.h>. */
-/* #undef DGUX */
-
-/* the name of the file descriptor member of DIR */
-/* #undef DIR_FD_MEMBER_NAME */
-
-#ifdef DIR_FD_MEMBER_NAME
-# define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME)
-#else
-# define DIR_TO_FD(Dir_p) -1
-#endif
-
-
-
-/* Define if there is a member named d_ino in the struct describing directory
- headers. */
-#define D_INO_IN_DIRENT 1
-
-/* Define to 1 if translation of program messages to the user's native
- language is requested. */
-/* #undef ENABLE_NLS */
-
-/* Define on systems for which file names may have a so-called `drive letter'
- prefix, define this to compute the length of that prefix, including the
- colon. */
-#define FILESYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
-
-/* Define if the backslash character may also serve as a file name component
- separator. */
-#define FILESYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
-
-#if FILESYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
-# define FILESYSTEM_PREFIX_LEN(Filename) \
- ((Filename)[0] && (Filename)[1] == ':' ? 2 : 0)
-#else
-# define FILESYSTEM_PREFIX_LEN(Filename) 0
-#endif
-
-/* Define to the type of elements in the array set by `getgroups'. Usually
- this is either `int' or `gid_t'. */
-#define GETGROUPS_T gid_t
-
-/* Define to 1 if the `getloadavg' function needs to be run setuid or setgid.
- */
-/* #undef GETLOADAVG_PRIVILEGED */
-
-/* Define if gettimeofday clobbers localtime's static buffer. */
-/* #undef GETTIMEOFDAY_CLOBBERS_LOCALTIME_BUFFER */
-
-/* The concatenation of the strings `GNU ', and PACKAGE. */
-#define GNU_PACKAGE "GNU coreutils"
-
-/* Define if your system defines TIOCGWINSZ in sys/ioctl.h. */
-/* #undef GWINSZ_IN_SYS_IOCTL */
-
-/* Define if your system defines TIOCGWINSZ in sys/pty.h. */
-/* #undef GWINSZ_IN_SYS_PTY */
-
-/* Define to 1 if you have the `acl' function. */
-/* #undef HAVE_ACL */
-
-/* Define to 1 if you have the `alarm' function. */
-#define HAVE_ALARM 1
-
-/* Define to 1 if you have `alloca', as a function or macro. */
-#define HAVE_ALLOCA 1
-
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
- */
-/* #undef HAVE_ALLOCA_H */
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the `atexit' function. */
-#define HAVE_ATEXIT 1
-
-/* Define to 1 if you have the <bp-sym.h> header file. */
-/* #undef HAVE_BP_SYM_H */
-
-/* Define to 1 if you have the `btowc' function. */
-#define HAVE_BTOWC 1
-
-/* Define to 1 if your system has a working `chown' function. */
-#define HAVE_CHOWN 1
-
-/* Define to 1 if you have the `chroot' function. */
-#define HAVE_CHROOT 1
-
-/* Define to 1 if you have the `chsize' function. */
-/* #undef HAVE_CHSIZE */
-
-/* Define to 1 if you have the `clock_gettime' function. */
-#define HAVE_CLOCK_GETTIME 1
-
-/* Define to 1 if you have the `clock_settime' function. */
-#define HAVE_CLOCK_SETTIME 1
-
-/* FIXME */
-/* #undef HAVE_C_LINE */
-
-/* Define if the GNU dcgettext() function is already present or preinstalled.
- */
-/* #undef HAVE_DCGETTEXT */
-
-/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_CLEARERR_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `dirfd', and to 0 if you don't.
- */
-#define HAVE_DECL_DIRFD 1
-
-/* Define to 1 if you have the declaration of `euidaccess', and to 0 if you
- don't. */
-#define HAVE_DECL_EUIDACCESS 0
-
-/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
- don't. */
-#define HAVE_DECL_FEOF_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_FERROR_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_FFLUSH_UNLOCKED 0
-
-/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_FGETS_UNLOCKED 0
-
-/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_FPUTC_UNLOCKED 0
-
-/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_FPUTS_UNLOCKED 0
-
-/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_FREAD_UNLOCKED 0
-
-/* Define to 1 if you have the declaration of `free', and to 0 if you don't.
- */
-#define HAVE_DECL_FREE 1
-
-/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_FWRITE_UNLOCKED 0
-
-/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_GETCHAR_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `getcwd', and to 0 if you don't.
- */
-#define HAVE_DECL_GETCWD 1
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
- don't. */
-#define HAVE_DECL_GETC_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
- */
-#define HAVE_DECL_GETENV 1
-
-/* Define to 1 if you have the declaration of `geteuid', and to 0 if you
- don't. */
-#define HAVE_DECL_GETEUID 1
-
-/* Define to 1 if you have the declaration of `getgrgid', and to 0 if you
- don't. */
-#define HAVE_DECL_GETGRGID 1
-
-/* Define to 1 if you have the declaration of `getlogin', and to 0 if you
- don't. */
-#define HAVE_DECL_GETLOGIN 1
-
-/* Define to 1 if you have the declaration of `getpwuid', and to 0 if you
- don't. */
-#define HAVE_DECL_GETPWUID 1
-
-/* Define to 1 if you have the declaration of `getuid', and to 0 if you don't.
- */
-#define HAVE_DECL_GETUID 1
-
-/* Define to 1 if you have the declaration of `getutent', and to 0 if you
- don't. */
-#define HAVE_DECL_GETUTENT 0
-
-/* Define to 1 if you have the declaration of `lseek', and to 0 if you don't.
- */
-#define HAVE_DECL_LSEEK 1
-
-/* Define to 1 if you have the declaration of `malloc', and to 0 if you don't.
- */
-#define HAVE_DECL_MALLOC 1
-
-/* Define to 1 if you have the declaration of `memchr', and to 0 if you don't.
- */
-#define HAVE_DECL_MEMCHR 1
-
-/* Define to 1 if you have the declaration of `memrchr', and to 0 if you
- don't. */
-#define HAVE_DECL_MEMRCHR 0
-
-/* Define to 1 if you have the declaration of `nanosleep', and to 0 if you
- don't. */
-#define HAVE_DECL_NANOSLEEP 1
-
-/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
- you don't. */
-#define HAVE_DECL_PUTCHAR_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
- don't. */
-#define HAVE_DECL_PUTC_UNLOCKED 1
-
-/* Define to 1 if you have the declaration of `realloc', and to 0 if you
- don't. */
-#define HAVE_DECL_REALLOC 1
-
-/* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't.
- */
-#define HAVE_DECL_STPCPY 1
-
-/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
- don't. */
-#define HAVE_DECL_STRERROR_R 1
-
-/* Define to 1 if you have the declaration of `strndup', and to 0 if you
- don't. */
-#define HAVE_DECL_STRNDUP 0
-
-/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
- don't. */
-#define HAVE_DECL_STRNLEN 0
-
-/* Define to 1 if you have the declaration of `strsignal', and to 0 if you
- don't. */
-#define HAVE_DECL_STRSIGNAL 1
-
-/* Define to 1 if you have the declaration of `strstr', and to 0 if you don't.
- */
-#define HAVE_DECL_STRSTR 1
-
-/* Define to 1 if you have the declaration of `strtoimax', and to 0 if you
- don't. */
-#define HAVE_DECL_STRTOIMAX 1
-
-/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
- don't. */
-/* #undef HAVE_DECL_STRTOLL */
-
-/* Define to 1 if you have the declaration of `strtoul', and to 0 if you
- don't. */
-#define HAVE_DECL_STRTOUL 1
-
-/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
- don't. */
-#define HAVE_DECL_STRTOULL 1
-
-/* Define to 1 if you have the declaration of `strtoumax', and to 0 if you
- don't. */
-#define HAVE_DECL_STRTOUMAX 1
-
-/* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you
- don't. */
-#define HAVE_DECL_SYS_SIGLIST 1
-
-/* Define to 1 if you have the declaration of `ttyname', and to 0 if you
- don't. */
-#define HAVE_DECL_TTYNAME 1
-
-/* Define to 1 if you have the declaration of wcwidth(), and to 0 otherwise.
- */
-#define HAVE_DECL_WCWIDTH 1
-
-/* Define to 1 if you have the declaration of `_sys_siglist', and to 0 if you
- don't. */
-#define HAVE_DECL__SYS_SIGLIST 0
-
-/* Define to 1 if you have the declaration of `__fpending', and to 0 if you
- don't. */
-#define HAVE_DECL___FPENDING 0
-
-/* Define to 1 if you have the declaration of `__sys_siglist', and to 0 if you
- don't. */
-#define HAVE_DECL___SYS_SIGLIST 0
-
-/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
- */
-#define HAVE_DIRENT_H 1
-
-/* Define to 1 if you have the `dirfd' function. */
-/* #undef HAVE_DIRFD */
-
-/* Define to 1 if you have the `dup2' function. */
-#define HAVE_DUP2 1
-
-/* Define to 1 if you have the <dustat.h> header file. */
-/* #undef HAVE_DUSTAT_H */
-
-/* Define to 1 if you have the `endgrent' function. */
-#define HAVE_ENDGRENT 1
-
-/* Define to 1 if you have the `endpwent' function. */
-#define HAVE_ENDPWENT 1
-
-/* Define to 1 if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the `euidaccess' function. */
-/* #undef HAVE_EUIDACCESS */
-
-/* Define to 1 if you have the `fchdir' function. */
-#define HAVE_FCHDIR 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have the `fdatasync' function. */
-/* #undef HAVE_FDATASYNC */
-
-/* Define to 1 if you have the `fesetround' function. */
-/* #undef HAVE_FESETROUND */
-
-/* Define to 1 if you have the <float.h> header file. */
-#define HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `floor' function. */
-#define HAVE_FLOOR 1
-
-/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
-#define HAVE_FSEEKO 1
-
-/* Define to 1 if you have the <fs_info.h> header file. */
-/* #undef HAVE_FS_INFO_H */
-
-/* Define to 1 if you have the `fs_stat_dev' function. */
-/* #undef HAVE_FS_STAT_DEV */
-
-/* Define to 1 if you have the `ftruncate' function. */
-#define HAVE_FTRUNCATE 1
-
-/* Define if struct statfs has the f_fstypename member. */
-#define HAVE_F_FSTYPENAME_IN_STATFS 1
-
-/* Define to 1 if you have the `getcwd' function. */
-#define HAVE_GETCWD 1
-
-/* Define if getcwd (NULL, 0) allocates memory for result. */
-#define HAVE_GETCWD_NULL 1
-
-/* Define to 1 if you have the `getdelim' function. */
-/* #undef HAVE_GETDELIM */
-
-/* Define to 1 if your system has a working `getgroups' function. */
-#define HAVE_GETGROUPS 1
-
-/* Define to 1 if you have the `gethostbyaddr' function. */
-#define HAVE_GETHOSTBYADDR 1
-
-/* Define to 1 if you have the `gethostbyname' function. */
-#define HAVE_GETHOSTBYNAME 1
-
-/* Define to 1 if you have the `gethostid' function. */
-#define HAVE_GETHOSTID 1
-
-/* Define to 1 if you have the `gethostname' function. */
-#define HAVE_GETHOSTNAME 1
-
-/* Define to 1 if you have the `gethrtime' function. */
-/* #undef HAVE_GETHRTIME */
-
-/* Define to 1 if you have the `getloadavg' function. */
-#define HAVE_GETLOADAVG 1
-
-/* Define to 1 if you have the `getmntent' function. */
-/* #undef HAVE_GETMNTENT */
-
-/* Define to 1 if you have the `getmntinfo' function. */
-#define HAVE_GETMNTINFO 1
-
-/* Define to 1 if you have the `getpagesize' function. */
-#define HAVE_GETPAGESIZE 1
-
-/* Define to 1 if you have the `getpass' function. */
-#define HAVE_GETPASS 1
-
-/* Define to 1 if you have the `getspnam' function. */
-/* #undef HAVE_GETSPNAM */
-
-/* Define to 1 if you have the `getsysinfo' function. */
-/* #undef HAVE_GETSYSINFO */
-
-/* Define if the GNU gettext() function is already present or preinstalled. */
-/* #undef HAVE_GETTEXT */
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have the `getusershell' function. */
-#define HAVE_GETUSERSHELL 1
-
-/* Define to 1 if you have the <grp.h> header file. */
-#define HAVE_GRP_H 1
-
-/* Define to 1 if you have the `hasmntopt' function. */
-/* #undef HAVE_HASMNTOPT */
-
-/* Define to 1 if you have the <hurd.h> header file. */
-/* #undef HAVE_HURD_H */
-
-/* Define if you have the iconv() function. */
-/* #undef HAVE_ICONV */
-
-/* Define to 1 if you have the `inet_ntoa' function. */
-#define HAVE_INET_NTOA 1
-
-/* Define to 1 if you have the `initgroups' function. */
-#define HAVE_INITGROUPS 1
-
-/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
-#define HAVE_INTMAX_T 1
-
-/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
-#define HAVE_INTTYPES_H 1
-
-/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
- declares uintmax_t. */
-#define HAVE_INTTYPES_H_WITH_UINTMAX 1
-
-/* Define to 1 if you have the `isascii' function. */
-#define HAVE_ISASCII 1
-
-/* Define to 1 if you have the `iswcntrl' function. */
-#define HAVE_ISWCNTRL 1
-
-/* Define to 1 if you have the `iswprint' function. */
-#define HAVE_ISWPRINT 1
-
-/* Define to 1 if you have the `iswspace' function. */
-#define HAVE_ISWSPACE 1
-
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#define HAVE_LANGINFO_CODESET 1
-
-/* Define to 1 if you have the `lchown' function. */
-#define HAVE_LCHOWN 1
-
-/* Define to 1 if you have the `dgc' library (-ldgc). */
-/* #undef HAVE_LIBDGC */
-
-/* Define to 1 if you have the `kstat' library (-lkstat). */
-/* #undef HAVE_LIBKSTAT */
-
-/* Define to 1 if you have the `ldgc' library (-lldgc). */
-/* #undef HAVE_LIBLDGC */
-
-/* Define to 1 if you have the `os' library (-los). */
-/* #undef HAVE_LIBOS */
-
-/* Define to 1 if you have the `ypsec' library (-lypsec). */
-/* #undef HAVE_LIBYPSEC */
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the `listmntent' function. */
-/* #undef HAVE_LISTMNTENT */
-
-/* Define to 1 if you have the `localeconv' function. */
-#define HAVE_LOCALECONV 1
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define if you have the 'long double' type. */
-#define HAVE_LONG_DOUBLE 1
-
-/* Define to 1 if you support file names longer than 14 characters. */
-#define HAVE_LONG_FILE_NAMES 1
-
-/* Define if you have the 'long long' type. */
-#define HAVE_LONG_LONG 1
-
-/* Define to 1 if `lstat' has the bug that it succeeds when given the
- zero-length file name argument. */
-/* #undef HAVE_LSTAT_EMPTY_STRING_BUG */
-
-/* Define to 1 if you have the <machine/hal_sysinfo.h> header file. */
-/* #undef HAVE_MACHINE_HAL_SYSINFO_H */
-
-/* Define to 1 if you have the <mach/mach.h> header file. */
-/* #undef HAVE_MACH_MACH_H */
-
-/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
- to 0 otherwise. */
-#define HAVE_MALLOC 1
-
-/* Define to 1 if you have the `mblen' function. */
-#define HAVE_MBLEN 1
-
-/* Define to 1 if you have the `mbrlen' function. */
-#define HAVE_MBRLEN 1
-
-/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
-#define HAVE_MBRTOWC 1
-
-/* Define to 1 if you have the `mbsinit' function. */
-#define HAVE_MBSINIT 1
-
-/* Define to 1 if you have the `mbsrtowcs' function. */
-#define HAVE_MBSRTOWCS 1
-
-/* Define to 1 if <wchar.h> declares mbstate_t. */
-#define HAVE_MBSTATE_T 1
-
-/* Define to 1 if you have the `memchr' function. */
-#define HAVE_MEMCHR 1
-
-/* Define to 1 if you have the `memcpy' function. */
-#define HAVE_MEMCPY 1
-
-/* Define to 1 if you have the `memmove' function. */
-#define HAVE_MEMMOVE 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mempcpy' function. */
-/* #undef HAVE_MEMPCPY */
-
-/* Define to 1 if you have the `memrchr' function. */
-/* #undef HAVE_MEMRCHR */
-
-/* Define to 1 if you have the `memset' function. */
-#define HAVE_MEMSET 1
-
-/* Define to 1 if you have the `mkfifo' function. */
-#define HAVE_MKFIFO 1
-
-/* Define to 1 if you have the `mkstemp' function. */
-#define HAVE_MKSTEMP 1
-
-/* Define to 1 if you have the <mntent.h> header file. */
-/* #undef HAVE_MNTENT_H */
-
-/* Define to 1 if you have the <mnttab.h> header file. */
-/* #undef HAVE_MNTTAB_H */
-
-/* Define to 1 if you have the `modf' function. */
-#define HAVE_MODF 1
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-/* #undef HAVE_NDIR_H */
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the `next_dev' function. */
-/* #undef HAVE_NEXT_DEV */
-
-/* Define to 1 if you have the <nfs/nfs_clnt.h> header file. */
-/* #undef HAVE_NFS_NFS_CLNT_H */
-
-/* Define to 1 if you have the <nfs/vfs.h> header file. */
-/* #undef HAVE_NFS_VFS_H */
-
-/* Define to 1 if you have the <nlist.h> header file. */
-/* #undef HAVE_NLIST_H */
-
-/* Define to 1 if libc includes obstacks. */
-/* #undef HAVE_OBSTACK */
-
-/* Define to 1 if you have the <OS.h> header file. */
-/* #undef HAVE_OS_H */
-
-/* Define to 1 if you have the `pathconf' function. */
-#define HAVE_PATHCONF 1
-
-/* Define to 1 if you have the <paths.h> header file. */
-#define HAVE_PATHS_H 1
-
-/* Define if your system has the /proc/uptime special file. */
-/* #undef HAVE_PROC_UPTIME */
-
-/* Define to 1 if you have the `pstat_getdynamic' function. */
-/* #undef HAVE_PSTAT_GETDYNAMIC */
-
-/* Define to 1 if you have the `pstat_getstatic' function. */
-/* #undef HAVE_PSTAT_GETSTATIC */
-
-/* Define to 1 if the system has the type `ptrdiff_t'. */
-#define HAVE_PTRDIFF_T 1
-
-/* Define to 1 if you have the <pwd.h> header file. */
-#define HAVE_PWD_H 1
-
-/* Define to 1 if you have the `raise' function. */
-#define HAVE_RAISE 1
-
-/* Define to 1 if you have the `readlink' function. */
-#define HAVE_READLINK 1
-
-/* Define to 1 if your system has a GNU libc compatible `realloc' function,
- and to 0 otherwise. */
-#define HAVE_REALLOC 1
-
-/* Define to 1 if you have the `realpath' function. */
-#define HAVE_REALPATH 1
-
-/* Define to 1 if you have the `resolvepath' function. */
-/* #undef HAVE_RESOLVEPATH */
-
-/* Define to 1 if you have the `rint' function. */
-#define HAVE_RINT 1
-
-/* Define to 1 if you have the `rmdir' function. */
-#define HAVE_RMDIR 1
-
-/* Define to 1 if you have the `rpmatch' function. */
-/* #undef HAVE_RPMATCH */
-
-/* Define to 1 if you have run the test for working tzset. */
-#define HAVE_RUN_TZSET_TEST 1
-
-/* Define to 1 if you have the `sethostname' function. */
-#define HAVE_SETHOSTNAME 1
-
-/* Define to 1 if you have the `setlocale' function. */
-#define HAVE_SETLOCALE 1
-
-/* Define to 1 if you have the `setregid' function. */
-#define HAVE_SETREGID 1
-
-/* Define to 1 if you have the `setreuid' function. */
-#define HAVE_SETREUID 1
-
-/* Define to 1 if you have the <shadow.h> header file. */
-/* #undef HAVE_SHADOW_H */
-
-/* Define to 1 if you have the `sig2str' function. */
-/* #undef HAVE_SIG2STR */
-
-/* Define to 1 if you have the `snprintf' function. */
-#define HAVE_SNPRINTF 1
-
-/* Define to 1 if you have the `sqrt' function. */
-/* #undef HAVE_SQRT */
-
-/* Define to 1 if you have the `statvfs' function. */
-#define HAVE_STATVFS 1
-
-/* Define to 1 if `stat' has the bug that it succeeds when given the
- zero-length file name argument. */
-/* #undef HAVE_STAT_EMPTY_STRING_BUG */
-
-/* Define to 1 if stdbool.h conforms to C99. */
-#define HAVE_STDBOOL_H 1
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#define HAVE_STDDEF_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
- uintmax_t. */
-#define HAVE_STDINT_H_WITH_UINTMAX 1
-
-/* Define to 1 if you have the <stdio_ext.h> header file. */
-/* #undef HAVE_STDIO_EXT_H */
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `stpcpy' function. */
-#define HAVE_STPCPY 1
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#define HAVE_STRCASECMP 1
-
-/* Define to 1 if you have the `strchr' function. */
-#define HAVE_STRCHR 1
-
-/* Define to 1 if you have the `strcoll' function and it is properly defined.
- */
-#define HAVE_STRCOLL 1
-
-/* Define to 1 if you have the `strcspn' function. */
-#define HAVE_STRCSPN 1
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define to 1 if you have the `strerror_r' function. */
-#define HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the `strftime' function. */
-#define HAVE_STRFTIME 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strncasecmp' function. */
-#define HAVE_STRNCASECMP 1
-
-/* Define to 1 if you have the `strndup' function. */
-#define HAVE_STRNDUP 1
-
-/* Define to 1 if you have the `strpbrk' function. */
-#define HAVE_STRPBRK 1
-
-/* Define to 1 if you have the `strrchr' function. */
-#define HAVE_STRRCHR 1
-
-/* Define to 1 if you have the `strstr' function. */
-#define HAVE_STRSTR 1
-
-/* Define to 1 if you have the `strtoimax' function. */
-#define HAVE_STRTOIMAX 1
-
-/* Define to 1 if you have the `strtol' function. */
-#define HAVE_STRTOL 1
-
-/* Define to 1 if you have the `strtoll' function. */
-#define HAVE_STRTOLL 1
-
-/* Define to 1 if you have the `strtoul' function. */
-#define HAVE_STRTOUL 1
-
-/* Define to 1 if you have the `strtoull' function. */
-#define HAVE_STRTOULL 1
-
-/* Define to 1 if you have the `strtoumax' function. */
-#define HAVE_STRTOUMAX 1
-
-/* Define if there is a member named d_type in the struct describing directory
- headers. */
-#define HAVE_STRUCT_DIRENT_D_TYPE 1
-
-/* Define to 1 if `f_fstypename' is member of `struct fsstat'. */
-/* #undef HAVE_STRUCT_FSSTAT_F_FSTYPENAME */
-
-/* Define to 1 if `n_un.n_name' is member of `struct nlist'. */
-/* #undef HAVE_STRUCT_NLIST_N_UN_N_NAME */
-
-/* Define to 1 if `sp_pwdp' is member of `struct spwd'. */
-/* #undef HAVE_STRUCT_SPWD_SP_PWDP */
-
-/* Define to 1 if `f_basetype' is member of `struct statfs'. */
-/* #undef HAVE_STRUCT_STATFS_F_BASETYPE */
-
-/* Define to 1 if `f_fsid.__val' is member of `struct statfs'. */
-/* #undef HAVE_STRUCT_STATFS_F_FSID___VAL */
-
-/* Define to 1 if `f_fstypename' is member of `struct statfs'. */
-/* #undef HAVE_STRUCT_STATFS_F_FSTYPENAME */
-
-/* Define to 1 if `f_namelen' is member of `struct statfs'. */
-/* #undef HAVE_STRUCT_STATFS_F_NAMELEN */
-
-/* Define to 1 if `f_namemax' is member of `struct statfs'. */
-/* #undef HAVE_STRUCT_STATFS_F_NAMEMAX */
-
-/* Define to 1 if `f_type' is member of `struct statfs'. */
-/* #undef HAVE_STRUCT_STATFS_F_TYPE */
-
-/* Define to 1 if `f_basetype' is member of `struct statvfs'. */
-/* #undef HAVE_STRUCT_STATVFS_F_BASETYPE */
-
-/* Define to 1 if `f_fsid.__val' is member of `struct statvfs'. */
-/* #undef HAVE_STRUCT_STATVFS_F_FSID___VAL */
-
-/* Define to 1 if `f_namelen' is member of `struct statvfs'. */
-/* #undef HAVE_STRUCT_STATVFS_F_NAMELEN */
-
-/* Define to 1 if `f_namemax' is member of `struct statvfs'. */
-#define HAVE_STRUCT_STATVFS_F_NAMEMAX 1
-
-/* Define to 1 if `f_type' is member of `struct statvfs'. */
-/* #undef HAVE_STRUCT_STATVFS_F_TYPE */
-
-/* Define to 1 if `st_author' is member of `struct stat'. */
-/* #undef HAVE_STRUCT_STAT_ST_AUTHOR */
-
-/* Define to 1 if `st_blksize' is member of `struct stat'. */
-#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
-
-/* Define to 1 if `st_blocks' is member of `struct stat'. */
-#define HAVE_STRUCT_STAT_ST_BLOCKS 1
-
-/* Define if struct timespec is declared in <time.h>. */
-#define HAVE_STRUCT_TIMESPEC 1
-
-/* Define to 1 if `tm_zone' is member of `struct tm'. */
-#define HAVE_STRUCT_TM_TM_ZONE 1
-
-/* Define if struct utimbuf is declared -- usually in <utime.h>. Some systems
- have utime.h but don't declare the struct anywhere. */
-#define HAVE_STRUCT_UTIMBUF 1
-
-/* Define to 1 if `ut_exit' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_EXIT */
-
-/* Define to 1 if `ut_exit.e_exit' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_EXIT_E_EXIT */
-
-/* Define to 1 if `ut_exit.e_termination' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_EXIT_E_TERMINATION */
-
-/* Define to 1 if `ut_exit.ut_exit' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_EXIT_UT_EXIT */
-
-/* Define to 1 if `ut_exit.ut_termination' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_EXIT_UT_TERMINATION */
-
-/* Define to 1 if `ut_id' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_ID */
-
-/* Define to 1 if `ut_name' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_NAME */
-
-/* Define to 1 if `ut_pid' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_PID */
-
-/* Define to 1 if `ut_type' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_TYPE */
-
-/* Define to 1 if `ut_user' is member of `struct utmpx'. */
-/* #undef HAVE_STRUCT_UTMPX_UT_USER */
-
-/* Define to 1 if `ut_exit' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_EXIT */
-
-/* Define to 1 if `ut_exit.e_exit' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_EXIT_E_EXIT */
-
-/* Define to 1 if `ut_exit.e_termination' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_EXIT_E_TERMINATION */
-
-/* Define to 1 if `ut_exit.ut_exit' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_EXIT_UT_EXIT */
-
-/* Define to 1 if `ut_exit.ut_termination' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_EXIT_UT_TERMINATION */
-
-/* Define to 1 if `ut_id' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_ID */
-
-/* Define to 1 if `ut_name' is member of `struct utmp'. */
-#define HAVE_STRUCT_UTMP_UT_NAME 1
-
-/* Define to 1 if `ut_pid' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_PID */
-
-/* Define to 1 if `ut_type' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_TYPE */
-
-/* Define to 1 if `ut_user' is member of `struct utmp'. */
-/* #undef HAVE_STRUCT_UTMP_UT_USER */
-
-/* Define to 1 if you have the `strverscmp' function. */
-/* #undef HAVE_STRVERSCMP */
-
-/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
- `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */
-#define HAVE_ST_BLOCKS 1
-
-/* Define if struct stat has an st_dm_mode member. */
-/* #undef HAVE_ST_DM_MODE */
-
-/* Define to 1 if you have the `sysctl' function. */
-#define HAVE_SYSCTL 1
-
-/* Define to 1 if you have the `sysinfo' function. */
-/* #undef HAVE_SYSINFO */
-
-/* FIXME */
-#define HAVE_SYSLOG 1
-
-/* Define to 1 if you have the <syslog.h> header file. */
-#define HAVE_SYSLOG_H 1
-
-/* Define to 1 if you have the `sysmp' function. */
-/* #undef HAVE_SYSMP */
-
-/* Define to 1 if you have the <sys/acl.h> header file. */
-#define HAVE_SYS_ACL_H 1
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_DIR_H */
-
-/* Define to 1 if you have the <sys/filsys.h> header file. */
-/* #undef HAVE_SYS_FILSYS_H */
-
-/* Define to 1 if you have the <sys/fstyp.h> header file. */
-/* #undef HAVE_SYS_FSTYP_H */
-
-/* Define to 1 if you have the <sys/fs/s5param.h> header file. */
-/* #undef HAVE_SYS_FS_S5PARAM_H */
-
-/* Define to 1 if you have the <sys/fs_types.h> header file. */
-/* #undef HAVE_SYS_FS_TYPES_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/mntent.h> header file. */
-/* #undef HAVE_SYS_MNTENT_H */
-
-/* Define to 1 if you have the <sys/mount.h> header file. */
-#define HAVE_SYS_MOUNT_H 1
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_NDIR_H */
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/pstat.h> header file. */
-/* #undef HAVE_SYS_PSTAT_H */
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/statfs.h> header file. */
-/* #undef HAVE_SYS_STATFS_H */
-
-/* Define to 1 if you have the <sys/statvfs.h> header file. */
-#define HAVE_SYS_STATVFS_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/sysctl.h> header file. */
-#define HAVE_SYS_SYSCTL_H 1
-
-/* Define to 1 if you have the <sys/sysinfo.h> header file. */
-/* #undef HAVE_SYS_SYSINFO_H */
-
-/* Define to 1 if you have the <sys/sysmacros.h> header file. */
-/* #undef HAVE_SYS_SYSMACROS_H */
-
-/* Define to 1 if you have the <sys/sysmp.h> header file. */
-/* #undef HAVE_SYS_SYSMP_H */
-
-/* Define to 1 if you have the <sys/systemcfg.h> header file. */
-/* #undef HAVE_SYS_SYSTEMCFG_H */
-
-/* Define to 1 if you have the <sys/systeminfo.h> header file. */
-/* #undef HAVE_SYS_SYSTEMINFO_H */
-
-/* Define to 1 if you have the <sys/table.h> header file. */
-/* #undef HAVE_SYS_TABLE_H */
-
-/* Define to 1 if you have the <sys/timeb.h> header file. */
-#define HAVE_SYS_TIMEB_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/ucred.h> header file. */
-/* #undef HAVE_SYS_UCRED_H */
-
-/* Define to 1 if you have the <sys/vfs.h> header file. */
-/* #undef HAVE_SYS_VFS_H */
-
-/* Define to 1 if you have the <sys/wait.h> header file. */
-#define HAVE_SYS_WAIT_H 1
-
-/* Define to 1 if you have the `table' function. */
-/* #undef HAVE_TABLE */
-
-/* Define to 1 if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 1
-
-/* Define if struct tm has the tm_gmtoff member. */
-#define HAVE_TM_GMTOFF 1
-
-/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
- `HAVE_STRUCT_TM_TM_ZONE' instead. */
-#define HAVE_TM_ZONE 1
-
-/* Define to 1 if you don't have `tm_zone' but do have the external array
- `tzname'. */
-/* #undef HAVE_TZNAME */
-
-/* Define to 1 if you have the `tzset' function. */
-#define HAVE_TZSET 1
-
-/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
-#define HAVE_UINTMAX_T 1
-
-/* Define to 1 if you have the `uname' function. */
-#define HAVE_UNAME 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define if you have the 'unsigned long long' type. */
-#define HAVE_UNSIGNED_LONG_LONG 1
-
-/* Define if utimes accepts a null argument */
-/* #undef HAVE_UTIMES_NULL */
-
-/* Define to 1 if you have the <utime.h> header file. */
-#define HAVE_UTIME_H 1
-
-/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */
-#define HAVE_UTIME_NULL 1
-
-/* Define to 1 if you have the `utmpname' function. */
-/* #undef HAVE_UTMPNAME */
-
-/* Define to 1 if you have the `utmpxname' function. */
-/* #undef HAVE_UTMPXNAME */
-
-/* FIXME */
-/* #undef HAVE_UTMPX_H */
-
-/* Define to 1 if you have the <utmp.h> header file. */
-#define HAVE_UTMP_H 1
-
-/* FIXME */
-#define HAVE_UT_HOST 1
-
-/* Define to 1 if you have the <values.h> header file. */
-/* #undef HAVE_VALUES_H */
-
-/* Define to 1 if you have the `vasnprintf' function. */
-/* #undef HAVE_VASNPRINTF */
-
-/* Define to 1 if you have the `vasprintf' function. */
-#define HAVE_VASPRINTF 1
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#define HAVE_WCHAR_H 1
-
-/* Define if you have the 'wchar_t' type. */
-#define HAVE_WCHAR_T 1
-
-/* Define to 1 if you have the `wcrtomb' function. */
-#define HAVE_WCRTOMB 1
-
-/* Define to 1 if you have the `wcslen' function. */
-#define HAVE_WCSLEN 1
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#define HAVE_WCTYPE_H 1
-
-/* Define to 1 if you have the `wcwidth' function. */
-#define HAVE_WCWIDTH 1
-
-/* Define if you have the 'wint_t' type. */
-#define HAVE_WINT_T 1
-
-/* Define to 1 if you have the `wmempcpy' function. */
-/* #undef HAVE_WMEMPCPY */
-
-/* Define if readdir is found to work properly in some unusual cases. */
-#define HAVE_WORKING_READDIR 1
-
-/* Define if utimes works properly. */
-#define HAVE_WORKING_UTIMES 1
-
-/* Define to 1 if the system has the type `_Bool'. */
-#define HAVE__BOOL 1
-
-/* Define to 1 if you have the external variable, _system_configuration with a
- member named physmem. */
-/* #undef HAVE__SYSTEM_CONFIGURATION */
-
-/* Define to 1 if you have the `__fpending' function. */
-/* #undef HAVE___FPENDING */
-
-/* Define to 1 if you have the `__secure_getenv' function. */
-/* #undef HAVE___SECURE_GETENV */
-
-/* The host operating system. */
-#define HOST_OPERATING_SYSTEM "FreeBSD"
-
-/* Define as const if the declaration of iconv() needs const. */
-/* #undef ICONV_CONST */
-
-#if FILESYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#else
-# define ISSLASH(C) ((C) == '/')
-#endif
-
-/* Define if `link(2)' dereferences symbolic links. */
-#define LINK_FOLLOWS_SYMLINKS 1
-
-/* FIXME */
-#define LOCALTIME_CACHE 1
-
-/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
- slash. */
-/* #undef LSTAT_FOLLOWS_SLASHED_SYMLINK */
-
-/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.
- */
-/* #undef MAJOR_IN_MKDEV */
-
-/* Define to 1 if `major', `minor', and `makedev' are declared in
- <sysmacros.h>. */
-/* #undef MAJOR_IN_SYSMACROS */
-
-/* Define if there is no specific function for reading the list of mounted
- filesystems. fread will be used to read /etc/mnttab. (SVR2) */
-/* #undef MOUNTED_FREAD */
-
-/* Define if (like SVR2) there is no specific function for reading the list of
- mounted filesystems, and your system has these header files: <sys/fstyp.h>
- and <sys/statfs.h>. (SVR3) */
-/* #undef MOUNTED_FREAD_FSTYP */
-
-/* Define if there are functions named next_dev and fs_stat_dev for reading
- the list of mounted filesystems. (BeOS) */
-/* #undef MOUNTED_FS_STAT_DEV */
-
-/* Define if there is a function named getfsstat for reading the list of
- mounted filesystems. (DEC Alpha running OSF/1) */
-/* #undef MOUNTED_GETFSSTAT */
-
-/* Define if there is a function named getmnt for reading the list of mounted
- filesystems. (Ultrix) */
-/* #undef MOUNTED_GETMNT */
-
-/* Define if there is a function named getmntent for reading the list of
- mounted filesystems, and that function takes a single argument. (4.3BSD,
- SunOS, HP-UX, Dynix, Irix) */
-/* #undef MOUNTED_GETMNTENT1 */
-
-/* Define if there is a function named getmntent for reading the list of
- mounted filesystems, and that function takes two arguments. (SVR4) */
-/* #undef MOUNTED_GETMNTENT2 */
-
-/* Define if there is a function named getmntinfo for reading the list of
- mounted filesystems. (4.4BSD, Darwin) */
-#define MOUNTED_GETMNTINFO 1
-
-/* Define if there is a function named listmntent that can be used to list all
- mounted filesystems. (UNICOS) */
-/* #undef MOUNTED_LISTMNTENT */
-
-/* Define if there is a function named mntctl that can be used to read the
- list of mounted filesystems, and there is a system header file that
- declares `struct vmount.' (AIX) */
-/* #undef MOUNTED_VMOUNT */
-
-/* Define to 1 if assertions should be disabled. */
-/* #undef NDEBUG */
-
-/* FIXME */
-/* #undef NICE_PRIORITY */
-
-/* Define to 1 if your `struct nlist' has an `n_un' member. Obsolete, depend
- on `HAVE_STRUCT_NLIST_N_UN_N_NAME */
-/* #undef NLIST_NAME_UNION */
-
-/* Name of package */
-#define PACKAGE "coreutils"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "bug-coreutils@gnu.org"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "GNU coreutils"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GNU coreutils 5.3.0-20040812-FreeBSD"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "coreutils"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "5.3.0-20040812-FreeBSD"
-
-/* the number of pending output bytes on stream `fp' */
-#define PENDING_OUTPUT_N_BYTES fp->_p - fp->_bf._base
-
-/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
-/* #undef PRI_MACROS_BROKEN */
-
-/* Define to 1 if the C compiler supports function prototypes. */
-#define PROTOTYPES 1
-
-/* Define if rename does not work for source paths with a trailing slash, like
- the one from SunOS 4.1.1_U1. */
-/* #undef RENAME_TRAILING_SLASH_BUG */
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#define RETSIGTYPE void
-
-/* the value to which errno is set when rmdir fails on a nonempty directory */
-#define RMDIR_ERRNO_NOT_EMPTY 66
-
-/* Define to 1 if the `setvbuf' function takes the buffering type as its
- second argument and the buffer pointer as the third, as on System V before
- release 3. */
-/* #undef SETVBUF_REVERSED */
-
-/* If using the C implementation of alloca, define if you know the
- direction of stack growth for your system; otherwise it will be
- automatically deduced at run-time.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown */
-/* #undef STACK_DIRECTION */
-
-/* Define if the block counts reported by statfs may be truncated to 2GB and
- the correct values may be stored in the f_spare array. (SunOS 4.1.2, 4.1.3,
- and 4.1.3_U1 are reported to have this problem. SunOS 4.1.1 seems not to be
- affected.) */
-/* #undef STATFS_TRUNCATES_BLOCK_COUNTS */
-
-/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
-/* #undef STAT_MACROS_BROKEN */
-
-/* Define if there is no specific function for reading filesystems usage
- information and you have the <sys/filsys.h> header file. (SVR2) */
-/* #undef STAT_READ_FILSYS */
-
-/* Define if statfs takes 2 args and struct statfs has a field named f_bsize.
- (4.3BSD, SunOS 4, HP-UX, AIX PS/2) */
-/* #undef STAT_STATFS2_BSIZE */
-
-/* Define if statfs takes 2 args and struct statfs has a field named f_fsize.
- (4.4BSD, NetBSD) */
-/* #undef STAT_STATFS2_FSIZE */
-
-/* Define if statfs takes 2 args and the second argument has type struct
- fs_data. (Ultrix) */
-/* #undef STAT_STATFS2_FS_DATA */
-
-/* Define if statfs takes 3 args. (DEC Alpha running OSF/1) */
-/* #undef STAT_STATFS3_OSF1 */
-
-/* Define if statfs takes 4 args. (SVR3, Dynix, Irix, Dolphin) */
-/* #undef STAT_STATFS4 */
-
-/* Define if there is a function named statvfs. (SVR4) */
-#define STAT_STATVFS 1
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to 1 if strerror_r returns char *. */
-/* #undef STRERROR_R_CHAR_P */
-
-/* Define to be the nanoseconds member of struct stat's st_mtim, if it exists.
- */
-/* #undef ST_MTIM_NSEC */
-
-/* Define to 1 on System V Release 4. */
-/* #undef SVR4 */
-
-/* FIXME */
-/* #undef TERMIOS_NEEDS_XOPEN_SOURCE */
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
-/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-/* #undef TM_IN_SYS_TIME */
-
-/* Define if tzset clobbers localtime's static buffer. */
-/* #undef TZSET_CLOBBERS_LOCALTIME_BUFFER */
-
-/* Define to 1 for Encore UMAX. */
-/* #undef UMAX */
-
-/* Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h> instead of
- <sys/cpustats.h>. */
-/* #undef UMAX4_3 */
-
-/* Version number of package */
-#define VERSION "5.3.0-20040812-FreeBSD"
-
-/* Define if sys/ptem.h is required for struct winsize. */
-/* #undef WINSIZE_IN_PTEM */
-
-/* Define to 1 if your processor stores words with the most significant byte
- first (like Motorola and SPARC, unlike Intel and VAX). */
-/* #undef WORDS_BIGENDIAN */
-
-/* Define to 1 if on AIX 3.
- System headers sometimes define this.
- We just want to avoid a redefinition error message. */
-#ifndef _ALL_SOURCE
-/* # undef _ALL_SOURCE */
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-/* #undef _FILE_OFFSET_BITS */
-
-/* Enable GNU extensions on systems that have them. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
-/* #undef _LARGEFILE_SOURCE */
-
-/* Define for large files, on AIX-style hosts. */
-/* #undef _LARGE_FILES */
-
-/* Define to 1 if on MINIX. */
-/* #undef _MINIX */
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
-/* #undef _POSIX_1_SOURCE */
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-/* #undef _POSIX_SOURCE */
-
-/* Enable extensions on Solaris. */
-#ifndef __EXTENSIONS__
-# define __EXTENSIONS__ 1
-#endif
-
-/* Define like PROTOTYPES; this can be used by system headers. */
-#define __PROTOTYPES 1
-
-/* Define to rpl_chown if the replacement function should be used. */
-/* #undef chown */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to a replacement function name for fnmatch(). */
-/* #undef fnmatch */
-
-/* Define to rpl_free if the replacement function should be used. */
-/* #undef free */
-
-/* Define to rpl_getcwd if the wrapper function should be used. */
-/* #undef getcwd */
-
-/* Define as rpl_getgroups if getgroups doesn't work right. */
-/* #undef getgroups */
-
-/* Define to a replacement function name for getline(). */
-/* #undef getline */
-
-/* Define to rpl_gettimeofday if the replacement function should be used. */
-/* #undef gettimeofday */
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-/* #undef gid_t */
-
-/* Define to rpl_gmtime if the replacement function should be used. */
-/* #undef gmtime */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to `unsigned long int' if <sys/types.h> does not define. */
-/* #undef ino_t */
-
-/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */
-/* #undef intmax_t */
-
-/* Define to rpl_localtime if the replacement function should be used. */
-/* #undef localtime */
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#define major_t unsigned int
-
-/* Define to rpl_malloc if the replacement function should be used. */
-/* #undef malloc */
-
-/* Define to a type if <wchar.h> does not define. */
-/* #undef mbstate_t */
-
-/* Define to rpl_memcmp if the replacement function should be used. */
-/* #undef memcmp */
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#define minor_t unsigned int
-
-/* Define to rpl_mkdir if the replacement function should be used. */
-/* #undef mkdir */
-
-/* Define to rpl_mkstemp if the replacement function should be used. */
-/* #undef mkstemp */
-
-/* Define to rpl_mktime if the replacement function should be used. */
-/* #undef mktime */
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef mode_t */
-
-/* Define to the name of the strftime replacement function. */
-#define my_strftime nstrftime
-
-/* Define to rpl_nanosleep if the replacement function should be used. */
-/* #undef nanosleep */
-
-/* Define to `long' if <sys/types.h> does not define. */
-/* #undef off_t */
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef pid_t */
-
-/* Define to rpl_putenv if the replacement function should be used. */
-/* #undef putenv */
-
-/* Define to rpl_realloc if the replacement function should be used. */
-/* #undef realloc */
-
-/* Define to rpl_rename if the replacement function should be used. */
-/* #undef rename */
-
-/* Define to equivalent of C99 restrict keyword, or to nothing if this is not
- supported. Do not define if restrict is supported directly. */
-#define restrict __restrict
-
-/* Define to empty if the C compiler doesn't support this keyword. */
-/* #undef signed */
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-/* Define as a signed type of the same size as size_t. */
-/* #undef ssize_t */
-
-/* Define to rpl_strnlen if the replacement function should be used. */
-#define strnlen rpl_strnlen
-
-/* Define to rpl_strtod if the replacement function should be used. */
-/* #undef strtod */
-
-/* Define to rpl_tzset if the wrapper function should be used. */
-/* #undef tzset */
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-/* #undef uid_t */
-
-/* Define to unsigned long or unsigned long long if <stdint.h> and
- <inttypes.h> don't define. */
-/* #undef uintmax_t */
-
-/* Define to `size_t' if <sys/types.h> does not define. */
-/* #undef uintptr_t */
-
-/* Define to rpl_utime if the replacement function should be used. */
-/* #undef utime */
-
-/* Define to empty if the keyword `volatile' does not work. Warning: valid
- code using `volatile' can become incorrect without. Disable with care. */
-/* #undef volatile */
diff --git a/gnu/usr.bin/sort/localedir.h b/gnu/usr.bin/sort/localedir.h
deleted file mode 100644
index f119a5f..0000000
--- a/gnu/usr.bin/sort/localedir.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* $FreeBSD$ */
-#define LOCALEDIR ""
diff --git a/gnu/usr.bin/sort/unlocked-io.h b/gnu/usr.bin/sort/unlocked-io.h
deleted file mode 100644
index 3c7a476..0000000
--- a/gnu/usr.bin/sort/unlocked-io.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* $FreeBSD$ */
-/* Dummy file for trimmed down sort */
diff --git a/tools/build/options/WITH_GNU_SORT b/tools/build/options/WITH_GNU_SORT
deleted file mode 100644
index 6bd32c9..0000000
--- a/tools/build/options/WITH_GNU_SORT
+++ /dev/null
@@ -1,2 +0,0 @@
-.\" $FreeBSD$
-Install GNU-licensed sort as 'sort' instead of BSD sort.
diff --git a/usr.bin/sort/Makefile b/usr.bin/sort/Makefile
index c17f9e3..809b6a3 100644
--- a/usr.bin/sort/Makefile
+++ b/usr.bin/sort/Makefile
@@ -2,15 +2,7 @@
.include <bsd.own.mk>
-.if ${MK_GNU_SORT} != "yes"
PROG= sort
-.else
-PROG= bsdsort
-CLEANFILES+= bsdsort.1
-
-bsdsort.1: sort.1
- cp ${.ALLSRC} ${.TARGET}
-.endif
SRCS= bwstring.c coll.c file.c mem.c radixsort.c sort.c vsort.c
OpenPOWER on IntegriCloud