mirror of
https://git.savannah.gnu.org/git/coreutils.git
synced 2025-09-10 07:59:52 +02:00
Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9aee8e78ea | ||
|
|
ab511a2106 | ||
|
|
5e711ff948 | ||
|
|
6f5700ac8a | ||
|
|
8daf081cd2 | ||
|
|
3f619c59cf | ||
|
|
0db199df69 | ||
|
|
beb12e09f3 | ||
|
|
65ba507e17 | ||
|
|
795c052e33 | ||
|
|
09ef5a443f | ||
|
|
3765e5a26e | ||
|
|
b64a11dc76 | ||
|
|
82d98da743 | ||
|
|
ecf70125f9 | ||
|
|
1b569150c5 | ||
|
|
4269a52c1a | ||
|
|
b23de86834 | ||
|
|
7782da7bf5 | ||
|
|
2b5e4cb837 | ||
|
|
5f997760c9 | ||
|
|
10ca93af8f | ||
|
|
0278a4d7d3 | ||
|
|
2aab34d486 | ||
|
|
2912097e82 | ||
|
|
3238605998 | ||
|
|
1e9098dc83 | ||
|
|
27940f5d02 | ||
|
|
561c3a2b75 | ||
|
|
c1fb4bcb2a |
14
.cvsignore
Normal file
14
.cvsignore
Normal file
@@ -0,0 +1,14 @@
|
||||
*.cache
|
||||
*.lineno
|
||||
*.log
|
||||
.kludge-stamp
|
||||
ABOUT-NLS
|
||||
INSTALL
|
||||
Makefile
|
||||
Makefile.in
|
||||
THANKS-to-translators
|
||||
aclocal.m4
|
||||
chcon
|
||||
config.status
|
||||
configure
|
||||
coreutils-*
|
||||
7
.gitattributes
vendored
7
.gitattributes
vendored
@@ -1,7 +0,0 @@
|
||||
*.texi* diff=texinfo
|
||||
|
||||
# Put something like the following e.g., in your ~/.gitconfig file
|
||||
# # Include proper "function name" string in diffs of texinfo.
|
||||
# # Derived from the regexp in emacs' lisp/add-log.el.
|
||||
# [diff "texinfo"]
|
||||
# funcname = "^@node[ \t][ \t]*\\([^,][^,]*\\)"
|
||||
66
.gitignore
vendored
66
.gitignore
vendored
@@ -1,33 +1,19 @@
|
||||
*.1
|
||||
*.I[12]
|
||||
*.[EIOX]
|
||||
*.gmo
|
||||
*.o
|
||||
*/.deps
|
||||
*~
|
||||
.gdb-history
|
||||
.kludge-stamp
|
||||
.tarball-version
|
||||
.version
|
||||
ABOUT-NLS
|
||||
ChangeLog
|
||||
GNUmakefile
|
||||
ID
|
||||
INSTALL
|
||||
Makefile
|
||||
Makefile.in
|
||||
TAGS
|
||||
THANKS-to-translators
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
build-aux/.gitignore
|
||||
build-aux/compile
|
||||
build-aux/config.guess
|
||||
build-aux/config.sub
|
||||
build-aux/depcomp
|
||||
build-aux/install-sh
|
||||
build-aux/mdate-sh
|
||||
build-aux/missing
|
||||
build-aux/texinfo.tex
|
||||
build-aux/ylwrap
|
||||
chcon
|
||||
config.cache
|
||||
config.h
|
||||
config.hin
|
||||
@@ -38,37 +24,17 @@ coreutils-*.tar.bz2
|
||||
coreutils-*.tar.bz2.sig
|
||||
coreutils-*.tar.gz
|
||||
coreutils-*.tar.gz.sig
|
||||
coreutils-*.tar.lzma
|
||||
coreutils-*.tar.lzma.sig
|
||||
gnulib-tests
|
||||
lib/.cvsignore
|
||||
lib/.gitignore
|
||||
lib/arpa
|
||||
lib/binary-io.h
|
||||
lib/charset.alias
|
||||
lib/configmake.h
|
||||
lib/libcoreutils.a
|
||||
lib/printf.c
|
||||
lib/progname.c
|
||||
lib/progname.h
|
||||
lib/selinux
|
||||
lib/uniwidth
|
||||
m4/.cvsignore
|
||||
m4/.gitignore
|
||||
maint.mk
|
||||
man/*.1
|
||||
po/*.gmo
|
||||
po/*.po
|
||||
po/.gitignore
|
||||
po/.reference
|
||||
po/LINGUAS
|
||||
po/Makefile.in
|
||||
po/Makevars
|
||||
po/POTFILES
|
||||
po/checksums
|
||||
po/coreutils.pot
|
||||
po/stamp-po
|
||||
src/version.c
|
||||
src/version.h
|
||||
coreutils-*.xdelta
|
||||
coreutils-*.xdelta.sig
|
||||
stamp-h1
|
||||
tests/*/*.log
|
||||
tests/cut/cut-tests
|
||||
tests/head/head-tests
|
||||
tests/join/join-tests
|
||||
tests/pr/pr-tests
|
||||
tests/sort/sort-tests
|
||||
tests/tac/tac-tests
|
||||
tests/tail/tail-tests
|
||||
tests/test/test-tests
|
||||
tests/tr/tr-tests
|
||||
tests/uniq/uniq-tests
|
||||
tests/wc/wc-tests
|
||||
|
||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,3 +0,0 @@
|
||||
[submodule "gnulib"]
|
||||
path = gnulib
|
||||
url = git://git.sv.gnu.org/gnulib.git
|
||||
147
.hgignore
Normal file
147
.hgignore
Normal file
@@ -0,0 +1,147 @@
|
||||
.*/Makefile$
|
||||
.*/Makefile\.in$
|
||||
.*/\.deps/
|
||||
.*\.1$
|
||||
.*\.o$
|
||||
.*~$
|
||||
^Makefile$
|
||||
^Makefile\.in$
|
||||
^THANKS-to-translators$
|
||||
^aclocal\.m4$
|
||||
^autom4te\.cache/
|
||||
^config\.h$
|
||||
^config\.hin$
|
||||
^config\.log$
|
||||
^config\.status$
|
||||
^configure$
|
||||
^doc/constants\.texi$
|
||||
^doc/coreutils\.info$
|
||||
^doc/stamp-vti$
|
||||
^doc/version\.texi$
|
||||
^lib/alloca\.h$
|
||||
^lib/charset\.alias$
|
||||
^lib/getdate\.c$
|
||||
^lib/libcoreutils\.a$
|
||||
^lib/ref-add\.sed$
|
||||
^lib/ref-del\.sed$
|
||||
^lib/t-fpending$
|
||||
^po/.*\.gmo$
|
||||
^po/.*\.po$
|
||||
^po/POTFILES$
|
||||
^po/stamp-po$
|
||||
^po/remove-potcdate.sed$
|
||||
^src/\[$
|
||||
^src/base64$
|
||||
^src/basename$
|
||||
^src/cat$
|
||||
^src/chgrp$
|
||||
^src/chmod$
|
||||
^src/chown$
|
||||
^src/chroot$
|
||||
^src/cksum$
|
||||
^src/comm$
|
||||
^src/cp$
|
||||
^src/csplit$
|
||||
^src/cut$
|
||||
^src/date$
|
||||
^src/dd$
|
||||
^src/df$
|
||||
^src/dir$
|
||||
^src/dircolors$
|
||||
^src/dircolors\.h$
|
||||
^src/dirname$
|
||||
^src/du$
|
||||
^src/echo$
|
||||
^src/env$
|
||||
^src/expand$
|
||||
^src/expr$
|
||||
^src/factor$
|
||||
^src/false$
|
||||
^src/fmt$
|
||||
^src/fold$
|
||||
^src/fs\.h$
|
||||
^src/ginstall$
|
||||
^src/groups$
|
||||
^src/head$
|
||||
^src/hostid$
|
||||
^src/hostname$
|
||||
^src/id$
|
||||
^src/join$
|
||||
^src/kill$
|
||||
^src/link$
|
||||
^src/ln$
|
||||
^src/localedir\.h$
|
||||
^src/logname$
|
||||
^src/ls$
|
||||
^src/md5sum$
|
||||
^src/mkdir$
|
||||
^src/mkfifo$
|
||||
^src/mknod$
|
||||
^src/mv$
|
||||
^src/nice$
|
||||
^src/nl$
|
||||
^src/nohup$
|
||||
^src/od$
|
||||
^src/paste$
|
||||
^src/pathchk$
|
||||
^src/pinky$
|
||||
^src/pr$
|
||||
^src/printenv$
|
||||
^src/printf$
|
||||
^src/ptx$
|
||||
^src/pwd$
|
||||
^src/readlink$
|
||||
^src/rm$
|
||||
^src/rmdir$
|
||||
^src/seq$
|
||||
^src/setuidgid$
|
||||
^src/sha1sum$
|
||||
^src/sha224sum$
|
||||
^src/sha256sum$
|
||||
^src/sha384sum$
|
||||
^src/sha512sum$
|
||||
^src/shred$
|
||||
^src/sleep$
|
||||
^src/sort$
|
||||
^src/split$
|
||||
^src/stat$
|
||||
^src/stty$
|
||||
^src/su$
|
||||
^src/sum$
|
||||
^src/sync$
|
||||
^src/tac$
|
||||
^src/tail$
|
||||
^src/tee$
|
||||
^src/test$
|
||||
^src/touch$
|
||||
^src/tr$
|
||||
^src/true$
|
||||
^src/tsort$
|
||||
^src/tty$
|
||||
^src/uname$
|
||||
^src/unexpand$
|
||||
^src/uniq$
|
||||
^src/unlink$
|
||||
^src/uptime$
|
||||
^src/users$
|
||||
^src/vdir$
|
||||
^src/wc$
|
||||
^src/wheel-size\.h$
|
||||
^src/wheel\.h$
|
||||
^src/who$
|
||||
^src/whoami$
|
||||
^src/yes$
|
||||
^stamp-h1$
|
||||
^tests/.*\.I[12]$
|
||||
^tests/.*\.[EIOX]$
|
||||
^tests/cut/cut-tests$
|
||||
^tests/head/head-tests$
|
||||
^tests/join/join-tests$
|
||||
^tests/pr/pr-tests$
|
||||
^tests/sort/sort-tests$
|
||||
^tests/tac/tac-tests$
|
||||
^tests/tail/tail-tests$
|
||||
^tests/test/test-tests$
|
||||
^tests/tr/tr-tests$
|
||||
^tests/uniq/uniq-tests$
|
||||
^tests/wc/wc-tests$
|
||||
@@ -1 +1 @@
|
||||
8.0
|
||||
6.7
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Suppress valgrind diagnostics we don't care about.
|
||||
|
||||
# Copyright (C) 2003, 2004, 2006-2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# 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,
|
||||
@@ -13,7 +13,9 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
{
|
||||
libc_dl_open
|
||||
@@ -75,26 +77,3 @@
|
||||
fun:strlen
|
||||
fun:fillin_rpath
|
||||
}
|
||||
{
|
||||
libc-getpwuid-leak
|
||||
Memcheck:Leak
|
||||
fun:malloc
|
||||
fun:nss_parse_service_list
|
||||
fun:__nss_database_lookup
|
||||
obj:*
|
||||
obj:*
|
||||
fun:getpwuid_r@@GLIBC_2.2.5
|
||||
fun:getpwuid
|
||||
fun:getuser
|
||||
fun:format_user_width
|
||||
fun:gobble_file
|
||||
fun:main
|
||||
}
|
||||
{
|
||||
utimensat-NULL
|
||||
Memcheck:Param
|
||||
utimensat(filename)
|
||||
fun:futimens
|
||||
fun:gl_futimens
|
||||
fun:main
|
||||
}
|
||||
|
||||
4
.x-po-check
Normal file
4
.x-po-check
Normal file
@@ -0,0 +1,4 @@
|
||||
ChangeLog(-[0-9]+)?$
|
||||
^old/
|
||||
^src/c99-to-c98\.diff$
|
||||
^gl/.*
|
||||
@@ -1 +0,0 @@
|
||||
^build-aux/check\.mk$
|
||||
@@ -1 +0,0 @@
|
||||
build-aux/cvsu
|
||||
@@ -1,5 +1,8 @@
|
||||
ChangeLog
|
||||
Makefile.maint
|
||||
NEWS
|
||||
config-log
|
||||
po/
|
||||
src/df.c
|
||||
src/stat.c
|
||||
tests/misc/df-P
|
||||
|
||||
@@ -1 +1,6 @@
|
||||
ChangeLog
|
||||
ChangeLog*
|
||||
Makefile.maint
|
||||
config.hin
|
||||
configure
|
||||
m4/jm-macros.m4
|
||||
src/system.h
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
^gl/
|
||||
@@ -1,2 +0,0 @@
|
||||
gl/lib/randint.c
|
||||
lib/euidaccess-stat.c
|
||||
@@ -1 +1,11 @@
|
||||
^configure$
|
||||
ChangeLog
|
||||
^TODO$
|
||||
^lib/mktime\.c$
|
||||
^lib/getloadavg\.c$
|
||||
^lib/euidaccess\.c$
|
||||
^lib/euidaccess-stat\.c$
|
||||
^lib/group-member\.c$
|
||||
^Makefile\.maint$
|
||||
^doc/coreutils.texi$
|
||||
^src/stty.c$
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
src/system.h
|
||||
tests/du/2g
|
||||
old/fileutils/ChangeLog-1997
|
||||
ChangeLog-2005
|
||||
@@ -1 +0,0 @@
|
||||
ChangeLog
|
||||
@@ -1,6 +0,0 @@
|
||||
^GNUMakefile$
|
||||
Makefile\.am$
|
||||
\.mk$
|
||||
^tests/pr/
|
||||
ChangeLog.*
|
||||
^man/help2man$
|
||||
@@ -1,9 +1,28 @@
|
||||
^lib/at-func\.c$
|
||||
^lib/bcopy\.c$
|
||||
^lib/buffer-lcm\.c$
|
||||
^lib/c-strtold\.c$
|
||||
^lib/fnmatch_loop\.c$
|
||||
^lib/full-read\.c$
|
||||
^lib/imaxtostr\.c$
|
||||
^lib/mempcpy\.c$
|
||||
^lib/memset\.c$
|
||||
^lib/offtostr\.c$
|
||||
^lib/regcomp\.c$
|
||||
^lib/regex_internal\.c$
|
||||
^lib/regexec\.c$
|
||||
^lib/safe-write\.c$
|
||||
^lib/strtoll\.c$
|
||||
^lib/strtoul\.c$
|
||||
^lib/strtoull\.c$
|
||||
^lib/strtoumax\.c$
|
||||
^lib/umaxtostr\.c$
|
||||
^lib/xstrtold\.c$
|
||||
^lib/xstrtoul\.c$
|
||||
^src/false\.c$
|
||||
^src/lbracket\.c$
|
||||
^src/ls-dir\.c$
|
||||
^src/ls-ls\.c$
|
||||
^src/ls-vdir\.c$
|
||||
^src/rand-isaac\.c$
|
||||
^src/tac-pipe\.c$
|
||||
^src/uname-arch\.c$
|
||||
^src/uname-uname\.c$
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
^lib/buffer-lcm\.c$
|
||||
^src/false\.c$
|
||||
^src/lbracket\.c$
|
||||
^src/ls-dir\.c$
|
||||
^src/ls-ls\.c$
|
||||
^src/ls-vdir\.c$
|
||||
^src/tac-pipe\.c$
|
||||
^src/uname-arch\.c$
|
||||
^src/uname-uname\.c$
|
||||
@@ -1,3 +0,0 @@
|
||||
^src/libstdbuf\.c$
|
||||
^src/system\.h$
|
||||
^src/copy\.h$
|
||||
43
AUTHORS
43
AUTHORS
@@ -1,37 +1,36 @@
|
||||
Here are the names of the programs in this package,
|
||||
each followed by the name(s) of its author(s).
|
||||
|
||||
arch: David MacKenzie, Karel Zak
|
||||
base64: Simon Josefsson
|
||||
basename: David MacKenzie
|
||||
cat: Torbjörn Granlund, Richard M. Stallman
|
||||
basename: FIXME unknown
|
||||
cat: Torbjorn Granlund, Richard M. Stallman
|
||||
chcon: Russell Coker, Jim Meyering
|
||||
chgrp: David MacKenzie, Jim Meyering
|
||||
chmod: David MacKenzie, Jim Meyering
|
||||
chown: David MacKenzie, Jim Meyering
|
||||
chroot: Roland McGrath
|
||||
cksum: Q. Frank Xia
|
||||
comm: Richard M. Stallman, David MacKenzie
|
||||
cp: Torbjörn Granlund, David MacKenzie, Jim Meyering
|
||||
comm: Richard Stallman, David MacKenzie
|
||||
cp: Torbjorn Granlund, David MacKenzie, Jim Meyering
|
||||
csplit: Stuart Kemp, David MacKenzie
|
||||
cut: David M. Ihnat, David MacKenzie, Jim Meyering
|
||||
cut: David Ihnat, David MacKenzie, Jim Meyering
|
||||
date: David MacKenzie
|
||||
dd: Paul Rubin, David MacKenzie, Stuart Kemp
|
||||
df: Torbjörn Granlund, David MacKenzie, Paul Eggert
|
||||
dir: Richard M. Stallman, David MacKenzie
|
||||
df: Torbjorn Granlund, David MacKenzie, Paul Eggert
|
||||
dir: Richard Stallman, David MacKenzie
|
||||
dircolors: H. Peter Anvin
|
||||
dirname: David MacKenzie, Jim Meyering
|
||||
du: Torbjörn Granlund, David MacKenzie, Paul Eggert, Jim Meyering
|
||||
echo: Brian Fox, Chet Ramey
|
||||
du: Torbjorn Granlund, David MacKenzie, Paul Eggert, Jim Meyering
|
||||
echo: FIXME unknown
|
||||
env: Richard Mlynarik, David MacKenzie
|
||||
expand: David MacKenzie
|
||||
expr: Mike Parker, James Youngman, Paul Eggert
|
||||
expr: Mike Parker
|
||||
factor: Paul Rubin
|
||||
false: Jim Meyering
|
||||
fmt: Ross Paterson
|
||||
fold: David MacKenzie
|
||||
ginstall: David MacKenzie
|
||||
groups: David MacKenzie, James Youngman
|
||||
groups: David MacKenzie
|
||||
head: David MacKenzie, Jim Meyering
|
||||
hostid: Jim Meyering
|
||||
hostname: Jim Meyering
|
||||
@@ -41,12 +40,11 @@ kill: Paul Eggert
|
||||
link: Michael Stone
|
||||
ln: Mike Parker, David MacKenzie
|
||||
logname: FIXME: unknown
|
||||
ls: Richard M. Stallman, David MacKenzie
|
||||
ls: Richard Stallman, David MacKenzie
|
||||
md5sum: Ulrich Drepper, Scott Miller, David Madore
|
||||
mkdir: David MacKenzie
|
||||
mkfifo: David MacKenzie
|
||||
mknod: David MacKenzie
|
||||
mktemp: Jim Meyering
|
||||
mv: Mike Parker, David MacKenzie, Jim Meyering
|
||||
nice: David MacKenzie
|
||||
nl: Scott Bartram, David MacKenzie
|
||||
@@ -58,10 +56,10 @@ pinky: Joseph Arceneaux, David MacKenzie, Kaveh Ghazi
|
||||
pr: Pete TerMaat, Roland Huebner
|
||||
printenv: David MacKenzie, Richard Mlynarik
|
||||
printf: David MacKenzie
|
||||
ptx: François Pinard
|
||||
ptx: F. Pinard
|
||||
pwd: Jim Meyering
|
||||
readlink: Dmitry V. Levin
|
||||
rm: Paul Rubin, David MacKenzie, Richard M. Stallman, Jim Meyering
|
||||
rm: Paul Rubin, David MacKenzie, Richard Stallman, Jim Meyering
|
||||
rmdir: David MacKenzie
|
||||
runcon: Russell Coker
|
||||
seq: Ulrich Drepper
|
||||
@@ -74,9 +72,8 @@ shred: Colin Plumb
|
||||
shuf: Paul Eggert
|
||||
sleep: Jim Meyering, Paul Eggert
|
||||
sort: Mike Haertel, Paul Eggert
|
||||
split: Torbjörn Granlund, Richard M. Stallman
|
||||
split: Torbjorn Granlund, Richard M. Stallman
|
||||
stat: Michael Meskes
|
||||
stdbuf: Pádraig Brady
|
||||
stty: David MacKenzie
|
||||
su: David MacKenzie
|
||||
sum: Kayvan Aghaiepour, David MacKenzie
|
||||
@@ -85,25 +82,19 @@ tac: Jay Lepreau, David MacKenzie
|
||||
tail: Paul Rubin, David MacKenzie, Ian Lance Taylor, Jim Meyering
|
||||
tee: Mike Parker, Richard M. Stallman, David MacKenzie
|
||||
test: Kevin Braunsdorf, Matthew Bradburn
|
||||
timeout: Pádraig Brady
|
||||
touch: Paul Rubin, Arnold Robbins, Jim Kingdon, David MacKenzie, Randy Smith
|
||||
tr: Jim Meyering
|
||||
true: Jim Meyering
|
||||
truncate: Pádraig Brady
|
||||
tsort: Mark Kettenis
|
||||
tty: David MacKenzie
|
||||
uname: David MacKenzie
|
||||
unexpand: David MacKenzie
|
||||
uniq: Richard M. Stallman, David MacKenzie
|
||||
uniq: Richard Stallman, David MacKenzie
|
||||
unlink: Michael Stone
|
||||
uptime: Joseph Arceneaux, David MacKenzie, Kaveh Ghazi
|
||||
users: Joseph Arceneaux, David MacKenzie
|
||||
vdir: Richard M. Stallman, David MacKenzie
|
||||
vdir: Richard Stallman, David MacKenzie
|
||||
wc: Paul Rubin, David MacKenzie
|
||||
who: Joseph Arceneaux, David MacKenzie, Michael Stone
|
||||
whoami: Richard Mlynarik
|
||||
yes: David MacKenzie
|
||||
|
||||
;; Local Variables:
|
||||
;; coding: utf-8
|
||||
;; End:
|
||||
|
||||
881
COPYING
881
COPYING
@@ -1,626 +1,285 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
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 Lesser 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
|
||||
them 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.
|
||||
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 prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
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 pass on to the recipients the same
|
||||
freedoms that you received. 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.
|
||||
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.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
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.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
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.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
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.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey 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;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
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.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
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 convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
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.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
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.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
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.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
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 that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
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.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
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.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
NO WARRANTY
|
||||
|
||||
15. Disclaimer of 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.
|
||||
|
||||
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.
|
||||
|
||||
16. Limitation of Liability.
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
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.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
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
|
||||
@@ -628,15 +287,15 @@ 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
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
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
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
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,
|
||||
@@ -644,31 +303,37 @@ the "copyright" line and a pointer to where the full notice is found.
|
||||
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, see <http://www.gnu.org/licenses/>.
|
||||
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.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
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, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
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 school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
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:
|
||||
|
||||
The GNU 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 Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
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 Lesser General
|
||||
Public License instead of this License.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
607
ChangeLog-2005
607
ChangeLog-2005
@@ -1,608 +1,3 @@
|
||||
2005-12-27 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* Makefile.maint (sc_obsolete_symbols): Prohibit use of O_NDELAY.
|
||||
(sc_prohibit_assert_without_use): New rule.
|
||||
(syntax-check-rules): Add it to the list.
|
||||
* .x-sc_prohibit_assert_without_use: New empty file.
|
||||
* Makefile.am (EXTRA_DIST): Add it.
|
||||
|
||||
* Makefile.maint (CVS_LIST): Define in terms of $(srcdir).
|
||||
|
||||
* cp.c, df.c, link.c, mknod.c, nice.c, sleep.c, unlink.c:
|
||||
Don't include <assert.h>; it wasn't used.
|
||||
|
||||
2005-12-26 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/chown-core.c (restricted_chown):
|
||||
Don't try O_WRONLY unless O_RDONLY failed wth EACCES.
|
||||
* src/remove.c (fd_to_subdirp): Open with O_DIRECTORY | O_NOCTTY
|
||||
| O_NOFOLLOW too, for consistency with other dir-openers.
|
||||
Use POSIX-preferred O_NONBLOCK rather than O_NDELAY.
|
||||
(is_empty_dir): Likewise.
|
||||
* src/shred.c (wipename): Likewise. Don't bother trying to open
|
||||
dir for writing, since POSIX prohibits it.
|
||||
|
||||
2005-12-22 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* tests/help-version: Redirect stderr to /dev/full, to suppress
|
||||
write error diagnostic.
|
||||
|
||||
2005-12-19 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/mkdir.c, src/mknod.c, src/mkfifo.c (main)
|
||||
Avoid a minor race condition when `-m MODE' is specified, by using
|
||||
open, fchown, and close rather than just chown. To do that reliably --
|
||||
even with an overly restrictive umask -- ensure that each mkdir,
|
||||
mknod and mkfifo call uses a mode including at least owner-read access.
|
||||
* src/mknod.c (main): When `-m MODE' is specified, exit nonzero if
|
||||
the subsequent chown (or equivalent open,fchown,close) fails.
|
||||
* tests/misc/mknod: New tests.
|
||||
* tests/misc/Makefile.am (TESTS): Add mknod.
|
||||
|
||||
2005-12-17 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/remove.c (is_empty_dir): Open with O_NDELAY, so we don't hang,
|
||||
e.g., on a named pipe.
|
||||
(OPEN_NO_FOLLOW_SYMLINK): Remove definition. Use O_NOFOLLOW in
|
||||
place of all uses, since it is guaranteed (system.h) to be defined.
|
||||
|
||||
2005-12-05 Andreas Gruenbacher <agruen@suse.de>
|
||||
|
||||
Add POSIX ACL support
|
||||
* src/ls.c: Switch back from HAVE_ACL to USE_ACL: The acl() syscall
|
||||
is no requirement for ACL support; particularly, it does not exist
|
||||
on systems that have POSIX ACLs.
|
||||
* src/copy.h (cp_option_init) [umask_kill]: Remove member.
|
||||
* src/cp.c (umask_kill): With default acls, the umask is not to be
|
||||
applied. Remove umask_kill, don't change the process umask, and let
|
||||
the kernel apply the umask where appropriate.
|
||||
* src/cp.c (make_dir_parents_private): Fix logic for POSIX ACLs.
|
||||
* src/copy.c (get_dest_mode): Remove; it is obsolete after removing
|
||||
umask_kill.
|
||||
(copy_reg, copy_internal): Use copy_acl and set_acl
|
||||
instead of fchown/chown. Fix the logic for POSIX ACLs.
|
||||
(chown_succeded): Remove; we now always copy acls and
|
||||
preserve S_ISUID, S_ISGID, and S_ISVTX when needed, no matter if we
|
||||
did a chown before or not.
|
||||
* src/mv.c, src/install.c (cp_option_init): Don't set umask_kill member.
|
||||
* src/Makefile.am (dir_LDADD, ls_LDADD, vdir_LDADD, cp_LDADD,
|
||||
mv_LDADD, ginstall_LDADD): On systems with an ACL library, arrange
|
||||
to link with it via $(LIB_ACL), for the utilities that need it.
|
||||
|
||||
2005-12-16 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/remove.c (OPENAT_CWD_RESTORE__REQUIRE): Remove.
|
||||
(OPENAT_CWD_RESTORE__ALLOW_FAILURE): Likewise.
|
||||
(fd_to_subdirp): Remove openat_cwd_restore_allow_failure arg; its
|
||||
value is now signified by whether cwd_errno is null.
|
||||
(fd_to_subdirp, remove_dir, rm_1); Change cwd failure indicator from
|
||||
pointer-to-bool to pointer-to-errno-value. All callers changed.
|
||||
(rm_1): Don't bother setting a local cwd failure flag and then
|
||||
ORing it into the caller's. Just set the caller's.
|
||||
(rm): Use cwd failure errno value to print a slightly-better
|
||||
diagnostic.
|
||||
|
||||
2005-12-15 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/stat.c (print_it): Properly handle a backslash at the
|
||||
end of a --printf format string. Reported by Paul Eggert.
|
||||
* tests/misc/stat-printf (end-bs): Add a test for the above.
|
||||
|
||||
2005-12-15 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* tests/acl: Port to pre-POSIX shells like Solaris 8 /bin/sh.
|
||||
Don't assume /etc/passwd contains user names; use 'id' instead.
|
||||
|
||||
2005-12-15 Jim Meyering <jim@meyering.net>
|
||||
|
||||
stat: revert behavior of --format=FMT (-c)
|
||||
stat: add new option: --printf=FMT
|
||||
* NEWS: Mention this.
|
||||
* src/stat.c (isodigit, octtobin, hextobin): Define.
|
||||
(PRINTF_OPTION): Define.
|
||||
(interpret_backslash_escapes, trailing_delim): New globals.
|
||||
(usage): Document them. Alphabetize on long option names.
|
||||
(print_esc_char): New function.
|
||||
(print_it): Rewrite, in order to handle backslash escapes.
|
||||
(main): Handle new option. Set globals for --format, too.
|
||||
|
||||
* tests/misc/stat-printf: Test --printf and --format.
|
||||
* tests/misc/Makefile.am (TESTS): Add stat-printf.
|
||||
|
||||
2005-12-14 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* NEWS: sort now reports incompatible options.
|
||||
* src/sort.c (incompatible_options, check_ordering_compatibility):
|
||||
New functions.
|
||||
(main): Use them. Don't bother with a usage message for
|
||||
"sort -c a b", for consistency with other error diagnostics.
|
||||
* tests/sort/Test.pm (incompat1, incompat2, incompat3, incompat4):
|
||||
New tests.
|
||||
|
||||
* src/cat.c (main): Undo previous change. close_stdout already
|
||||
does the check, so the previous change wasn't necessary.
|
||||
|
||||
2005-12-13 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/cat.c (main): Check for close (STDOUT_FILENO) failure.
|
||||
|
||||
2005-12-12 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Install a more-conservative approach for sort -R. It's the
|
||||
same basic idea as the existing code, except it uses the full ISAAC
|
||||
approach (called the "more kosher" approach in the existing comments).
|
||||
This makes "sort -R" quite a bit slower (about a factor of 2 on my
|
||||
little tests involving 10000 lines on a 2.4 GHz P4), but I think it's
|
||||
better to be conservative here at first, and review any performance
|
||||
improvements carefully.
|
||||
* .x-sc_require_config_h: Add src/rand-isaac.c.
|
||||
* src/rand-isaac.h: Remove. All uses now simply include rand-isaac.c.
|
||||
* src/Makefile.am (noinst_HEADERS): Remove rand-isaac.h.
|
||||
(shred_SOURCES, sort_SOURCES): Remove.
|
||||
(EXTRA_DIST): Add rand-isaac.c.
|
||||
* src/rand-isaac.c: Revert to what used to be in shred.c, without
|
||||
changing it to allow for varying numbers of words in the state.
|
||||
Alter so that we include rand-isaac.c directly rather than
|
||||
compiling it and linking to it. Don't include config.h or
|
||||
system.h; that's the includer's responsibility.
|
||||
Omit functions that are specific to shred.
|
||||
(ISAAC_LOG, ISAAC_WORDS, ISAAC_BYTES, struct isaac_state, ind):
|
||||
(isaac_step, struct irand_state):
|
||||
Resurrect these, with the same defns that used to be in shred.c.
|
||||
(ISAAC_SIZE, isaac_new, isaac_copy): Remove.
|
||||
(isaac_refill, isaac_seed_start, isaac_seed_data, irand_init, irand32):
|
||||
static again.
|
||||
(struct isaac_state, isaac_refill, isaac_mix, isaac_init):
|
||||
(isaac_seed_start, isaac_seed_data, isaac_seed_finish, isaac_seed):
|
||||
(irand_init, irand32, irand_mod):
|
||||
Number of words is constant again.
|
||||
(struct irand_state, irand_init, irand32, irand_mod): Move to shred.c.
|
||||
* src/shred.c: Include rand-isaac.c rather than rand-isaac.h.
|
||||
* src/sort.c: Likewise.
|
||||
* src/shred.c (fillrand, dopass, main): Undo previous change.
|
||||
(struct irand_state, irand_init, irand32, irand_mod): Moved back here,
|
||||
from rand-isaac.c.
|
||||
* src/sort.c: Don't include md5.h; it wasn't needed.
|
||||
(struct keyfield): Rename random_hash to random, for consistency
|
||||
with the other member names. All uses changed.
|
||||
(usage): Tweak wording to mention STRING for --seed option.
|
||||
(short_options): Rorder for consistency with other programs.
|
||||
(rand_state): Now a struct, not a pointer to one. All uses changed.
|
||||
(HASH_WORDS, HASH_SIZE): Remove.
|
||||
(get_hash): Remove comments around resbuf size, since we can assume C89.
|
||||
Use a "more-kosher" (but slower) approach of invoking isaac_refill.
|
||||
(keycompare): Adjust to the new get_hash.
|
||||
Add a FIXME.
|
||||
(badfieldspec): Omit recently-introduced comment; it isn't needed.
|
||||
(main): Don't set need_random simply because gkey has it set; that
|
||||
doesn't necessarily mean we'll need random numbers.
|
||||
Redo seeding to match new get_hash approach.
|
||||
|
||||
2005-12-10 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/Makefile.am (noinst_HEADERS): Add rand-isaac.h.
|
||||
|
||||
Avoid shred segfault on 64-bit systems.
|
||||
* src/rand-isaac.c (isaac_refill): Don't try to negate a
|
||||
local of type uint32_t. Make the local an `int' instead.
|
||||
|
||||
* NEWS: Mention sort's new options.
|
||||
|
||||
* src/rand-isaac.c (isaac_mix): Declare to be static.
|
||||
Mark all other functions as `extern' so the tight-scope
|
||||
part of `make distcheck' passes once again.
|
||||
* src/rand-isaac.h (isaac_mix): Remove declaration.
|
||||
|
||||
* src/sort.c (get_hash): Change position of `*' in parameter
|
||||
type to conform with convention.
|
||||
(main): Split a long line so it fits in 80 columns.
|
||||
(keycompare): Remove stray SPACE before TAB that was
|
||||
causing `make distcheck' to fail.
|
||||
|
||||
* src/shred.c: Don't include gethrxtime.h. No longer needed.
|
||||
|
||||
* tests/misc/sort-rand: New file: basic tests for the new options.
|
||||
* tests/misc/Makefile.am (TESTS): Add sort-rand.
|
||||
|
||||
2005-12-10 Frederik Eaton <frederik@ofb.net>
|
||||
|
||||
* src/Makefile.am (sort_LDADD): Add $(LIB_GETHRXTIME).
|
||||
(shred_SOURCES, sort_SOURCES): New macros, so we compile rand-isaac.c.
|
||||
* src/rand-isaac.c: New file, containing ISAAC code that was in shred.c.
|
||||
Make state size runtime-configurable.
|
||||
(isaac_new, isaac_copy): New functions.
|
||||
* src/rand-isaac.h: New file.
|
||||
* src/shred.c: Include rand-isaac.h. Move ISAAC code to rand-isaac.c.
|
||||
(fillrand, main): Adjust to the fact that the state size is now
|
||||
runtime-configurable.
|
||||
* src/sort.c (short_options, long_options, WORDS, keycompare, main):
|
||||
(usage): Add options --random-sort and --seed to implement a random
|
||||
shuffle.
|
||||
Include md5.h and rand-isaac.h.
|
||||
(get_hash): New function.
|
||||
(rand_state): New var.
|
||||
(HASH_WORDS, HASH_SIZE): New macros.
|
||||
|
||||
2005-12-09 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* tests/dd/misc: Add test for dd iflags=noatime.
|
||||
|
||||
2005-12-09 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/sort.c (usage): Mention white space vs -b and -t options.
|
||||
From The Wanderer.
|
||||
|
||||
2005-12-09 Eric Blake <ebb9@byu.net>
|
||||
|
||||
* src/test.c (main): Fix misleading comment.
|
||||
|
||||
2005-12-07 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* NEWS: Mention dd's new noatime flag.
|
||||
* src/system.h (O_NOATIME): Define to 0 if not already defined.
|
||||
* src/dd.c (flags, usage): Add support for noatime flag.
|
||||
|
||||
2005-12-07 Jim Meyering <jim@meyering.net>
|
||||
|
||||
Distribute the cvsu script, used only by `make syntax-check'.
|
||||
* Makefile.am (EXTRA_DIST): Add build-aux/cvsu.
|
||||
* Makefile.maint (CVS_LIST): Use build-aux/cvsu, now that we
|
||||
distribute a copy of this script.
|
||||
* .x-sc_unmarked_diagnostics: Add build-aux/cvsu.
|
||||
|
||||
* tests/mv/acl: exit-77 before the trap, not after, if we fail
|
||||
to create a temporary directory on another partition.
|
||||
From Andreas Gruenbacher.
|
||||
|
||||
2005-12-06 Tomas Pospisek <tpo@sourcepole.ch> (tiny change)
|
||||
|
||||
* man/basename.x: Cross-reference to dirname and readlink.
|
||||
* man/dirname.x: Cross-reference to basename and readlink.
|
||||
|
||||
2005-12-05 Andreas Gruenbacher
|
||||
|
||||
* src/copy.c [!HAVE_FCHOWN]: Define fchown(...) to -1.
|
||||
(set_owner, preserve_author): New functions, factored out of copy_reg.
|
||||
(copy_reg): Use them.
|
||||
(copy_internal): Use them here, too.
|
||||
|
||||
2005-12-04 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/sleep.c (usage): Say what happens with two or more arguments.
|
||||
Suggested by Justin Pryzby.
|
||||
|
||||
* src/uptime.c (print_uptime): Move decl of `upsecs' into scope
|
||||
where it's used.
|
||||
|
||||
2005-12-03 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/rm.c (long_opts): Change the name of each undocumented, for-
|
||||
testing-only option to start with `-', so that it cannot render
|
||||
ambiguous any prefix it happens to share with some other option name.
|
||||
Problem reported by Eric Blake.
|
||||
* src/head.c (long_options): Likewise.
|
||||
* src/tail.c (long_options): Likewise.
|
||||
|
||||
* tests/misc/head-elide-tail: Update uses of undocumented, for-
|
||||
testing-only --presume* options to start with `---'.
|
||||
* tests/rm/dangling-symlink: Likewise.
|
||||
* tests/rm/dir-no-w: Likewise.
|
||||
* tests/rm/isatty: Likewise.
|
||||
|
||||
2005-11-30 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* Makefile.maint: Add a comment about cvsu.
|
||||
|
||||
2005-11-25 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* NEWS: df updates for "none", "proc", inaccessible file systems.
|
||||
* src/df.c (show_point): Ignore inaccessible file systems.
|
||||
(usage): -a includes dummy file systems, not size-0 file systems.
|
||||
|
||||
* src/od.c (unsigned_long_long_int): Renamed from ulonglong_t,
|
||||
to avoid collision with POSIX name space. All uses changed.
|
||||
|
||||
2005-11-24 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* tests/Makefile.am (EXTRA_DIST): Add acl to the list.
|
||||
* tests/acl: Add `$0: ' prefix to diagnostics.
|
||||
|
||||
* .x-sc_require_config_h: Add lib/buffer-lcm.c to the list.
|
||||
|
||||
2005-11-23 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/copy.c: Improve performance a bit by optimizing away
|
||||
unnecessary system calls and going to a block size of at least
|
||||
8192 (on normal hosts, anyway). This improved performance 5% on my
|
||||
Debian stable host (2.4.27 kernel, x86, copying from root
|
||||
ext3 file system to itself).
|
||||
Include "buffer-lcm.h".
|
||||
(copy_reg): Omit last argument. All callers changed.
|
||||
Use xmalloc to allocate rather than trusting alloca
|
||||
(which is unwise with large block sizes).
|
||||
Declare locals more locally, if possible.
|
||||
Use uintptr_t words instead of int words, for a bit more speed
|
||||
when looking for null blocks on 64-bit hosts.
|
||||
Optimize away reads of zero bytes on regular files.
|
||||
In the typical case, insist on 8 KiB buffers, at least.
|
||||
Avoid unnecessary extra call to fstat when checking for sparse files.
|
||||
Avoid now-unnecessary cast to off_t, and "0L".
|
||||
Avoid unnecessary test of *new_dst when checking for same owner
|
||||
and group.
|
||||
|
||||
2005-11-22 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/remove.c (rm): Don't assume C99 for-loop syntax.
|
||||
|
||||
2005-11-22 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/remove.c (AD_push): Remove debugging cruft.
|
||||
|
||||
* tests/rm/unread2 (rm): Change expected diagnostic,
|
||||
`cannot open directory' to `cannot remove', to align with
|
||||
new version of rm.
|
||||
* tests/rm/rm2: Ensure that rm now continues removing entries
|
||||
even after certain types of failure.
|
||||
|
||||
* src/remove.c: Rewrite. Now, this module is reentrant on systems
|
||||
that provide openat (Solaris), and on systems like Linux+procfs
|
||||
where our openat emulation code is reentrant. This also fixes a
|
||||
few low-probability leaks and eliminates some code that could,
|
||||
in very unusual circumstances, cause rm() (via a callee) to exit.
|
||||
* NEWS: Mention this.
|
||||
|
||||
* configure.ac: Put copyright dates all on one line so the
|
||||
emacs function that updates them works properly.
|
||||
|
||||
2005-11-18 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* configure.ac (AM_PROG_CC_C_O): Add. Needed for CVS Automake.
|
||||
Problem reported by Eric Blake.
|
||||
(AC_PROG_CC_STDC): Use this instead of AC_PROG_CC, so that
|
||||
we get a standard-conforming compiler. This relies on the new
|
||||
m4/c.m4 file. Note that it's a bit tricky, since c.m4 doesn't
|
||||
define AC_PROG_CC_STDC; we are relying on Autoconf 2.59 internals.
|
||||
m4/c.m4 can go away with Autoconf 2.60 comes out.
|
||||
|
||||
2005-11-17 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/remove.c (AD_mark_helper): Make a `char *' parameter `const'.
|
||||
(AD_mark_current_as_unremovable): Likewise, but for a local.
|
||||
(rm_1): Likewise.
|
||||
|
||||
* tests/mv/acl: Let traps handle removing temporary directories.
|
||||
|
||||
Expect acl-related tests to fail, until the corresponding
|
||||
patches are committed.
|
||||
* tests/mv/Makefile.am (XFAIL_TESTS): Add acl.
|
||||
* tests/cp/Makefile.am (XFAIL_TESTS): Likewise.
|
||||
|
||||
ACL tests, from Andreas Gruenbacher.
|
||||
* tests/acl, tests/mv/acl, tests/cp/acl: New files.
|
||||
* tests/mv/Makefile.am (TESTS): Add acl.
|
||||
* tests/cp/Makefile.am (TESTS): Add acl.
|
||||
|
||||
* src/ls.c (basename_is_dot_or_dotdot): Correct wording in comment.
|
||||
|
||||
2005-11-16 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* NEWS: Improve quality of ln's diagnostics.
|
||||
* src/ln.c (do_link, usage): Likewise.
|
||||
(do_link): Don't use alloca on a buffer of unbounded size.
|
||||
|
||||
2005-11-16 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* tests/cp/fail-perm: Accommodate HPUX. It appears to fail
|
||||
with EACCES rather than EPERM. Reported by Peter O'Gorman here:
|
||||
http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/5766
|
||||
This also affects AIX 4.3.3, according to Ralf Wildenhues, in
|
||||
http://lists.gnu.org/archive/html/bug-coreutils/2006-05/msg00192.html
|
||||
|
||||
2005-11-14 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* NEWS (sort): Mention consequences of today's mkstemp-safer.c fix.
|
||||
|
||||
2005-11-13 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* announce-gen: Accept new option, --gpg-key-id=ID and
|
||||
emit a blurb telling how to use the .sig files.
|
||||
* Makefile.cfg (gpg_key_ID): Define.
|
||||
* Makefile.maint (announcement): Use new option and key.
|
||||
|
||||
Require that most .c files include <config.h>.
|
||||
* Makefile.maint (sc_require_config_h): New rule.
|
||||
(syntax-check-rules): Add it.
|
||||
* .x-sc_require_config_h: New file listing exceptions to the
|
||||
above rule. Some are legit, others are simply grandfathered in.
|
||||
* Makefile.am (EXTRA_DIST): Add .x-sc_require_config_h here, too.
|
||||
|
||||
2005-11-12 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/checksum.h, src/md5.c, src/sha1sum.c: Remove now-unused files.
|
||||
|
||||
2005-11-11 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* NEWS: Mention `readlink -f' bug fix in 5.3.0 news.
|
||||
Mention new readlink options in 5.3.0's `New features' section.
|
||||
Spotted by Thomas Hood.
|
||||
|
||||
2005-11-08 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* NEWS: Merge in changes from b5_9x branch.
|
||||
|
||||
2005-11-08 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* NEWS: ls now defaults to --time-style='locale', which in turn acts
|
||||
like --time-style='posix-long-iso' if the locale settings are messed up.
|
||||
* src/ls.c (decode_switches): Implement this.
|
||||
|
||||
2005-11-08 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* tests/du/2g: s/expensive/very expensive/ in a comment.
|
||||
From Paul Townsend.
|
||||
|
||||
2005-10-17 Eric Blake <ebb9@byu.net>
|
||||
|
||||
* src/ls.c (usage): Fix descriptions of --sort, --time.
|
||||
Reported by Vitaly A. Ostanin.
|
||||
|
||||
2005-11-04 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/ln.c: Include filenamecat.c.
|
||||
(FILE_BASENAME_CONCAT): Remove.
|
||||
(do_link): Remove last arg DEST_IS_DIR. All callers changed.
|
||||
(main): Use file_name_concat, base_name, and strip_trailing_slashes
|
||||
instead of FILE_BASENAME_CONCAT. This simplifies the code, and avoids
|
||||
the use of alloca.
|
||||
|
||||
2005-11-04 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/du.c (process_file): Don't overflow for files of size >= 2^31
|
||||
on systems with stat.st_blocks of a signed 32-bit type.
|
||||
This bug causes trouble on some AIX 5.1 systems.
|
||||
Report and trivial patch from Paul Townsend:
|
||||
<http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00033.html>
|
||||
* NEWS: Mention this.
|
||||
|
||||
* tests/du/2g: New (very-expensive) test for the above-fixed bug.
|
||||
* tests/du/Makefile.am (TESTS): Add it here.
|
||||
* tests/very-expensive: New file.
|
||||
* tests/Makefile.am (EXTRA_DIST): Add it here.
|
||||
* tests/cp/perm: Mark this test as `very-expensive', too.
|
||||
|
||||
2005-11-02 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* NEWS: Mention that rm -d and maybe ln -d are scheduled for
|
||||
removal in 2006.
|
||||
* src/remove.h (struct rm_options): Remove unlink_dirs. All uses
|
||||
removed.
|
||||
* src/rm.c (usage): Don't mention rm -d.
|
||||
|
||||
2005-11-02 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* tests/dd/skip-seek: Fix typo in comment: s/fileutils/coreutils.
|
||||
From Andreas Schwab.
|
||||
|
||||
* tests/dd/unblock-sync: Redirect stderr to /dev/null so the
|
||||
`M+N records in/out' lines don't pollute `make check' output.
|
||||
|
||||
* tests/dd/skip-seek (sk-seek4): New test, to exercise the bug
|
||||
fixed on 2005-10-31. This test uses the new, IN_PIPE specifier.
|
||||
* tests/Coreutils.pm: Accept a new type of input specifier: IN_PIPE,
|
||||
to indicate that the input file should be piped into the command
|
||||
under test (via `cat FILE | $prog ...').
|
||||
|
||||
* src/remove.c (remove_entry): Emit a better diagnostic when rm
|
||||
(without -r) fails to remove a directory on a non-Linux system.
|
||||
This change affects only newer Solaris systems (with priv_*
|
||||
functions like priv_allocset). Reported by Keith Thompson.
|
||||
|
||||
* tests/rm/dir-nonrecur: New file/test for the above fix.
|
||||
* tests/rm/Makefile.am (TESTS): Add dir-nonrecur.
|
||||
|
||||
2005-11-01 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* NEWS: "tail -c 2 FILE" and "touch 0101000000" now operate as
|
||||
POSIX 1002.1-2001 requires.
|
||||
* src/tail.c (parse_obsolete_option): Implement this.
|
||||
Problem reported by Vincent Lefevre.
|
||||
* src/touch.c (main): Pass PDS_PRE_2000 to posixtime.
|
||||
* tests/tail/Test.pm (c-2, c-2-minus, c2, c2-minus): New tests.
|
||||
(test_vector): Add special cases for _POSIX2_VERSION, and
|
||||
regularize the old ones a bit.
|
||||
* tests/touch/obsolescent: Add y2000 test.
|
||||
|
||||
2005-10-31 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/dd.c (skip): Fix off-by-one error reported by
|
||||
Theodoros V. Kalamatianos.
|
||||
|
||||
2005-10-30 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* tests/mkdir/p-3: Require that the test be run as non-root.
|
||||
Problem and trivial fix reported by Theodoros V. Kalamatianos.
|
||||
|
||||
2005-10-28 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/ln.c (FILE_BASENAME_CONCAT): Omit unnecessary slashes in the
|
||||
boundary between DEST and SOURCE in the result.
|
||||
|
||||
2005-10-26 Dmitry V. Levin <ldv@altlinux.org>
|
||||
|
||||
* src/md5sum.c (main) [!O_BINARY]: Changed default read mode
|
||||
back to text, to sync with documentation and for backwards
|
||||
compatibility.
|
||||
|
||||
2005-10-25 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* tests/dircolors/simple (other-wr): Add an explicit test for
|
||||
the dircolors bug (NULL-dereference) fixed yesterday.
|
||||
|
||||
2005-10-24 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/tac.c (tac_file): When determining whether a file is seekable,
|
||||
also test whether it is a tty. Using only the lseek-based test would
|
||||
give a false positive on Solaris. Reported by Peter Fales.
|
||||
|
||||
2005-10-24 Dmitry V. Levin <ldv@altlinux.org>
|
||||
|
||||
* tests/install/d-slashdot: New test, for "install -d" failure.
|
||||
* tests/install/Makefile.am (TESTS): Add d-slashdot.
|
||||
* tests/mkdir/p-slashdot: New test, for "mkdir -p" failure.
|
||||
* tests/mkdir/Makefile.am (TESTS): Add p-slashdot.
|
||||
|
||||
2005-10-24 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/dircolors.c (ls_codes): Add missing comma.
|
||||
Anonymous report and patch from
|
||||
http://savannah.gnu.org/bugs/?func=detailitem&item_id=14849
|
||||
|
||||
* src/dircolors.c: Add compile-time assertion that the slack_codes
|
||||
and ls_codes arrays have the same number of elements. This would
|
||||
have prevented the above-fixed bug.
|
||||
|
||||
* src/expand.c (parse_tab_stops): Add a comment to make this function
|
||||
identical to the one in unexpand.c.
|
||||
* src/unexpand.c (parse_tab_stops): Adjust syntax to make this function
|
||||
identical to the one in expand.c.
|
||||
|
||||
* src/expand.c (next_file): Don't assume fopen cannot return stdin.
|
||||
|
||||
2005-10-23 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/md5sum.c (digest_check, main): Use ptr_align rather than
|
||||
a dangerous pointer-value-to-`unsigned' cast.
|
||||
* NEWS: mention the new sha* programs.
|
||||
* AUTHORS: Add new sha* programs.
|
||||
|
||||
2005-08-28 David Madore <david.madore@ens.fr>
|
||||
|
||||
Add new programs: sha224sum, sha256sum, sha384sum, sha512sum.
|
||||
* README: Add their names to the list.
|
||||
* src/md5sum.c: Provide framework for computing sha-2 hashes.
|
||||
* src/Makefile.am (sha224sum, sha256sum, sha384sum, sha512sum):
|
||||
Rules for compiling sha-2 utilities
|
||||
(noinst_HEADERS): Remove checksum.h.
|
||||
* man/sha512sum.x, man/sha384sum.x, man/sha256sum.x, man/sha224sum.x:
|
||||
New files.
|
||||
* man/Makefile.am (dist_man_MANS): Add the corresponding .1 names.
|
||||
(sha224sum.1, sha256sum.1, sha384sum.1, sha512sum.1): New dependencies.
|
||||
* tests/misc/sha224sum, tests/misc/sha256sum: New files.
|
||||
* tests/misc/sha384sum, tests/misc/sha512sum: New files.
|
||||
* tests/misc/Makefile.am (TESTS): Add new sha224sum, sha256sum,
|
||||
sha384sum, sha512sum test scripts here rather that each in its
|
||||
own directory.
|
||||
|
||||
2005-08-28 David Madore <david.madore@ens.fr>
|
||||
|
||||
* tests/sha1sum/basic-1 (million-a): Add the "million a's" test (one
|
||||
of the FIPS test vectors).
|
||||
|
||||
2005-10-23 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* configure.ac: Use 6.0-cvs as the version string.
|
||||
* NEWS: Adjust accordingly.
|
||||
|
||||
2005-10-22 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* Version 5.92.
|
||||
@@ -11609,7 +11004,7 @@
|
||||
|
||||
-----
|
||||
|
||||
Copyright (C) 2002, 2003, 2004, 2005, 2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without
|
||||
modification, are permitted provided the copyright notice
|
||||
|
||||
4022
ChangeLog-2007
4022
ChangeLog-2007
File diff suppressed because it is too large
Load Diff
379
ChangeLog-2008
379
ChangeLog-2008
@@ -1,379 +0,0 @@
|
||||
2008-12-16 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
NB: ChangeLog files are no longer manually maintained.
|
||||
See HACKING for details.
|
||||
|
||||
2008-02-07 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
We *do* need two different version files.
|
||||
One for tarball-only, the other to be updated any time we
|
||||
get a new value of $(VERSION).
|
||||
* Makefile.am (dist-hook): Create .tarball-version in dist tarball.
|
||||
* GNUmakefile (_curr-ver): Make git-version-gen use it.
|
||||
* .gitignore: Ignore it.
|
||||
|
||||
Fix a typo in description of size suffixes: s/GB/G/.
|
||||
* doc/coreutils.texi (od invocation, head invocation, tail invocation):
|
||||
Spotted by Bert Wesarg.
|
||||
|
||||
* NEWS [6.9.90]: Mention the added feature that head, od, split and
|
||||
tail now accept the standard size suffixes (kB, M, MB, G, GB, and
|
||||
so on for T, P, Y, Z, and Y) on arguments to selected options.
|
||||
|
||||
2008-02-06 Steven Schubiger <schubiger@gmail.com>
|
||||
|
||||
mkdir, split: write --verbose output to stdout, not stderr.
|
||||
* src/mkdir.c (verbose_output): New function.
|
||||
(announce_mkdir): Use it.
|
||||
* src/split.c (usage): Update.
|
||||
* src/split.c (cwrite): Write to stdout, not stderr.
|
||||
* doc/coreutils.texi (split invocation): Remove the mention
|
||||
of --verbose output being printed to stderr.
|
||||
* tests/mkdir/p-v: Redirect stdout, not stderr.
|
||||
* tests/misc/split-a: Likewise.
|
||||
* NEWS: Mention this change.
|
||||
* TODO: Remove this item.
|
||||
|
||||
2008-02-04 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
* Makefile.maint (announcement): Remove stale comment.
|
||||
|
||||
2008-02-02 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Clarify a comment.
|
||||
* tests/sort/Test.pm: Replace a vague ChangeLog reference with a URL.
|
||||
|
||||
2008-01-31 Bob Proulx <bob@proulx.com>
|
||||
|
||||
Improve wording of date and time man page.
|
||||
* man/date.x: Improve compact description of the --date=STRING.
|
||||
* man/touch.x: Likewise.
|
||||
Suggested by A. Costa.
|
||||
|
||||
2008-01-31 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Remove alignment constraint from the sha*_read_ctx functions.
|
||||
* lib/sha256.c (set_uint32): New function.
|
||||
(sha256_read_ctx, sha224_read_ctx): Use it.
|
||||
* lib/sha512.c (set_uint64): New function.
|
||||
(sha512_read_ctx, sha384_read_ctx): Use it.
|
||||
* lib/sha256.h: Remove warning about alignment constraint.
|
||||
* lib/sha512.h: Likewise.
|
||||
Prompted by similar changes in gnulib's sha1 and md[45] modules.
|
||||
|
||||
Adapt to new version of vc-list-files.
|
||||
* tests/check.mk (vc_exe_in_TESTS): Adapt to new constraint
|
||||
that vc-list-files be run only from $(top_srcdir).
|
||||
|
||||
Pull vc-list-files from gnulib.
|
||||
* bootstrap.conf (gnulib_modules): Add vc-list-files.
|
||||
* build-aux/vc-list-files: Remove file.
|
||||
|
||||
Improve the cp/parent-perm test.
|
||||
* tests/cp/parent-perm: Also check that perms of existing dest
|
||||
dirs are changed to match those of corresponding src dir
|
||||
|
||||
2008-01-30 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Don't modify argv in dd due to ',' in arguments.
|
||||
* src/dd.c: Include quotearg.h.
|
||||
(operand_matches): New function.
|
||||
(parse_symbols, operand_is): Use it.
|
||||
(parse_symbols): 1st arg is now const pointer. Don't modify it.
|
||||
msgid arg is now just the message, not a format.
|
||||
(scanargs): Add some 'const's to check for problems like the above.
|
||||
|
||||
2008-01-30 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
* src/c99-to-c89.diff: Adjust remove.c offsets, again.
|
||||
|
||||
Now that system.h defines is_empty_dir, include "openat.h".
|
||||
* src/system.h: Include "openat.h" here, ...
|
||||
* src/chcon.c: ... not here.
|
||||
* src/chmod.c: Likewise.
|
||||
* src/chown-core.c: Likewise.
|
||||
* src/remove.c: Likewise.
|
||||
|
||||
* src/c99-to-c89.diff: Adjust remove.c offsets.
|
||||
|
||||
Improve "rmdir --ignore-fail-on-non-empty"
|
||||
* src/rmdir.c (remove_parents, main): With --ignore-fail-on-non-empty,
|
||||
suppress a diagnostic also for other errno values, which can arise
|
||||
with read-only media or when the parent directory has the immutable
|
||||
attribute (set via chattr +i).
|
||||
(errno_may_be_empty, ignorable_failure): New functions.
|
||||
* src/remove.c (is_empty_dir): Move function to ...
|
||||
* src/system.h (is_empty_dir): ...here, and make it inline.
|
||||
Suggested by Josselin Mouette in <http://bugs.debian.org/363011>
|
||||
via Bob Proulx.
|
||||
* NEWS: Mention the improvement.
|
||||
|
||||
2008-01-29 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Don't modify argv in dd.
|
||||
* src/dd.c (operand_is): New function.
|
||||
(scanargs): Use it so that we don't need to modify argv, as a nicety.
|
||||
Problem reported by Adam Goode in
|
||||
<http://lists.gnu.org/archive/html/bug-coreutils/2008-01/msg00264.html>.
|
||||
|
||||
2008-01-29 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
* Makefile.am (BUILT_SOURCES): Ensure that .version exists.
|
||||
Reported by Bob Proulx.
|
||||
|
||||
2008-01-29 Bob Proulx <bob@proulx.com>
|
||||
|
||||
Improve the man pages of --date=STRING for 'date' and 'touch'.
|
||||
* man/date.x: Add a compact description of the --date=STRING.
|
||||
* man/touch.x: Likewise.
|
||||
Reported by A. Costa in http://bugs.debian.org/363011
|
||||
|
||||
2008-01-29 Michael Stone <mstone@debian.org>
|
||||
|
||||
Improve the description of when dd outputs its final statistics.
|
||||
* doc/coreutils.texi (dd invocation): Say that dd prints stats
|
||||
upon normal termination and upon SIGINT.
|
||||
|
||||
2008-01-29 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Avoid "make distcheck" failure: newly-created man/*.1 files not removed
|
||||
* Makefile.am (EXTRA_DIST): Add .version.
|
||||
(.version): New rule.
|
||||
(dist-hook): Don't create $(distdir)/.version here, now that it's
|
||||
being distributed.
|
||||
* man/Makefile.am (common_dep): Use ../.version, not ../VERSION.
|
||||
(../VERSION): Remove rule.
|
||||
* GNUmakefile (dummy): Create .version, not VERSION.
|
||||
Add an extra "...:= $(shell..." statement to ensure that
|
||||
.version exists even when the preceding code is not run.
|
||||
* .gitignore: Remove both .version and VERSION.
|
||||
|
||||
ls: don't segfault on files in /proc with an old libselinux
|
||||
* src/ls.c (gobble_file): Work around a bug in libselinux1-2.0.15
|
||||
whereby getfilecon returns 0 yet sets the context to NULL.
|
||||
Reported by Jan Moringen via Michael Stone in
|
||||
http://bugs.debian.org/463043
|
||||
* tests/ls/Makefile.am (TESTS): Add proc-selinux-segfault.
|
||||
* tests/ls/proc-selinux-segfault: Test for the above fix.
|
||||
* NEWS: Mention the fix.
|
||||
|
||||
2008-01-26 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Work around Darwin9's set-GID-like group ownership inheritance.
|
||||
This avoids another spurious Mac OS 10.5.1 (Darwin 9.1) test failure.
|
||||
* tests/cp/preserve-gid: Accept a group ID of 0, as well.
|
||||
Reported by Elias Pipping.
|
||||
|
||||
Emit "info coreutils 'PROG invocation'" into the man page,
|
||||
rather than just "info PROG". The latter would often fail
|
||||
or simply display the man page.
|
||||
* man/help2man: Change the template.
|
||||
Prompted by http://bugs.debian.org/399684
|
||||
|
||||
chcon: correct description of --no-dereference (-h) option.
|
||||
* src/chcon.c (usage): Remove invalid reference to lchown.
|
||||
Reported by Göran Uddeborg.
|
||||
|
||||
Ensure that each version string change propagates to man pages.
|
||||
* man/Makefile.am (common_dep): Don't depend on configure.ac for
|
||||
version changes. Instead, depend on ../VERSION.
|
||||
(../VERSION): New rule.
|
||||
* Makefile.am (DISTCLEANFILES): Define.
|
||||
* GNUmakefile: Update ./VERSION.
|
||||
* .gitignore: List VERSION.
|
||||
Reported by Sven Joachim.
|
||||
|
||||
Avoid cp/preserve-gid test failure on Mac OS 10.5.1 (Darwin 9.1)
|
||||
* tests/cp/preserve-gid: Set group as well as owner on ".".
|
||||
Reported by Elias Pipping.
|
||||
|
||||
Improve a warning about non-portable "mv" usage.
|
||||
* doc/coreutils.texi (mv invocation): Adjust the warning: moving a
|
||||
dir-symlink-specified-with-a-trailing-slash works in a surprising
|
||||
manner only on some systems. Reported by Tomas Pospisek in
|
||||
http://bugs.debian.org/343652.
|
||||
|
||||
2008-01-26 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* src/dircolors.hin (TERM): Add jfbterm.
|
||||
|
||||
2008-01-23 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Clean up build-related rules.
|
||||
* Makefile.cfg (gnulib_dir): Update comment.
|
||||
* Makefile.maint (announcement) [cl_date, utc_date]: Don't set
|
||||
now-unused variables.
|
||||
|
||||
* TODO: Update the note on getgrouplist.
|
||||
|
||||
2008-01-23 Zvi Har'El <rl@math.technion.ac.il>
|
||||
|
||||
Add a ";", so "make install" works with --enable-install-program=su.
|
||||
* src/Makefile.am (install_su): Add a semicolon. (tiny change)
|
||||
|
||||
2008-01-23 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Avoid misinterpreting mgetgroups failure in running root-only tests.
|
||||
* src/setuidgid.c (main): Don't misinterpret as size_t an error
|
||||
return from mgetgroups. Reported by Theodoros V. Kalamatianos.
|
||||
|
||||
* README: Remove/convert a few stray mentions of CVS.
|
||||
|
||||
2008-01-22 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Require automake-1.10.1, for its support of dist-lzma.
|
||||
* configure.ac (AM_INIT_AUTOMAKE): Require 1.10.1.
|
||||
|
||||
Version 6.10.
|
||||
|
||||
* NEWS: Record release date.
|
||||
|
||||
* README-hacking: Update to reflect existence of automake-1.10.1.
|
||||
|
||||
2008-01-18 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Update README.
|
||||
* README: Remove a note about failing tests on SunOS 4.
|
||||
On Mac OS 10.5.1 (Darwin 9.1), you'll need --disable-acl.
|
||||
(Running tests as root): Recommend using "check-root", not "check".
|
||||
|
||||
2008-01-17 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Do not define-away __attribute__ when __STRICT_ANSI__ is set.
|
||||
* src/system.h (__attribute__): Remove the __STRICT_ANSI__ disjunct.
|
||||
It has been unnecessary since approximately gcc-2.6, and now, leaving
|
||||
it would cause gcc -Werror -ansi to fail to compile csplit.c.
|
||||
* gl/lib/randread.c (__attribute__): Likewise.
|
||||
|
||||
2008-01-16 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
* NEWS: Mention the configure.ac fix.
|
||||
|
||||
* TODO: Add an introduction.
|
||||
Remove a few entries. Update a few others.
|
||||
|
||||
2008-01-13 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Remove each output redirection target before writing to it.
|
||||
* tests/check.mk (vc_exe_in_TESTS): Remove t1 and t2 _first_,
|
||||
in case they exist beforehand and are not writable.
|
||||
* build-aux/check.mk (am__check_pre): Likewise, remove $@-t.
|
||||
|
||||
2008-01-13 Elias Pipping <pipping@gentoo.org>
|
||||
|
||||
* configure.ac: Correct a non-portable use of sed.
|
||||
|
||||
2008-01-12 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* src/dircolors.hin (image formats): Add the .svg suffix.
|
||||
|
||||
2008-01-12 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Use new version of announce-gen.
|
||||
* Makefile.maint (announcement): Remove use of the
|
||||
--gnulib-snapshot-time-stamp option.
|
||||
Use new --gnulib-version option instead.
|
||||
(gnulib-version): New variable.
|
||||
|
||||
2008-01-11 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
* Version 6.9.92.
|
||||
|
||||
* tests/tr/Test.pm: Prefer en_US.ISO-8859-1 to en_US.iso88591.
|
||||
Suggestions from James Youngman and Pádraig Brady in
|
||||
http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/12218/focus=12227
|
||||
|
||||
2008-01-10 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
* README-hacking: Add Git to the list of required tools.
|
||||
|
||||
2008-01-08 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Fix a minor race condition when using cp -p --parents.
|
||||
* src/cp.c (make_dir_parents_private): If stat fails on the parent
|
||||
directory, do not add it to the list of directories whose modes
|
||||
might need fixing later. Also, do not bother invoking 'stat'
|
||||
unless the stat results might be needed later.
|
||||
|
||||
2008-01-08 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
parent-perm: avoid a bizarre test failure.
|
||||
* tests/cp/parent-perm: Accommodate the situation in which
|
||||
chmod ("dir", 02755) returns 0 yet fails to set the S_ISGID bit.
|
||||
|
||||
Remove uses of now-undefined Makefile variable.
|
||||
* src/Makefile.am (dir_LDADD, ls_LDADD, vdir_LDADD): Remove uses
|
||||
of no-longer-defined variable, $(LIB_ACL_TRIVIAL).
|
||||
|
||||
2008-01-07 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
cp (but not copy.c): plug a small leak.
|
||||
* src/cp.c (do_copy) [--parents]: Free the attribute list.
|
||||
|
||||
Make a racy test failure less likely to happen.
|
||||
* tests/misc/tty-eof: Uncomment a debug "warn".
|
||||
This change happens to make this test far less likely to fail.
|
||||
With that statement commented out, this test would fail about
|
||||
20% of the time on my desktop. Now, it's gone 100 iterations
|
||||
in a row with no failure.
|
||||
|
||||
* NEWS: Mention the cp bug fix.
|
||||
|
||||
2008-01-07 Jan Blunck <jblunck@suse.de>
|
||||
|
||||
cp --parents: don't use uninitialized memory when restoring permissions
|
||||
* src/cp.c (make_dir_parents_private): Always stat each source
|
||||
directory, in case its permissions are required in re_protect,
|
||||
when setting permissions of a just-created destination directory.
|
||||
|
||||
2008-01-07 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
cp: add a test for today's bug fix.
|
||||
* tests/cp/parent-perm: New script. Test today's change.
|
||||
Based on reproducer from Jan Blunck.
|
||||
* tests/cp/Makefile.am (TESTS): Add parent-perm.
|
||||
|
||||
2008-01-06 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
touch: add a test for today's change.
|
||||
* tests/touch/now-owned-by-other: New script. Test today's change.
|
||||
* tests/touch/Makefile.am (TESTS): Add now-owned-by-other.
|
||||
* tests/Makefile.am (all_t): Add td, a new root-only test.
|
||||
(td): New target.
|
||||
* NEWS: Mention the improvement.
|
||||
|
||||
2008-01-06 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
touch: ignore "-d now" option, when appropriate
|
||||
* src/touch.c (main): Treat "-d now" as if it were absent, if
|
||||
neither -a nor -m is specified. Problem reported by Dan Jacobson in:
|
||||
http://lists.gnu.org/archive/html/bug-coreutils/2008-01/msg00010.html
|
||||
|
||||
2008-01-05 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Avoid tr case-conversion failure in some locales.
|
||||
* src/tr.c (skip_construct): New function.
|
||||
(main): When processing a pair of case-converting classes, don't
|
||||
iterate through the elements of each [:upper:] or [:lower:] class.
|
||||
Reported by Gerald Pfeifer in
|
||||
<http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/12218>.
|
||||
* tests/tr/Test.pm [tolower-F]: New test for the above fix.
|
||||
[upcase-xtra, dncase-xtra]: New tests, for a related code path.
|
||||
* NEWS: Mention the tr bug fix.
|
||||
|
||||
2008-01-02 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* .gitignore: Ignore lzma-compressed files, too.
|
||||
|
||||
Update copyright date.
|
||||
* tests/sample-test: Likewise.
|
||||
* doc/coreutils.texi: Likewise.
|
||||
|
||||
|
||||
-----
|
||||
|
||||
Copyright (C) 2008-2009 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without
|
||||
modification, are permitted provided the copyright notice
|
||||
and this notice are preserved.
|
||||
208
ChangeLog-selinux
Normal file
208
ChangeLog-selinux
Normal file
@@ -0,0 +1,208 @@
|
||||
2007-03-18 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/runcon.c (main): Don't reorder arguments. Reported by
|
||||
Ulrich Drepper in <http://bugzilla.redhat.com/232652>.
|
||||
* tests/misc/runcon-no-reorder: New file. Test for the above.
|
||||
* tests/misc/Makefile.am (TESTS): Add runcon-no-reorder.
|
||||
|
||||
* src/runcon.c (main): Remove "." at end of a diagnostic.
|
||||
|
||||
2007-02-02 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* src/runcon.c: New program.
|
||||
* src/Makefile.am (bin_PROGRAMS): Add runcon.
|
||||
(runcon_LDADD): Define.
|
||||
* README: Add runcon to the list of programs.
|
||||
* AUTHORS: Add this: runcon: Russell Coker
|
||||
* tests/help-version: Add runcon as an exception.
|
||||
* man/Makefile.am (dist_man_MANS): Add runcon.1.
|
||||
(runcon.1): New dependency.
|
||||
|
||||
2007-01-31 Jim Meyering <jim@meyering.net>
|
||||
|
||||
mkfifo, mknod: Accept new "-Z, --context=C" option.
|
||||
* src/mkfifo.c, src/mknod.c: Include <selinux/selinux.h>.
|
||||
(main): Honor it.
|
||||
* src/Makefile.am (mkfifo_LDADD, mknod_LDADD): Use $(LIB_SELINUX).
|
||||
|
||||
mkdir: Accept new "-Z, --context=C" option.
|
||||
* src/mkdir.c: Include <selinux/selinux.h>.
|
||||
(main): Honor it.
|
||||
* src/Makefile.am (mkdir_LDADD): Use $(LIB_SELINUX).
|
||||
|
||||
* tests/cp/cp-a-selinux: New file. Test for the bug reported in
|
||||
<http://bugzilla.redhat.com/219900>.
|
||||
* tests/cp/Makefile.am (TESTS): Add cp-a-selinux.
|
||||
|
||||
* tests/selinux: New file.
|
||||
* tests/Makefile.am (EXTRA_DIST): Add selinux.
|
||||
* tests/misc/selinux: Source the new script, rather than open coding it.
|
||||
|
||||
Change how "cp -a" and "cp --preserve=context" work with SELinux.
|
||||
Now, cp -a attempts to preserve context, but failure to do so does
|
||||
not change cp's exit status. However "cp --preserve=context" is
|
||||
similar, but failure *does* cause cp to exit with nonzero status.
|
||||
* src/copy.h (struct cp_options) [require_preserve_context]: New member.
|
||||
* src/copy.c (copy_reg, copy_internal): Implement the above.
|
||||
* src/mv.c (cp_option_init): Initialize the new member.
|
||||
* src/install.c (cp_option_init): Likewise.
|
||||
* src/cp.c (cp_option_init): Likewise.
|
||||
(decode_preserve_arg): Set it or reset it.
|
||||
|
||||
FIXME: add an on-writable-NFS-only test
|
||||
|
||||
2007-01-20 Jim Meyering <jim@meyering.net>
|
||||
|
||||
cp, mv, install: add SELinux support, but unlike with the Red Hat
|
||||
patch, mv and cp do not provide the "-Z context" option.
|
||||
* src/copy.c: Include <selinux/selinux.h>.
|
||||
(restore_default_fscreatecon): New function.
|
||||
(copy_reg): Make cp --preserve=context work for existing destination.
|
||||
(copy_internal): Likewise for new destinations.
|
||||
* src/copy.h (cp_options) [preserve_security_context]: New member.
|
||||
* src/cp.c: Include <selinux/selinux.h>.
|
||||
(selinux_enabled): New global.
|
||||
(usage): Mention new --preserve=context option.
|
||||
(PRESERVE_CONTEXT): Define/use.
|
||||
(decode_preserve_arg): Handle PRESERVE_CONTEXT.
|
||||
(main): Remove an obsolete comment.
|
||||
If --preserve=context is specified on a system without SELinux
|
||||
enabled, give a diagnostic and fail.
|
||||
* src/mv.c: Include <selinux/selinux.h>.
|
||||
Set x->preserve_security_context if SELinux is enabled.
|
||||
* src/install.c: Accept new "-Z, --context=C" option.
|
||||
Accept --preserve-context option (but not -P option).
|
||||
Accept alternate spelling: --preserve_context, for now.
|
||||
Include <selinux/selinux.h> and "quotearg.h".
|
||||
(selinux_enabled, use_default_selinux_context): New globals.
|
||||
(PRESERVE_CONTEXT_OPTION): Define.
|
||||
(cp_option_init): Default: do not preserve security context.
|
||||
(setdefaultfilecon): New function.
|
||||
(main): Honor new options.
|
||||
* src/Makefile.am (mv_LDADD, cp_LDADD, ginstall_LDADD):
|
||||
Add $(LIB_SELINUX).
|
||||
* src/system.h (GETOPT_SELINUX_CONTEXT_OPTION_DECL): Define.
|
||||
|
||||
* tests/misc/selinux [VERBOSE]: Print version info for each
|
||||
of the tested tools, not just ls.
|
||||
|
||||
* src/c99-to-c89.diff: Remove the ls.c patch, now that I've
|
||||
temporarily removed the offending c99'ism.
|
||||
|
||||
* src/chcon.c (usage): Split a string literal that was longer than 509.
|
||||
|
||||
* src/ls.c (gobble_file): Don't call getfilecon unless print_scontext.
|
||||
Upon failed getfilecon, accept not just ENOTSUP, but also ENODATA.
|
||||
|
||||
* src/c99-to-c89.diff: Adjust offsets.
|
||||
|
||||
* AUTHORS: Add chcon.
|
||||
|
||||
* src/c99-to-c89.diff: Remove trailing blanks.
|
||||
|
||||
* src/chcon.c: Don't include "dirname.h". system.h already includes it.
|
||||
|
||||
* gl/lib/selinux-at.c: Remove a use of HAVE_CONFIG_H.
|
||||
|
||||
* src/c99-to-c89.diff: Handle a new c99'ism in ls.c.
|
||||
|
||||
* src/id.c (main): Tweak id -Z diagnostic.
|
||||
|
||||
id: Add SELinux support: -Z option.
|
||||
* src/id.c (main): Apply patches from Fedora, with these changes:
|
||||
Remove #ifdef WITH_SELINUX.
|
||||
Use error (EXIT_FAILURE, not fprintf+exit(1).
|
||||
* src/Makefile.am (id_LDADD): Define, so as to add $(LIB_SELINUX).
|
||||
|
||||
2007-01-06 Jim Meyering <jim@meyering.net>
|
||||
|
||||
stat: Add support for SELinux in the form of a %C format directive.
|
||||
* src/stat.c (follow_links): Make this variable file-global.
|
||||
(out_file_context): New function.
|
||||
(print_statfs): Honor %C.
|
||||
(print_stat): Honor %C.
|
||||
(do_stat): Remove follow_links parameter.
|
||||
(usage): Document the two %C directives.
|
||||
(main): Accept -Z (though it's a no-op).
|
||||
* src/Makefile.am (stat_LDADD): Define.
|
||||
|
||||
ls: Add support for SELinux and a slightly modified -Z option.
|
||||
I started with the patches from Red Hat.
|
||||
The entries below tell how the code evolved.
|
||||
|
||||
* src/ls.c (print_long_format, print_file_name_and_frills): When
|
||||
there is no security context (due to getfilecon/lgetfilecon failing
|
||||
with e.g. ENOTSUP), print it as "?", not "".
|
||||
* src/ls.c (print_file_name_and_frills): Make -Z work without -l.
|
||||
(length_of_file_name_and_frills): Likewise.
|
||||
|
||||
* src/ls.c: Remove the --lcontext and --scontext options.
|
||||
Change the way -Z, --context work so that it no longer implies -l.
|
||||
Thus, -Z -l will work like -lcontext and -Z without -l will work
|
||||
like --scontext.
|
||||
|
||||
Adjust tests to reflect new 'ls -l' syntax -- affects only
|
||||
systems with SELinux when operating on a file with no ACL.
|
||||
These tests assumed that everything before the first space on
|
||||
each line is the 10-byte mode string. But there may also be a "+"
|
||||
in the 11th column, just before the space. However, note that this
|
||||
is not new. The same thing would have happened even without the
|
||||
change below, when listing a file with an ACL.
|
||||
* tests/chmod/equals, tests/cp/cp-parents, tests/cp/fail-perm:
|
||||
* tests/cp/link-preserve, tests/install/basic-1, tests/misc/mknod:
|
||||
* tests/mkdir/parents, tests/mkdir/special-1, tests/mv/partition-perm:
|
||||
|
||||
Don't make compilation depend on USE_ACL. An SELinux security
|
||||
context counts as an "alternate access control method", so ls
|
||||
must output a "+" for each file with a security context.
|
||||
* src/ls.c [struct fileinfo] (have_acl): Declare unconditionally.
|
||||
(FILE_HAS_ACL): Remove macro definition. Use f->have_acl directly.
|
||||
(gobble_file): Record whether a file has a security context, and
|
||||
update the condition used to determine whether to print the "+".
|
||||
(gobble_file): Call getfilecon/lgetfilecon also when
|
||||
format == long_format, so that we get the "+".
|
||||
|
||||
* src/ls.c (gobble_file): Add a comment explaining why (with a
|
||||
security context option) ls doesn't exit nonzero due to e.g.,
|
||||
getfilecon failing with errno == ENOTSUP.
|
||||
|
||||
* src/ls.c (gobble_file): Ignore failure of getfilecon if it's due
|
||||
to ENOTSUP.
|
||||
|
||||
* src/ls.c (gobble_file): Factor out three small blocks using
|
||||
getfilecon and lgetfilecon.
|
||||
Don't ignore return value from getfilecon and lgetfilecon.
|
||||
|
||||
* src/ls.c (print_long_format): Don't use ?: (empty 2nd arg with C
|
||||
ternary operator).
|
||||
(print_scontext_format): Likewise.
|
||||
(print_scontext): Declare to be "bool", not int. Adjust uses.
|
||||
|
||||
* src/Makefile.am (dir_LDADD, ls_LDADD, vdir_LDADD): Add $(LIB_SELINUX).
|
||||
|
||||
* tests/misc/chcon: New file.
|
||||
* tests/misc/chcon-fail: New file.
|
||||
* tests/Makefile.am (check-root): Run new, root-only misc/chcon test.
|
||||
* tests/misc/Makefile.am (TESTS): Add chcon and chcon-fail.
|
||||
|
||||
* tests/misc/Makefile.am (TESTS): Add selinux.
|
||||
* tests/misc/selinux: New file.
|
||||
* tests/help-version: Skip chcon.
|
||||
* man/chcon.x: New file.
|
||||
* man/Makefile.am: Build chcon.1.
|
||||
|
||||
New program: chcon
|
||||
* gl/modules/selinux-at: New module. Check for libselinux and set
|
||||
LIB_SELINUX here, unconditionally, rather than depending on
|
||||
the configure-time --enable-selinux option.
|
||||
* gl/modules/selinux-h: New module.
|
||||
* bootstrap.conf (gnulib_modules): Add selinux-at.
|
||||
* gl/lib/selinux-at.c, gl/lib/selinux-at.h: New files.
|
||||
* gl/lib/se-selinux_.h: New file.
|
||||
* gl/lib/se-context_.h: New file.
|
||||
* gl/m4/selinux-selinux-h.m4: New file.
|
||||
* gl/m4/selinux-context-h.m4: New file.
|
||||
* src/Makefile.am (bin_PROGRAMS): Add chcon.
|
||||
(chcon_LDADD): Define.
|
||||
* README: Add chcon to the list of programs.
|
||||
* src/chcon.c: Rewrite the original (Red Hat) chcon to use fts.
|
||||
58
GNUmakefile
Normal file
58
GNUmakefile
Normal file
@@ -0,0 +1,58 @@
|
||||
# Having a separate GNUmakefile lets me `include' the dynamically
|
||||
# generated rules created via Makefile.maint as well as Makefile.maint itself.
|
||||
# This makefile is used only if you run GNU Make.
|
||||
# It is necessary if you want to build targets usually of interest
|
||||
# only to the maintainer.
|
||||
|
||||
# Copyright (C) 2001, 2003, 2006 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 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.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# Systems where /bin/sh is not the default shell need this. The $(shell)
|
||||
# command below won't work with e.g. stock DOS/Windows shells.
|
||||
ifeq ($(wildcard /bin/s[h]),/bin/sh)
|
||||
SHELL = /bin/sh
|
||||
else
|
||||
# will be used only with the next shell-test line, then overwritten
|
||||
# by a configured-in value
|
||||
SHELL = sh
|
||||
endif
|
||||
|
||||
have-Makefile := $(shell test -f Makefile && echo yes)
|
||||
|
||||
# If the user runs GNU make but has not yet run ./configure,
|
||||
# give them a diagnostic.
|
||||
ifeq ($(have-Makefile),yes)
|
||||
|
||||
# Make tar archive easier to reproduce.
|
||||
export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
|
||||
|
||||
include Makefile
|
||||
include $(srcdir)/Makefile.cfg
|
||||
include $(srcdir)/Makefile.maint
|
||||
|
||||
else
|
||||
|
||||
all:
|
||||
@echo There seems to be no Makefile in this directory. 1>&2
|
||||
@echo "You must run ./configure before running \`make'." 1>&2
|
||||
@exit 1
|
||||
|
||||
endif
|
||||
|
||||
# Tell version 3.79 and up of GNU make to not build goals in this
|
||||
# directory in parallel. This is necessary in case someone tries to
|
||||
# build multiple targets on one command line.
|
||||
.NOTPARALLEL:
|
||||
491
HACKING
491
HACKING
@@ -1,491 +0,0 @@
|
||||
Coreutils Contribution Guidelines
|
||||
|
||||
|
||||
Prerequisites
|
||||
=============
|
||||
You will need the "git" version control tools.
|
||||
On Fedora-based systems, do "yum install git".
|
||||
On Debian-based ones install the "git-core" package.
|
||||
Then run "git --version". If that says it's older than
|
||||
version 1.4.4, then you'd do well to get a newer version.
|
||||
At worst, just download the latest stable release from
|
||||
http://git.or.cz/ and build from source.
|
||||
|
||||
For details on building the programs in this package, see
|
||||
the file, README-hacking.
|
||||
|
||||
|
||||
Use the latest upstream sources
|
||||
===============================
|
||||
Base any changes you make on the latest upstream sources.
|
||||
You can get a copy of the latest with this command:
|
||||
|
||||
git clone git://git.sv.gnu.org/coreutils
|
||||
|
||||
That downloads the entire repository, including revision control history
|
||||
dating back to 1991. The repository (the part you download, and which
|
||||
resides in coreutils/.git) currently weighs in at about 30MB. So you
|
||||
don't want to download it more often than necessary. Once downloaded,
|
||||
you can get incremental updates by running one of these commands from
|
||||
inside your new coreutils/ directory:
|
||||
|
||||
If you have made *no* changes:
|
||||
git pull
|
||||
|
||||
If you *have* made changes and mistakenly committed them to "master",
|
||||
do the following to put your changes on a private branch, "br", and
|
||||
to restore master to its unmodified (relative-to-upstream) state:
|
||||
git checkout -b br
|
||||
git checkout master
|
||||
git reset --hard origin
|
||||
|
||||
Then "git pull" should work.
|
||||
|
||||
|
||||
*Before* you commit changes
|
||||
===========================
|
||||
|
||||
In this project, we much prefer patches that automatically record
|
||||
authorship. That is important not just to give credit where due, but
|
||||
also from a legal standpoint (see below). To create author-annotated
|
||||
patches with git, you must first tell git who you are. That information
|
||||
is best recorded in your ~/.gitconfig file. Edit that file, creating
|
||||
it if needed, and put your name and email address in place of these
|
||||
example values:
|
||||
|
||||
[user]
|
||||
name = Joe X. User
|
||||
email = joe.user@example.com
|
||||
|
||||
|
||||
Your first commit: the quick and dirty way
|
||||
==========================================
|
||||
First of all, realize that to "commit" a change in git is a purely
|
||||
local operation. It affects only the local repository (the .git/ dir)
|
||||
in your current coreutils/ hierarchy.
|
||||
|
||||
To try this out, modify a file or two. If you create a new file, you'll
|
||||
need to tell git about it with "git add new-file.c". Commit all changes
|
||||
with "git commit -a". That prompts you for a log message, which should
|
||||
include a one-line summary, a blank line, and ChangeLog-style entries
|
||||
for all affected files. More on that below.
|
||||
|
||||
Once your change is committed, you can create a proper patch that includes
|
||||
a log message and authorship information as well as any permissions
|
||||
changes. Use this command to save that single, most-recent change set:
|
||||
|
||||
git format-patch --stdout -1 > DIFF
|
||||
|
||||
The trouble with this approach is that you've just checked in a change
|
||||
(remember, it's only local) on the "master" branch, and that's where new
|
||||
changes would normally appear when you pull the latest from "upstream".
|
||||
When you "pull" from a remote repository to get the latest, your local
|
||||
changes on "master" may well induce conflicts. For this reason, you
|
||||
may want to keep "master" free of any local changes, so that you can
|
||||
use it to track unadulterated upstream sources.
|
||||
|
||||
However, if your cloned directory is for a one-shot patch submission and
|
||||
you're going to remove it right afterwards, then this approach is fine.
|
||||
Otherwise, for a more sustainable (and more generally useful, IMHO)
|
||||
process, read on about "topic" branches.
|
||||
|
||||
|
||||
Make your changes on a private "topic" branch
|
||||
=============================================
|
||||
So you checked out coreutils like this:
|
||||
|
||||
git clone git://git.sv.gnu.org/coreutils
|
||||
|
||||
Now, cd into the coreutils/ directory and run:
|
||||
|
||||
git checkout -b my-topic
|
||||
|
||||
That creates the my-topic branch and puts you on it.
|
||||
To see which branch you're on, type "git branch".
|
||||
Right after the clone, you were on "master" (aka the trunk).
|
||||
To get back to the trunk, do this:
|
||||
|
||||
git checkout master
|
||||
|
||||
Note 1:
|
||||
Be careful to run "git pull" only when on the "master" branch,
|
||||
not when on a branch. With newer versions of git, you can't cause
|
||||
trouble if you forget, so this is a good reason to ensure you're
|
||||
using 1.5.3.1 or newer.
|
||||
|
||||
Note 2:
|
||||
It's best not to try to switch from one branch to another if
|
||||
you have pending (uncommitted) changes. Sometimes it works,
|
||||
sometimes the checkout will fail, telling you that your local
|
||||
modifications conflict with changes required to switch branches.
|
||||
However, in any case, you will *not* lose your uncommitted changes.
|
||||
|
||||
Anyhow, get back onto your just-created branch:
|
||||
|
||||
git checkout my-topic
|
||||
|
||||
Now, modify some file and commit it:
|
||||
|
||||
git commit some-file.c
|
||||
|
||||
Personally, no matter what package I'm working on, I find it useful to
|
||||
put the ChangeLog entries *only* in the commit log, initially, unless
|
||||
I plan to commit/push right away. Otherwise, I tend to get unnecessary
|
||||
merge conflicts with each rebase (see below). In coreutils, I've gone
|
||||
a step further, and no longer maintain an explicit ChangeLog file in
|
||||
version control. Instead, in a git working directory, you can view
|
||||
ChangeLog information via "git log". However, each distribution tarball
|
||||
does include a ChangeLog file that is automatically generated from the
|
||||
git logs.
|
||||
|
||||
So, you've committed a change. But it's only in your local repository,
|
||||
and only on your "my-topic" branch. Let's say you wait a day, and
|
||||
then see that someone else changed something and pushed it to the
|
||||
public repository. Now, you want to update your trunk and "rebase"
|
||||
your changes on the branch so that they are once again relative to the
|
||||
tip of the trunk. Currently, your branch is attached to the trunk at
|
||||
the next-to-last change set.
|
||||
|
||||
First: update the trunk from the public repo:
|
||||
[you've first made sure that "git diff" produces no output]
|
||||
|
||||
git checkout master
|
||||
git pull
|
||||
|
||||
Now, return to your branch, and "rebase" relative to trunk (master):
|
||||
|
||||
git checkout my-topic
|
||||
git rebase master
|
||||
|
||||
If there are no conflicts, this requires no more work from you.
|
||||
However, let's say there was one in ChangeLog, since you didn't
|
||||
follow my advice and modified it anyway.
|
||||
git rebase will tell you there was a conflict and in which
|
||||
file, and instruct you to resolve it and then resume with
|
||||
"git rebase --continue" once that's done.
|
||||
|
||||
So you resolve as usual, by editing ChangeLog (which has the
|
||||
usual conflict markers), then type "git rebase --continue".
|
||||
That will fail, with a diagnostic telling you to mark
|
||||
the file as "conflict resolved" by doing this:
|
||||
|
||||
git add ChangeLog
|
||||
|
||||
Then, finally, you can proceed (possibly onto more conflict resolution,
|
||||
if there are conflicts in other files):
|
||||
|
||||
git rebase --continue
|
||||
|
||||
Once it finishes, your changes on the branch are now relative to
|
||||
the tip of the trunk.
|
||||
|
||||
Now use git format-patch, as above.
|
||||
|
||||
|
||||
Amending the most recent change on your private branch
|
||||
======================================================
|
||||
Let's say you've just committed a change on your private
|
||||
branch, and then realize that something about it is not right.
|
||||
It's easy to adjust:
|
||||
|
||||
edit your files # this can include running "git add NEW" or "git rm BAD"
|
||||
git commit --amend -a
|
||||
git format-patch --stdout -1 > your-branch.diff
|
||||
|
||||
That replaces the most recent change-set with the revised one.
|
||||
|
||||
|
||||
|
||||
Coreutils-specific:
|
||||
|
||||
No more ChangeLog files
|
||||
=======================
|
||||
Do not modify any of the ChangeLog files in coreutils. Starting in
|
||||
2008, the policy changed. Before, we would insert the exact same text
|
||||
(or worse, sometimes slightly differing) into both the ChangeLog file
|
||||
and the commit log. Now we put that information only in the commit log,
|
||||
and generate the top-level ChangeLog file from logs at "make dist" time.
|
||||
As such, there are strict requirements on the form of the commit log
|
||||
messages.
|
||||
|
||||
|
||||
Commit log requirements
|
||||
=======================
|
||||
Your commit log should always start with a one-line summary, the second
|
||||
line should be blank, and the remaining lines are usually ChangeLog-style
|
||||
entries for all affected files. However, it's fine -- even recommended --
|
||||
to write a few lines of prose describing the change, when the summary
|
||||
and ChangeLog entries don't give enough of the big picture. Omit the
|
||||
leading TABs that you're used to seeing in a "real" ChangeLog file, but
|
||||
keep the maximum line length at 72 or smaller, so that the generated
|
||||
ChangeLog lines, each with its leading TAB, will not exceed 80 columns.
|
||||
As for the ChangeLog-style content, please follow these guidelines:
|
||||
|
||||
http://www.gnu.org/software/guile/changelogs/guile-changelogs_3.html
|
||||
|
||||
Try to make the summary line fit one of the following forms:
|
||||
|
||||
program_name: change-description
|
||||
prog1, prog2: change-description
|
||||
doc: change-description
|
||||
tests: change-description
|
||||
build: change-description
|
||||
maint: change-description
|
||||
|
||||
|
||||
Use SPACE-only indentation in all[*] files
|
||||
==========================================
|
||||
We use space-only indentation in nearly all files.
|
||||
If you use Emacs and your coreutils working directory name matches,
|
||||
this code enables the right mode:
|
||||
|
||||
;; In coreutils, indent with spaces everywhere (not TABs).
|
||||
;; Exceptions: Makefile and ChangeLog modes.
|
||||
(add-hook 'find-file-hook '(lambda ()
|
||||
(if (and buffer-file-name
|
||||
(string-match "/coreutils\\>" (buffer-file-name))
|
||||
(not (string-equal mode-name "Change Log"))
|
||||
(not (string-equal mode-name "Makefile")))
|
||||
(setq indent-tabs-mode nil))))
|
||||
|
||||
[*] Makefile and ChangeLog files are exempt, of course.
|
||||
|
||||
[FIXME: suggest vim syntax to do same thing, if it can be done safely.
|
||||
Most distros now "set nomodeline" by default for a good reason. ]
|
||||
|
||||
|
||||
Send patches to the address listed in --help output
|
||||
===================================================
|
||||
Please follow the guidelines in the "Sending your patches." section of
|
||||
git's own SubmittingPatches:
|
||||
|
||||
http://git.kernel.org/?p=git/git.git;a=blob;f=Documentation/SubmittingPatches
|
||||
|
||||
|
||||
Add documentation
|
||||
=================
|
||||
If you add a feature or change some user-visible aspect of a program,
|
||||
document it. If you add an option, document it both in --help output
|
||||
(i.e., in the usage function that generates the --help output) and in
|
||||
doc/*.texi. The man pages are generated from --help output, so
|
||||
you shouldn't need to change anything under man/. User-visible changes
|
||||
are usually documented in NEWS, too.
|
||||
|
||||
When writing prose (documentation, comments, log entries), use an
|
||||
active voice, not a passive one. I.e., say "print the frobnozzle",
|
||||
not "the frobnozzle will be printed".
|
||||
|
||||
Please add comments per the GNU Coding Standard:
|
||||
http://www.gnu.org/prep/standards/html_node/Comments.html
|
||||
|
||||
|
||||
Minor syntactic preferences
|
||||
===========================
|
||||
[I hesitate to write this one down, because it appears to be an
|
||||
acquired taste, at least for native-English speakers. It seems odd
|
||||
(if not truly backwards) to nearly anyone who doesn't have a strong
|
||||
mathematics background and perhaps a streak of something odd in their
|
||||
character ;-) ]
|
||||
In writing arithmetic comparisons, use "<" and "<=" rather than
|
||||
">" and ">=". For some justification, read this:
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/3903/focus=4126
|
||||
|
||||
const placement:
|
||||
Write "Type const *var", not "const Type *var".
|
||||
FIXME: dig up justification
|
||||
|
||||
|
||||
Be nice to translators
|
||||
======================
|
||||
Don't change translatable strings if you can avoid it.
|
||||
If you must rearrange individual lines (e.g., in multi-line --help
|
||||
strings), extract and create new strings, rather than extracting
|
||||
and moving into existing blocks. This avoids making unnecessary
|
||||
work for translators.
|
||||
|
||||
|
||||
Add tests
|
||||
==========
|
||||
Nearly every significant change must be accompanied by a test suite
|
||||
addition that exercises it. If you fix a bug, add at least one test that
|
||||
fails without the patch, but that succeeds once your patch is applied.
|
||||
If you add a feature, add tests to exercise as much of the new code
|
||||
as possible. Note to run tests/misc/newtest in isolation you can do:
|
||||
|
||||
(cd tests && make check TESTS=misc/newtest VERBOSE=yes)
|
||||
|
||||
There are hundreds of tests in the tests/ directories. You can use
|
||||
tests/sample-test as a template, or one of the various Perl-based ones
|
||||
in tests/misc.
|
||||
|
||||
If writing tests is not your thing, don't worry too much about it,
|
||||
but do provide scenarios, input/output pairs, or whatever, along with
|
||||
examples of running the tool to demonstrate the new or changed feature,
|
||||
and someone else will massage that into a test (writing portable tests
|
||||
can be a challenge).
|
||||
|
||||
|
||||
Copyright assignment
|
||||
====================
|
||||
If your change is significant (i.e., if it adds more than ~10 lines),
|
||||
then you'll have to have a copyright assignment on file with the FSF.
|
||||
Since that involves first an email exchange between you and the FSF,
|
||||
and then the exchange (FSF to you, then back) of an actual sheet of paper
|
||||
with your signature on it, and finally, some administrative processing
|
||||
in Boston, the process can take a few weeks.
|
||||
|
||||
The forms to choose from are in gnulib's doc/Copyright/ directory.
|
||||
If you want to assign a single change, you should use the file,
|
||||
doc/Copyright/request-assign.changes:
|
||||
|
||||
http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=doc/Copyright/request-assign.changes;hb=HEAD
|
||||
|
||||
If you would like to assign past and future contributions to a project,
|
||||
you'd use doc/Copyright/request-assign.future:
|
||||
|
||||
http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=doc/Copyright/request-assign.future;hb=HEAD
|
||||
|
||||
You may make assignments for up to four projects at a time.
|
||||
|
||||
In case you're wondering why we bother with all of this, read this:
|
||||
|
||||
http://www.gnu.org/licenses/why-assign.html
|
||||
|
||||
|
||||
Run "make syntax-check", or even "make distcheck"
|
||||
================================================
|
||||
Making either of those targets runs many integrity and
|
||||
project-specific policy-conformance tests. For example, the former
|
||||
ensures that you add no trailing blanks and no uses of certain deprecated
|
||||
functions. The latter performs all "syntax-check" tests, and also
|
||||
ensures that the build completes with no warnings when using a certain
|
||||
set of gcc -W... options. Don't even bother running "make distcheck"
|
||||
unless you have a reasonably up to date installation including recent
|
||||
versions of gcc and the linux kernel, and modern GNU tools.
|
||||
|
||||
|
||||
Ensure that your changes are indented properly.
|
||||
===============================================
|
||||
Format the code the way GNU indent does.
|
||||
In a file with the "indent-tabs-mode: nil" directive at the end,
|
||||
running "indent --no-tabs" should induce no change.
|
||||
With other files, there will be some existing differences.
|
||||
Try not to add any more.
|
||||
|
||||
|
||||
Avoid trailing white space
|
||||
==========================
|
||||
You may notice that the only trailing blanks in coreutils'
|
||||
version-controlled files are in a single directory: tests/pr,
|
||||
which contains expected output from various invocations of pr.
|
||||
|
||||
Do not add any more trailing blanks anywhere. While "make syntax-check"
|
||||
will alert you if you slip up, it's better to nip any problem in the
|
||||
bud, as you're typing. A good way to help you adapt to this rule is
|
||||
to configure your editor to highlight any offending characters in the
|
||||
files you edit. If you use Emacs, customize its font-lock mode (FIXME:
|
||||
provide more detail) or try one of its whitespace packages. This appears
|
||||
to be the one that will end up in emacs 23:
|
||||
|
||||
http://www.emacswiki.org/emacs/WhiteSpace
|
||||
|
||||
[that page says its version also works with emacs 21 and 22]
|
||||
If you use vim, add this to ~/.vimrc:
|
||||
|
||||
let c_space_errors=1
|
||||
highlight RedundantSpaces ctermbg=red guibg=red
|
||||
match RedundantSpaces /\s\+$\| \+\ze\t/
|
||||
|
||||
|
||||
Git can help too, by stopping you from committing any change that would
|
||||
add trailing blanks. The example pre-commit hook contains code to check
|
||||
for trailing whitespace and spaces before tabs; enable it by moving it
|
||||
to the right place and making sure it is executable:
|
||||
|
||||
mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
|
||||
|
||||
With a repository created by git-1.5.6 or older, use this command:
|
||||
|
||||
chmod +x .git/hooks/pre-commit
|
||||
|
||||
To manually check for whitespace errors before committing, you can use
|
||||
|
||||
git diff --check
|
||||
|
||||
Git also has some settings to enable suitable internal whitespace checks.
|
||||
See the manpage for git-apply for details.
|
||||
|
||||
|
||||
-------------------------------------------
|
||||
|
||||
Miscellaneous useful git commands
|
||||
=================================
|
||||
|
||||
* gitk: give a graphical view of the revision graph of the current branch
|
||||
* gitk --all: same, but display all branches
|
||||
* git log: to get most of the same info in text form
|
||||
* git log -p: same as above, but with diffs
|
||||
* git log -p SOME_FILE: same as above, but limit to SOME_FILE
|
||||
* git log -p -2 SOME_FILE: same as above, but print only two deltas
|
||||
* git log -p -1: print the most recently committed change set
|
||||
* git format-patch --stdout -1 > FILE: output the most recently committed
|
||||
change set, in a format suitable to be submitted and/or applied via
|
||||
"git am FILE".
|
||||
* git reset --soft HEAD^: Commit the delta required to restore
|
||||
state to the revision just before HEAD (i.e., next-to-last).
|
||||
* git rebase -i master: run this from on a branch, and it gives
|
||||
you an interface with which you can reorder and modify arbitrary
|
||||
change sets on that branch.
|
||||
|
||||
* if you "misplace" a change set, i.e., via git reset --hard ..., so that
|
||||
it's no longer reachable by any branch, you can use "git fsck" to find
|
||||
its SHA1 and then tag it or cherry-pick it onto an existing branch.
|
||||
For example, run this:
|
||||
git fsck --lost-found HEAD && cd .git/lost-found/commit \
|
||||
&& for i in *; do git show $i|grep SOME_IDENTIFYING_STRING \
|
||||
&& echo $i; done
|
||||
The "git fsck ..." command creates the .git/lost-found/... hierarchy
|
||||
listing all unreachable objects. Then the for loop
|
||||
print SHA1s for commits that match via log or patch.
|
||||
For example, say that found 556fbb57216b119155cdda824c98dc579b8121c8,
|
||||
you could run "git show 556fbb57216b119" to examine the change set,
|
||||
or "git checkout -b found 556fbb5721" to give it a branch name.
|
||||
Finally, you might run "git checkout master && git cherry-pick 556fbb5721"
|
||||
to put that change on the tip of "master".
|
||||
|
||||
-------------------------------------------
|
||||
|
||||
Finding things to do
|
||||
====================
|
||||
If you don't know where to start, check out the TODO file for projects
|
||||
that look like they're at your skill-/interest-level. Another good
|
||||
option is always to improve tests. You never know what you might
|
||||
uncover when you improve test coverage, and even if you don't find
|
||||
any bugs your contribution is sure to be appreciated.
|
||||
|
||||
A good way to quickly assess current test coverage is to use "lcov"
|
||||
to generate HTML coverage reports. Follow these steps:
|
||||
|
||||
# configure with coverage information
|
||||
./configure CFLAGS="-g -fprofile-arcs -ftest-coverage"
|
||||
make
|
||||
# run whatever tests you want, i.e.:
|
||||
make check
|
||||
# run lcov
|
||||
lcov -t coreutils -q -d lib -b lib -o lib.lcov -c
|
||||
lcov -t coreutils -q -d src -b src -o src.lcov -c
|
||||
# generate HTML from the output
|
||||
genhtml -p `pwd` -t coreutils -q --output-directory lcov-html *.lcov
|
||||
|
||||
Then just open the index.html file (in the generated lcov-html directory)
|
||||
in your favorite web browser.
|
||||
|
||||
========================================================================
|
||||
Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2 or
|
||||
any later version published by the Free Software Foundation; with no
|
||||
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
||||
Texts. A copy of the license is included in the ``GNU Free
|
||||
Documentation License'' file as part of this distribution.
|
||||
164
Makefile.am
164
Makefile.am
@@ -1,10 +1,10 @@
|
||||
# Make coreutils. -*-Makefile-*-
|
||||
|
||||
# Copyright (C) 1990, 1993-2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1990, 1993-2007 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# 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,
|
||||
@@ -13,78 +13,54 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
ALL_RECURSIVE_TARGETS =
|
||||
SUBDIRS = lib src doc man po tests
|
||||
EXTRA_DIST = Makefile.cfg Makefile.maint GNUmakefile \
|
||||
.gitignore \
|
||||
.hgignore \
|
||||
.kludge-stamp .prev-version THANKS-to-translators THANKStt.in \
|
||||
.vg-suppressions \
|
||||
.x-po-check \
|
||||
.x-sc_file_system .x-sc_obsolete_symbols \
|
||||
.x-sc_prohibit_atoi_atof \
|
||||
.x-sc_require_config_h \
|
||||
.x-sc_space_tab .x-sc_sun_os_names \
|
||||
.x-sc_trailing_blank \
|
||||
.x-sc_unmarked_diagnostics \
|
||||
.x-sc_useless_cpp_parens \
|
||||
ChangeLog-2005 \
|
||||
bootstrap \
|
||||
bootstrap.conf \
|
||||
build-aux/cvsu \
|
||||
build-aux/vc-list-files \
|
||||
gl/modules/getloadavg.diff \
|
||||
m4/ChangeLog \
|
||||
old/fileutils/ChangeLog \
|
||||
old/fileutils/ChangeLog-1997 \
|
||||
old/fileutils/NEWS \
|
||||
old/sh-utils/ChangeLog \
|
||||
old/sh-utils/ChangeLog.0 \
|
||||
old/sh-utils/NEWS \
|
||||
old/textutils/ChangeLog \
|
||||
old/textutils/NEWS
|
||||
|
||||
SUBDIRS = lib src doc man po tests gnulib-tests
|
||||
|
||||
changelog_etc = \
|
||||
ChangeLog-2005 \
|
||||
ChangeLog-2006 \
|
||||
ChangeLog-2007 \
|
||||
ChangeLog-2008 \
|
||||
build-aux/ChangeLog-2007 \
|
||||
build-aux/update-copyright \
|
||||
doc/ChangeLog-2007 \
|
||||
lib/ChangeLog-2007 \
|
||||
m4/ChangeLog-2007 \
|
||||
old/fileutils/ChangeLog \
|
||||
old/fileutils/ChangeLog-1997 \
|
||||
old/fileutils/NEWS \
|
||||
old/sh-utils/ChangeLog \
|
||||
old/sh-utils/ChangeLog.0 \
|
||||
old/sh-utils/NEWS \
|
||||
old/textutils/ChangeLog \
|
||||
old/textutils/NEWS \
|
||||
po/ChangeLog-2007
|
||||
|
||||
syntax_check_exceptions = \
|
||||
.x-sc_GPL_version \
|
||||
.x-sc_error_message_uppercase \
|
||||
.x-sc_file_system \
|
||||
.x-sc_obsolete_symbols \
|
||||
.x-sc_po_check \
|
||||
.x-sc_program_name \
|
||||
.x-sc_prohibit_atoi_atof \
|
||||
.x-sc_prohibit_stat_st_blocks \
|
||||
.x-sc_prohibit_strcmp \
|
||||
.x-sc_prohibit_tab_based_indentation \
|
||||
.x-sc_require_config_h \
|
||||
.x-sc_require_config_h_first \
|
||||
.x-sc_space_tab \
|
||||
.x-sc_sun_os_names \
|
||||
.x-sc_system_h_headers \
|
||||
.x-sc_trailing_blank \
|
||||
.x-sc_unmarked_diagnostics \
|
||||
.x-sc_useless_cpp_parens
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(changelog_etc) \
|
||||
$(syntax_check_exceptions) \
|
||||
.prev-version \
|
||||
.version \
|
||||
.vg-suppressions \
|
||||
THANKS-to-translators \
|
||||
THANKStt.in \
|
||||
bootstrap \
|
||||
bootstrap.conf \
|
||||
build-aux/cvsu \
|
||||
cfg.mk \
|
||||
dist-check.mk \
|
||||
gl/modules/getloadavg.diff \
|
||||
maint.mk
|
||||
|
||||
ALL_RECURSIVE_TARGETS += install-root
|
||||
install-root:
|
||||
cd src && $(MAKE) $@
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
# Some tests always need root privileges, others need them only sometimes.
|
||||
ALL_RECURSIVE_TARGETS += check-root
|
||||
check-root:
|
||||
cd tests && $(MAKE) $@ SUBDIRS=
|
||||
cd tests && $(MAKE) $@
|
||||
|
||||
dist-hook:
|
||||
test -x $(srcdir)/build-aux/install-sh
|
||||
|
||||
distcheck-hook:
|
||||
$(MAKE) my-distcheck
|
||||
|
||||
# Just prior to distribution, ...
|
||||
# transform the automake-generated rule that runs `rm -f rm'.
|
||||
@@ -93,56 +69,20 @@ check-root:
|
||||
# in the shell's search path that running `rm' would run the `rm'
|
||||
# executable in the current directory.
|
||||
# Similarly, adjust the clean-binPROGRAMS rule.
|
||||
|
||||
rm_subst = \
|
||||
s!(rm -f (rm\b|\$$\(bin_PROGRAMS\)$$))!$$1 > /dev/null 2>&1 || /bin/$$1!
|
||||
s!(rm -f (rm|\$$\(bin_PROGRAMS\)))$$!$$1 > /dev/null 2>&1 || /bin/$$1!
|
||||
MAINTAINERCLEANFILES = .kludge-stamp
|
||||
.kludge-stamp: $(srcdir)/src/Makefile.in
|
||||
perl -pi -e '$(rm_subst)' $(srcdir)/src/Makefile.in
|
||||
touch $@
|
||||
|
||||
BUILT_SOURCES = .version
|
||||
.version:
|
||||
$(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
|
||||
|
||||
# Arrange so that .tarball-version appears only in the distribution
|
||||
# tarball, and never in a checked-out repository.
|
||||
# The perl substitution is to change some key uses of "rm" to "/bin/rm".
|
||||
# See the rm_subst comment for details.
|
||||
dist-hook: gen-ChangeLog
|
||||
$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
|
||||
$(AM_V_at)perl -pi -e '$(rm_subst)' $(distdir)/src/Makefile.in
|
||||
|
||||
gen_start_date = 2008-02-08
|
||||
.PHONY: gen-ChangeLog
|
||||
gen-ChangeLog:
|
||||
$(AM_V_GEN)if test -d .git; then \
|
||||
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
||||
--since=$(gen_start_date) > $(distdir)/cl-t; \
|
||||
rm -f $(distdir)/ChangeLog; \
|
||||
mv $(distdir)/cl-t $(distdir)/ChangeLog; \
|
||||
fi
|
||||
|
||||
ALL_RECURSIVE_TARGETS += distcheck-hook
|
||||
distcheck-hook: check-ls-dircolors
|
||||
$(MAKE) my-distcheck
|
||||
$(MAKE) taint-distcheck
|
||||
|
||||
DISTCLEANFILES = VERSION
|
||||
MAINTAINERCLEANFILES = THANKS-to-translators
|
||||
MAINTAINERCLEANFILES += THANKS-to-translators
|
||||
THANKS-to-translators: po/LINGUAS THANKStt.in
|
||||
$(AM_V_GEN)( \
|
||||
( \
|
||||
cat $(srcdir)/THANKStt.in; \
|
||||
for lang in `cat $(srcdir)/po/LINGUAS`; do \
|
||||
echo http://translationproject.org/team/$$lang.html; \
|
||||
for lang in `cat $(srcdir)/po/LINGUAS`; do \
|
||||
echo http://www.iro.umontreal.ca/contrib/po/HTML/team-$$lang.html; \
|
||||
done; \
|
||||
) > $@-tmp && mv $@-tmp $@
|
||||
|
||||
# Ensure that the sets of two-letter codes in ls.c and dircolors.c
|
||||
# remain in sync.
|
||||
.PHONY: check-ls-dircolors
|
||||
check-ls-dircolors:
|
||||
$(AM_V_GEN)dc=$$(sed -n '/static.*ls_codes\[/,/};'/p \
|
||||
$(srcdir)/src/dircolors.c \
|
||||
|sed -n '/^ *"/p'|tr , '\n'|sed 's/^ *//' \
|
||||
|sed -n 's/^"\(..\)"/\1/p'|sort -u); \
|
||||
ls=$$(sed -n '/static.*indicator_name\[/,/};'/\p \
|
||||
$(srcdir)/src/ls.c \
|
||||
|sed -n '/^ *"/p'|tr , '\n'|sed 's/^ *//' \
|
||||
|sed -n 's/^"\(..\)"/\1/p'|sort -u); \
|
||||
test "$$dc" = "$$ls"
|
||||
|
||||
40
Makefile.cfg
Normal file
40
Makefile.cfg
Normal file
@@ -0,0 +1,40 @@
|
||||
# Customize Makefile.maint. -*- makefile -*-
|
||||
# Copyright (C) 2003-2007 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., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# Use alpha.gnu.org for alpha and beta releases.
|
||||
# Use ftp.gnu.org for major releases.
|
||||
gnu_ftp_host-alpha = alpha.gnu.org
|
||||
gnu_ftp_host-beta = alpha.gnu.org
|
||||
gnu_ftp_host-major = ftp.gnu.org
|
||||
gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))
|
||||
|
||||
url_dir_list = \
|
||||
ftp://$(gnu_rel_host)/gnu/coreutils
|
||||
|
||||
# The GnuPG ID of the key used to sign the tarballs.
|
||||
gpg_key_ID = D333CBA1
|
||||
|
||||
# Tests not to run as part of "make distcheck".
|
||||
# Exclude changelog-check here so that there's less churn in ChangeLog
|
||||
# files -- otherwise, you'd need to have the upcoming version number
|
||||
# at the top of the file for each `make distcheck' run.
|
||||
local-checks-to-skip = changelog-check strftime-check
|
||||
|
||||
# The local directory containing the checked-out copy of gnulib used in
|
||||
# this release. Used solely to get a date for the "announcement" target.
|
||||
gnulib_dir = /gnulib
|
||||
623
Makefile.maint
Normal file
623
Makefile.maint
Normal file
@@ -0,0 +1,623 @@
|
||||
# -*-Makefile-*-
|
||||
# This Makefile fragment is shared between the coreutils,
|
||||
# CPPI, Bison, and Autoconf.
|
||||
|
||||
## Copyright (C) 2001-2007 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., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
## 02110-1301, USA.
|
||||
|
||||
# This is reported not to work with make-3.79.1
|
||||
# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
|
||||
ME := Makefile.maint
|
||||
|
||||
# Do not save the original name or timestamp in the .tar.gz file.
|
||||
# Use --rsyncable if available.
|
||||
gzip_rsyncable := \
|
||||
$(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null && echo --rsyncable)
|
||||
GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
|
||||
|
||||
CVS = cvs
|
||||
GIT = git
|
||||
VC = $(GIT)
|
||||
VC-tag = git-tag -s -m '$(VERSION)'
|
||||
|
||||
CVS_LIST = build-aux/vc-list-files
|
||||
|
||||
CVS_LIST_EXCEPT = \
|
||||
$(CVS_LIST) | if test -f .x-$@; then grep -vEf .x-$@; else grep -v ChangeLog; fi
|
||||
|
||||
ifeq ($(origin prev_version_file), undefined)
|
||||
prev_version_file = .prev-version
|
||||
endif
|
||||
|
||||
PREV_VERSION := $(shell cat $(prev_version_file))
|
||||
VERSION_REGEXP = $(subst .,\.,$(VERSION))
|
||||
|
||||
tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
|
||||
tag-this-version = $(subst .,_,$(VERSION))
|
||||
this-vc-tag = $(tag-package)-$(tag-this-version)
|
||||
my_distdir = $(PACKAGE)-$(VERSION)
|
||||
|
||||
# Old releases are stored here.
|
||||
# Used for diffs and xdeltas.
|
||||
release_archive_dir ?= ../release
|
||||
|
||||
# Prevent programs like 'sort' from considering distinct strings to be equal.
|
||||
# Doing it here saves us from having to set LC_ALL elsewhere in this file.
|
||||
export LC_ALL = C
|
||||
|
||||
|
||||
|
||||
## --------------- ##
|
||||
## Sanity checks. ##
|
||||
## --------------- ##
|
||||
|
||||
# FIXME: add a check to prohibit definition in src/*.c of symbols defined
|
||||
# in system.h. E.g. today I removed from tail.c a useless definition of
|
||||
# ENOSYS. It was useless because system.h ensures it's defined.
|
||||
|
||||
# Collect the names of rules starting with `sc_'.
|
||||
syntax-check-rules := $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(ME))
|
||||
.PHONY: $(syntax-check-rules)
|
||||
|
||||
# Checks that don't require cvs.
|
||||
# Run `changelog-check' last, as previous test may reveal problems requiring
|
||||
# new ChangeLog entries.
|
||||
local-checks-available = \
|
||||
po-check copyright-check m4-check author_mark_check \
|
||||
changelog-check patch-check strftime-check $(syntax-check-rules) \
|
||||
makefile_path_separator_check \
|
||||
makefile-check check-AUTHORS
|
||||
.PHONY: $(local-checks-available)
|
||||
|
||||
local-check := $(filter-out $(local-checks-to-skip), $(local-checks-available))
|
||||
|
||||
syntax-check: $(local-check)
|
||||
# @grep -nE '# *include <(limits|std(def|arg|bool))\.h>' \
|
||||
# $$(find -type f -name '*.[chly]') && \
|
||||
# { echo '$(ME): found conditional include' 1>&2; \
|
||||
# exit 1; } || :
|
||||
|
||||
# grep -nE '^# *include <(string|stdlib)\.h>' \
|
||||
# $(srcdir)/{lib,src}/*.[chy] && \
|
||||
# { echo '$(ME): FIXME' 1>&2; \
|
||||
# exit 1; } || :
|
||||
# FIXME: don't allow `#include .strings\.h' anywhere
|
||||
|
||||
sc_cast_of_argument_to_free:
|
||||
@grep -nE '\<free \(\(' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): don'\''t cast free argument' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
sc_cast_of_x_alloc_return_value:
|
||||
@grep -nE '\*\) *x(m|c|re)alloc\>' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): don'\''t cast x*alloc return value' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
sc_cast_of_alloca_return_value:
|
||||
@grep -nE '\*\) *alloca\>' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): don'\''t cast alloca return value' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
sc_space_tab:
|
||||
@grep -n '[ ] ' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): found SPACE-TAB sequence; remove the SPACE' \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
# Don't use *scanf or the old ato* functions in `real' code.
|
||||
# They provide no error checking mechanism.
|
||||
# Instead, use strto* functions.
|
||||
sc_prohibit_atoi_atof:
|
||||
@grep -nE '\<([fs]?scanf|ato([filq]|ll))\>' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): do not use *scan''f, ato''f, ato''i, ato''l, ato''ll, or ato''q' \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
# Using EXIT_SUCCESS as the first argument to error is misleading,
|
||||
# since when that parameter is 0, error does not exit. Use `0' instead.
|
||||
sc_error_exit_success:
|
||||
@grep -nF 'error (EXIT_SUCCESS,' \
|
||||
$$(find -type f -name '*.[chly]') && \
|
||||
{ echo '$(ME): found error (EXIT_SUCCESS' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
sc_file_system:
|
||||
@grep -ni 'file''system' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): found use of "file''system";' \
|
||||
'rewrite to use "file system"' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
sc_no_have_config_h:
|
||||
@grep -n 'HAVE''_CONFIG_H' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): found use of HAVE''_CONFIG_H; remove' \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
# Nearly all .c files must include <config.h>.
|
||||
sc_require_config_h:
|
||||
@if $(CVS_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then \
|
||||
grep -L '^# *include <config\.h>' \
|
||||
$$($(CVS_LIST_EXCEPT) | grep '\.c$$') \
|
||||
| grep . && \
|
||||
{ echo '$(ME): the above files do not include <config.h>' \
|
||||
1>&2; exit 1; } || :; \
|
||||
else :; \
|
||||
fi
|
||||
|
||||
# Prohibit the inclusion of assert.h without an actual use of assert.
|
||||
sc_prohibit_assert_without_use:
|
||||
@if $(CVS_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then \
|
||||
files=$$(grep -l '# *include <assert\.h>' \
|
||||
$$($(CVS_LIST_EXCEPT) | grep '\.c$$')) && \
|
||||
grep -L '\<assert (' $$files \
|
||||
| grep . && \
|
||||
{ echo "$(ME): the above files include <assert.h> but don't use it" \
|
||||
1>&2; exit 1; } || :; \
|
||||
else :; \
|
||||
fi
|
||||
|
||||
sc_obsolete_symbols:
|
||||
@grep -nE '\<(HAVE''_FCNTL_H|O''_NDELAY)\>' \
|
||||
$$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): do not use HAVE''_FCNTL_H or O''_NDELAY' \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
|
||||
|
||||
# Each nonempty line must start with a year number, or a TAB.
|
||||
sc_changelog:
|
||||
@grep -n '^[^12 ]' $$(find . -maxdepth 2 -name ChangeLog) && \
|
||||
{ echo '$(ME): found unexpected prefix in a ChangeLog' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# Ensure that dd's definition of LONGEST_SYMBOL stays in sync
|
||||
# with the strings from the two affected variables.
|
||||
dd_c = $(srcdir)/src/dd.c
|
||||
sc_dd_max_sym_length:
|
||||
ifneq ($(wildcard $(dd_c)),)
|
||||
@len=$$( (sed -n '/conversions\[\] =$$/,/^};/p' $(dd_c);\
|
||||
sed -n '/flags\[\] =$$/,/^};/p' $(dd_c) ) \
|
||||
|sed -n '/"/s/^[^"]*"\([^"]*\)".*/\1/p' \
|
||||
| wc --max-line-length); \
|
||||
max=$$(sed -n '/^#define LONGEST_SYMBOL /s///p' $(dd_c) \
|
||||
|tr -d '"' | wc --max-line-length); \
|
||||
if test "$$len" = "$$max"; then :; else \
|
||||
echo 'dd.c: LONGEST_SYMBOL is not longest' 1>&2; \
|
||||
exit 1; \
|
||||
fi
|
||||
endif
|
||||
|
||||
# Many m4 macros names once began with `jm_'.
|
||||
# On 2004-04-13, they were all changed to start with gl_ instead.
|
||||
# Make sure that none are inadvertently reintroduced.
|
||||
sc_prohibit_jm_in_m4:
|
||||
@grep -nE 'jm_[A-Z]' \
|
||||
$$($(CVS_LIST) m4 |grep '\.m4$$'; echo /dev/null) && \
|
||||
{ echo '$(ME): do not use jm_ in m4 macro names' \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
sc_root_tests:
|
||||
@if test -d tests \
|
||||
&& grep check-root tests/Makefile.am>/dev/null 2>&1; then \
|
||||
t1=sc-root.expected; t2=sc-root.actual; \
|
||||
grep -nl '^PRIV_CHECK_ARG=require-root' \
|
||||
$$($(CVS_LIST) tests) |sed s,tests,., |sort > $$t1; \
|
||||
sed -n 's, cd \([^ ]*\) .*MAKE..check TESTS=\(.*\),./\1/\2,p' \
|
||||
$(srcdir)/tests/Makefile.am |sort > $$t2; \
|
||||
diff -u $$t1 $$t2 || diff=1; \
|
||||
rm -f $$t1 $$t2; \
|
||||
test "$$diff" \
|
||||
&& { echo 'tests/Makefile.am: missing check-root action'>&2; \
|
||||
exit 1; } || :; \
|
||||
fi
|
||||
|
||||
headers_with_interesting_macro_defs = \
|
||||
exit.h \
|
||||
fcntl_.h \
|
||||
fnmatch_.h \
|
||||
intprops.h \
|
||||
inttypes_.h \
|
||||
lchown.h \
|
||||
openat.h \
|
||||
stat-macros.h \
|
||||
stdint_.h
|
||||
|
||||
# Create a list of regular expressions matching the names
|
||||
# of macros that are guaranteed by parts of gnulib to be defined.
|
||||
.re-defmac:
|
||||
@(cd $(srcdir)/lib; \
|
||||
for f in $(headers_with_interesting_macro_defs); do \
|
||||
test -f $$f && \
|
||||
sed -n '/^# *define \([^_ (][^ (]*\)[ (].*/s//\1/p' $$f; \
|
||||
done; \
|
||||
) | sort -u \
|
||||
| grep -Ev 'ATTRIBUTE_NORETURN|SIZE_MAX' \
|
||||
| sed 's/^/^# *define /' \
|
||||
> $@-t
|
||||
@mv $@-t $@
|
||||
|
||||
# Don't define macros that we already get from gnulib header files.
|
||||
sc_always_defined_macros: .re-defmac
|
||||
@if test -f $(srcdir)/src/system.h; then \
|
||||
trap 'rc=$$?; rm -f .re-defmac; exit $$rc' 0 1 2 3 15; \
|
||||
grep -f .re-defmac $$($(CVS_LIST)) \
|
||||
&& { echo '$(ME): define the above via some gnulib .h file' \
|
||||
1>&2; exit 1; } || :; \
|
||||
fi
|
||||
|
||||
# Create a list of regular expressions matching the names
|
||||
# of files included from system.h. Exclude a couple.
|
||||
.re-list:
|
||||
@sed -n '/^# *include /s///p' $(srcdir)/src/system.h \
|
||||
| grep -Ev 'sys/(param|file)\.h' \
|
||||
| sed 's/ .*//;;s/^["<]/^# *include [<"]/;s/\.h[">]$$/\\.h[">]/' \
|
||||
> $@-t
|
||||
@mv $@-t $@
|
||||
|
||||
# Files in src/ should not include directly any of
|
||||
# the headers already included via system.h.
|
||||
sc_system_h_headers: .re-list
|
||||
@if test -f $(srcdir)/src/system.h; then \
|
||||
trap 'rc=$$?; rm -f .re-list; exit $$rc' 0 1 2 3 15; \
|
||||
grep -nE -f .re-list \
|
||||
$$($(CVS_LIST) src | \
|
||||
grep -Ev '((copy|system)\.h|parse-gram\.c)$$') \
|
||||
&& { echo '$(ME): the above are already included via system.h'\
|
||||
1>&2; exit 1; } || :; \
|
||||
fi
|
||||
|
||||
sc_sun_os_names:
|
||||
@grep -nEi \
|
||||
'solaris[^[:alnum:]]*2\.(7|8|9|[1-9][0-9])|sunos[^[:alnum:]][6-9]' \
|
||||
$$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): found misuse of Sun OS version numbers' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
sc_the_the:
|
||||
@grep -ni '\<the ''the\>' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): found use of "the ''the";' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
sc_tight_scope:
|
||||
$(MAKE) -C src $@
|
||||
|
||||
sc_trailing_blank:
|
||||
@grep -n '[ ]$$' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): found trailing blank(s)' \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
# Match lines like the following, but where there is only one space
|
||||
# between the options and the description:
|
||||
# -D, --all-repeated[=delimit-method] print all duplicate lines\n
|
||||
longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)?
|
||||
sc_two_space_separator_in_usage:
|
||||
@grep -nE '^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \
|
||||
$$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo "$(ME): help2man requires at least two spaces between"; \
|
||||
echo "$(ME): an option and its description"; \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
# Look for diagnostics that aren't marked for translation.
|
||||
# This won't find any for which error's format string is on a separate line.
|
||||
sc_unmarked_diagnostics:
|
||||
@grep -nE \
|
||||
'\<error \([^"]*"[^"]*[a-z]{3}' $$($(CVS_LIST_EXCEPT)) \
|
||||
| grep -v '_''(' && \
|
||||
{ echo '$(ME): found unmarked diagnostic(s)' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# Avoid useless parentheses like those in this example:
|
||||
# #if defined (SYMBOL) || defined (SYM2)
|
||||
sc_useless_cpp_parens:
|
||||
@grep -n '^# *if .*defined *(' $$($(CVS_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): found useless parentheses in cpp directive' \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
# Ensure that the c99-to-c89 patch applies cleanly.
|
||||
patch-check:
|
||||
rm -rf src-c89 $@.1 $@.2
|
||||
cp -a src src-c89
|
||||
(cd src-c89; patch -p2 -V never --fuzz=0) < src/c99-to-c89.diff \
|
||||
> $@.1 2>&1
|
||||
if test "$${REGEN_PATCH+set}" = set; then \
|
||||
diff -upr src src-c89 > new-diff || : ; fi
|
||||
grep -v '^patching file ' $@.1 > $@.2 || :
|
||||
msg=ok; test -s $@.2 && msg='fuzzy patch' || : ; \
|
||||
rm -f src-c89/*.o || msg='rm failed'; \
|
||||
$(MAKE) -C src-c89 CFLAGS='-Wdeclaration-after-statement -Werror' \
|
||||
|| msg='compile failure with extra options'; \
|
||||
rm -rf src-c89 $@.1 $@.2; \
|
||||
test "$$msg" = ok && : || echo "$$msg" 1>&2; \
|
||||
test "$$msg" = ok
|
||||
|
||||
# Ensure that date's --help output stays in sync with the info
|
||||
# documentation for GNU strftime. The only exception is %N,
|
||||
# which date accepts but GNU strftime does not.
|
||||
extract_char = sed 's/^[^%][^%]*%\(.\).*/\1/'
|
||||
strftime-check:
|
||||
if test -f $(srcdir)/src/date.c; then \
|
||||
grep '^ %. ' $(srcdir)/src/date.c | sort \
|
||||
| $(extract_char) > $@-src; \
|
||||
{ echo N; \
|
||||
info libc date calendar format | grep '^ `%.'\' \
|
||||
| $(extract_char); } | sort > $@-info; \
|
||||
diff -u $@-src $@-info || exit 1; \
|
||||
rm -f $@-src $@-info; \
|
||||
fi
|
||||
|
||||
check-AUTHORS:
|
||||
$(MAKE) -C src $@
|
||||
|
||||
# Ensure that we use only the standard $(VAR) notation,
|
||||
# not @...@ in Makefile.am, now that we can rely on automake
|
||||
# to emit a definition for each substituted variable.
|
||||
makefile-check:
|
||||
grep -nE '@[A-Z_0-9]+@' `find . -name Makefile.am` \
|
||||
&& { echo 'Makefile.maint: use $$(...), not @...@' 1>&2; exit 1; } || :
|
||||
|
||||
news-date-check: NEWS
|
||||
today=`date +%Y-%m-%d`; \
|
||||
if head NEWS | grep '^\*.* $(VERSION_REGEXP) ('$$today')' \
|
||||
>/dev/null; then \
|
||||
:; \
|
||||
else \
|
||||
echo "version or today's date is not in NEWS" 1>&2; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
changelog-check:
|
||||
if head ChangeLog | grep 'Version $(VERSION_REGEXP)\.$$' \
|
||||
>/dev/null; then \
|
||||
:; \
|
||||
else \
|
||||
echo "$(VERSION) not in ChangeLog" 1>&2; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
m4-check:
|
||||
@grep -n 'AC_DEFUN([^[]' m4/*.m4 \
|
||||
&& { echo 'Makefile.maint: quote the first arg to AC_DEFUN' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# Verify that all source files using _() are listed in po/POTFILES.in.
|
||||
# FIXME: don't hard-code file names below; use a more general mechanism.
|
||||
po-check:
|
||||
if test -f po/POTFILES.in; then \
|
||||
grep -E -v '^(#|$$)' po/POTFILES.in \
|
||||
| grep -v '^src/false\.c$$' | sort > $@-1; \
|
||||
files=; \
|
||||
for file in $$($(CVS_LIST_EXCEPT)) lib/*.[ch]; do \
|
||||
case $$file in \
|
||||
djgpp/* | man/*) continue;; \
|
||||
*/c99-to-c89.diff) continue;; \
|
||||
esac; \
|
||||
case $$file in \
|
||||
*.[ch]) \
|
||||
base=`expr " $$file" : ' \(.*\)\..'`; \
|
||||
{ test -f $$base.l || test -f $$base.y; } && continue;; \
|
||||
esac; \
|
||||
files="$$files $$file"; \
|
||||
done; \
|
||||
grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files \
|
||||
| sort -u > $@-2; \
|
||||
diff -u $@-1 $@-2 || exit 1; \
|
||||
rm -f $@-1 $@-2; \
|
||||
fi
|
||||
|
||||
# In a definition of #define AUTHORS "... and ..." where the RHS contains
|
||||
# the English word `and', the string must be marked with `N_ (...)' so that
|
||||
# gettext recognizes it as a string requiring translation.
|
||||
author_mark_check:
|
||||
@grep -n '^# *define AUTHORS "[^"]* and ' src/*.c |grep -v ' N_ (' && \
|
||||
{ echo 'Makefile.maint: enclose the above strings in N_ (...)' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# Sometimes it is useful to change the PATH environment variable
|
||||
# in Makefiles. When doing so, it's better not to use the Unix-centric
|
||||
# path separator of `:', but rather the automake-provided `@PATH_SEPARATOR@'.
|
||||
# It'd be better to use `find -print0 ...|xargs -0 ...', but less portable,
|
||||
# and there probably aren't many projects with so many Makefile.am files
|
||||
# that we'd have to worry about limits on command line length.
|
||||
msg = 'Makefile.maint: Do not use `:'\'' above; use @PATH_SEPARATOR@ instead'
|
||||
makefile_path_separator_check:
|
||||
@grep -n 'PATH=.*:' `find $(srcdir) -name Makefile.am` \
|
||||
&& { echo $(msg) 1>&2; exit 1; } || :
|
||||
|
||||
# Check that `make alpha' will not fail at the end of the process.
|
||||
writable-files:
|
||||
if test -d $(release_archive_dir); then :; else \
|
||||
mkdir $(release_archive_dir); \
|
||||
fi
|
||||
for file in $(distdir).tar.gz $(xd-delta) \
|
||||
$(release_archive_dir)/$(distdir).tar.gz \
|
||||
$(release_archive_dir)/$(xd-delta); do \
|
||||
test -e $$file || continue; \
|
||||
test -w $$file \
|
||||
|| { echo ERROR: $$file is not writable; fail=1; }; \
|
||||
done; \
|
||||
test "$$fail" && exit 1 || :
|
||||
|
||||
v_etc_file = lib/version-etc.c
|
||||
sample-test = tests/sample-test
|
||||
# Make sure that the copyright date in $(v_etc_file) is up to date.
|
||||
copyright-check:
|
||||
@if test -f $(v_etc_file); then \
|
||||
grep 'enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' $(v_etc_file) \
|
||||
>/dev/null \
|
||||
|| { echo 'out of date copyright in $(v_etc_file); update it' 1>&2; \
|
||||
exit 1; }; \
|
||||
fi
|
||||
@if test -f $(sample-test); then \
|
||||
grep '# Copyright (C) '$$(date +%Y)' Free' $(sample-test) \
|
||||
>/dev/null \
|
||||
|| { echo 'out of date copyright in $(sample-test); update it' 1>&2; \
|
||||
exit 1; }; \
|
||||
fi
|
||||
|
||||
|
||||
# Sanity checks with the repository.
|
||||
# Abort early if this tag has already been used.
|
||||
vc-tag-check:
|
||||
used=no; \
|
||||
if $(VC) --help | grep CVS; then \
|
||||
$(CVS) -n log -h README|grep -e $(this-vc-tag): >/dev/null \
|
||||
&& used=yes; \
|
||||
else \
|
||||
$(GIT) tag -l '^$(this-vc-tag)$$' && used=yes; \
|
||||
fi; \
|
||||
if test "$$used" = yes; then \
|
||||
echo "$(this-vc-tag) has already been used; not tagging" 1>&2; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
vc-diff-check:
|
||||
$(VC) diff > vc-diffs || :
|
||||
if test -s vc-diffs; then \
|
||||
cat vc-diffs; \
|
||||
echo "Some files are locally modified:" 1>&2; \
|
||||
exit 1; \
|
||||
else \
|
||||
rm vc-diffs; \
|
||||
fi
|
||||
|
||||
cvs-check: vc-diff-check vc-tag-check
|
||||
|
||||
maintainer-distcheck:
|
||||
$(MAKE) distcheck
|
||||
$(MAKE) my-distcheck
|
||||
|
||||
|
||||
# Tag before making distribution. Also, don't make a distribution if
|
||||
# checks fail. Also, make sure the NEWS file is up-to-date.
|
||||
# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
|
||||
vc-dist: $(local-check) cvs-check maintainer-distcheck
|
||||
$(VC-tag) $(this-vc-tag)
|
||||
$(MAKE) dist
|
||||
|
||||
# Use this to make sure we don't run these programs when building
|
||||
# from a virgin tgz file, below.
|
||||
null_AM_MAKEFLAGS = \
|
||||
ACLOCAL=false \
|
||||
AUTOCONF=false \
|
||||
AUTOMAKE=false \
|
||||
AUTOHEADER=false \
|
||||
MAKEINFO=false
|
||||
|
||||
warn_cflags = -Dlint -O -Werror -Wall -Wformat -Wshadow -Wpointer-arith
|
||||
|
||||
# Use -Wformat -Werror to detect format-string/arg-list mismatches.
|
||||
# Also, check for shadowing problems with -Wshadow, and for pointer
|
||||
# arithmetic problems with -Wpointer-arith.
|
||||
# These CFLAGS are pretty strict. If you build this target, you probably
|
||||
# have to have a recent version of gcc and glibc headers.
|
||||
TMPDIR ?= /tmp
|
||||
t=$(TMPDIR)/$(PACKAGE)/test
|
||||
my-distcheck: $(local-check) $(release_archive_dir)/$(prev-tgz)
|
||||
-rm -rf $(t)
|
||||
mkdir -p $(t)
|
||||
GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
|
||||
cd $(t)/$(distdir) \
|
||||
&& ./configure --disable-nls \
|
||||
&& $(MAKE) CFLAGS='$(warn_cflags)' \
|
||||
AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
|
||||
&& $(MAKE) dvi \
|
||||
&& $(MAKE) check \
|
||||
&& $(MAKE) distclean
|
||||
(cd $(t) && mv $(distdir) $(distdir).old \
|
||||
&& $(AMTAR) -zxf - ) < $(distdir).tar.gz
|
||||
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
|
||||
if test -f $(srcdir)/src/c99-to-c89.diff; then \
|
||||
cd $(t)/$(distdir) \
|
||||
&& (cd src && patch -V never --fuzz=0 <c99-to-c89.diff) \
|
||||
&& ./configure --disable-largefile \
|
||||
CFLAGS='-Werror -ansi -pedantic -Wno-long-long' \
|
||||
&& $(MAKE); \
|
||||
fi
|
||||
-rm -rf $(t)
|
||||
@echo "========================"; \
|
||||
echo "$(distdir).tar.gz is ready for distribution"; \
|
||||
echo "========================"
|
||||
|
||||
WGET = wget
|
||||
WGETFLAGS = -C off
|
||||
|
||||
rel-check:
|
||||
tarz=/tmp/rel-check-tarz-$$$$; \
|
||||
md5_tmp=/tmp/rel-check-md5-$$$$; \
|
||||
set -e; \
|
||||
trap 'status=$$?; rm -f $$tarz $$md5_tmp; exit $$status' 0 1 2 3 15; \
|
||||
$(WGET) $(WGETFLAGS) -q --output-document=$$tarz $(url); \
|
||||
echo "$(md5) -" > $$md5_tmp; \
|
||||
md5sum -c $$md5_tmp < $$tarz
|
||||
|
||||
prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
|
||||
xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
|
||||
|
||||
rel-files = $(xd-delta) $(DIST_ARCHIVES)
|
||||
|
||||
# Approximate the date of last gnulib "update" by the ChangeLog file's
|
||||
# mtime, and provide that date in the announcement.
|
||||
announcement: NEWS ChangeLog $(rel-files)
|
||||
@cl_date=$$(stat --printf @%Y $(gnulib_dir)/ChangeLog); \
|
||||
utc_date=$$(date -u --date $$cl_date '+%Y-%m-%d %T %z'); \
|
||||
./build-aux/announce-gen \
|
||||
--release-type=$(RELEASE_TYPE) \
|
||||
--package=$(PACKAGE) \
|
||||
--prev=$(PREV_VERSION) \
|
||||
--curr=$(VERSION) \
|
||||
--gpg-key-id=$(gpg_key_ID) \
|
||||
--news=NEWS \
|
||||
--bootstrap-tools=autoconf,automake,bison,gnulib \
|
||||
--gnulib-snapshot-time-stamp="$$utc_date" \
|
||||
$(addprefix --url-dir=, $(url_dir_list))
|
||||
|
||||
## ---------------- ##
|
||||
## Updating files. ##
|
||||
## ---------------- ##
|
||||
|
||||
ftp-gnu = ftp://ftp.gnu.org/gnu
|
||||
www-gnu = http://www.gnu.org
|
||||
|
||||
# Use mv, if you don't have/want move-if-change.
|
||||
move_if_change ?= move-if-change
|
||||
|
||||
emit_upload_commands:
|
||||
@echo =====================================
|
||||
@echo =====================================
|
||||
@echo "$(srcdir)/build-aux/gnupload $(GNUPLOADFLAGS) \\"
|
||||
@echo " --to $(gnu_rel_host):$(PACKAGE) \\"
|
||||
@echo " $(rel-files)"
|
||||
@echo '# send the /tmp/announcement e-mail'
|
||||
@echo =====================================
|
||||
@echo =====================================
|
||||
|
||||
$(xd-delta): $(release_archive_dir)/$(prev-tgz) $(distdir).tar.gz
|
||||
xdelta delta -9 $^ $@ || :
|
||||
|
||||
.PHONY: alpha beta major
|
||||
alpha beta major: news-date-check changelog-check $(local-check) writable-files
|
||||
test $@ = major \
|
||||
&& { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \
|
||||
|| { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
|
||||
|| :
|
||||
$(MAKE) vc-dist
|
||||
$(MAKE) $(xd-delta)
|
||||
$(MAKE) -s announcement RELEASE_TYPE=$@ > /tmp/announce-$(my_distdir)
|
||||
ln $(rel-files) $(release_archive_dir)
|
||||
chmod a-w $(rel-files)
|
||||
$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
|
||||
echo $(VERSION) > $(prev_version_file)
|
||||
$(VC) commit -m \
|
||||
'$(prev_version_file): Record previous version: $(VERSION).' \
|
||||
$(prev_version_file)
|
||||
888
NEWS
888
NEWS
@@ -1,864 +1,6 @@
|
||||
GNU coreutils NEWS -*- outline -*-
|
||||
|
||||
* Noteworthy changes in release ?.? (????-??-??) [?]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
chcon no longer exits immediately just because SELinux is disabled.
|
||||
Even then, chcon may still be useful.
|
||||
[bug introduced in coreutils-8.0]
|
||||
|
||||
stat -f recognizes more file system types: afs, cifs, anon-inode FS,
|
||||
btrfs, cgroupfs, cramfs-wend, debugfs, futexfs, hfs, inotifyfs, minux3,
|
||||
nilfs, securityfs, selinux, xenfs
|
||||
|
||||
** New features
|
||||
|
||||
md5sum --check now also accepts openssl-style checksums.
|
||||
So do sha1sum, sha224sum, sha384sum and sha512sum.
|
||||
|
||||
|
||||
* Noteworthy changes in release 8.0 (2009-10-06) [beta]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp --preserve=xattr and --archive now preserve extended attributes even
|
||||
when the source file doesn't have write access.
|
||||
[bug introduced in coreutils-7.1]
|
||||
|
||||
touch -t [[CC]YY]MMDDhhmm[.ss] now accepts a timestamp string ending in .60,
|
||||
to accommodate leap seconds.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
ls --color now reverts to the color of a base file type consistently
|
||||
when the color of a more specific type is disabled.
|
||||
[bug introduced in coreutils-5.90]
|
||||
|
||||
ls -LR exits with status 2, not 0, when it encounters a cycle
|
||||
|
||||
ls -is is now consistent with ls -lis in ignoring values returned
|
||||
from a failed stat/lstat. For example ls -Lis now prints "?", not "0",
|
||||
for the inode number and allocated size of a dereferenced dangling symlink.
|
||||
|
||||
tail --follow --pid now avoids a race condition where data written
|
||||
just before the process dies might not have been output by tail.
|
||||
Also, tail no longer delays at all when the specified pid is not live.
|
||||
[The race was introduced in coreutils-7.5,
|
||||
and the unnecessary delay was present since textutils-1.22o]
|
||||
|
||||
** Portability
|
||||
|
||||
On Solaris 9, many commands would mistakenly treat file/ the same as
|
||||
file. Now, even on such a system, path resolution obeys the POSIX
|
||||
rules that a trailing slash ensures that the preceeding name is a
|
||||
directory or a symlink to a directory.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
id no longer prints SELinux " context=..." when the POSIXLY_CORRECT
|
||||
environment variable is set.
|
||||
|
||||
readlink -f now ignores a trailing slash when deciding if the
|
||||
last component (possibly via a dangling symlink) can be created,
|
||||
since mkdir will succeed in that case.
|
||||
|
||||
** New features
|
||||
|
||||
ln now accepts the options --logical (-L) and --physical (-P),
|
||||
added by POSIX 2008. The default behavior is -P on systems like
|
||||
GNU/Linux where link(2) creates hard links to symlinks, and -L on
|
||||
BSD systems where link(2) follows symlinks.
|
||||
|
||||
stat: without -f, a command-line argument of "-" now means standard input.
|
||||
With --file-system (-f), an argument of "-" is now rejected.
|
||||
If you really must operate on a file named "-", specify it as
|
||||
"./-" or use "--" to separate options from arguments.
|
||||
|
||||
** Improvements
|
||||
|
||||
rm: rewrite to use gnulib's fts
|
||||
This makes rm -rf significantly faster (400-500%) in some pathological
|
||||
cases, and slightly slower (20%) in at least one pathological case.
|
||||
|
||||
rm -r deletes deep hierarchies more efficiently. Before, execution time
|
||||
was quadratic in the depth of the hierarchy, now it is merely linear.
|
||||
However, this improvement is not as pronounced as might be expected for
|
||||
very deep trees, because prior to this change, for any relative name
|
||||
length longer than 8KiB, rm -r would sacrifice official conformance to
|
||||
avoid the disproportionate quadratic performance penalty. Leading to
|
||||
another improvement:
|
||||
|
||||
rm -r is now slightly more standards-conformant when operating on
|
||||
write-protected files with relative names longer than 8KiB.
|
||||
|
||||
|
||||
* Noteworthy changes in release 7.6 (2009-09-11) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp, mv now ignore failure to preserve a symlink time stamp, when it is
|
||||
due to their running on a kernel older than what was implied by headers
|
||||
and libraries tested at configure time.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
cp --reflink --preserve now preserves attributes when cloning a file.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
cp --preserve=xattr no longer leaks resources on each preservation failure.
|
||||
[bug introduced in coreutils-7.1]
|
||||
|
||||
dd now exits with non-zero status when it encounters a write error while
|
||||
printing a summary to stderr.
|
||||
[bug introduced in coreutils-6.11]
|
||||
|
||||
dd cbs=N conv=unblock would fail to print a final newline when the size
|
||||
of the input was not a multiple of N bytes.
|
||||
[the non-conforming behavior dates back to the initial implementation]
|
||||
|
||||
df no longer requires that each command-line argument be readable
|
||||
[bug introduced in coreutils-7.3]
|
||||
|
||||
ls -i now prints consistent inode numbers also for mount points.
|
||||
This makes ls -i DIR less efficient on systems with dysfunctional readdir,
|
||||
because ls must stat every file in order to obtain a guaranteed-valid
|
||||
inode number. [bug introduced in coreutils-6.0]
|
||||
|
||||
tail -f (inotify-enabled) now flushes any initial output before blocking.
|
||||
Before, this would print nothing and wait: stdbuf -o 4K tail -f /etc/passwd
|
||||
Note that this bug affects tail -f only when its standard output is buffered,
|
||||
which is relatively unusual.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
tail -f once again works with standard input. inotify-enabled tail -f
|
||||
would fail when operating on a nameless stdin. I.e., tail -f < /etc/passwd
|
||||
would say "tail: cannot watch `-': No such file or directory", yet the
|
||||
relatively baroque tail -f /dev/stdin < /etc/passwd would work. Now, the
|
||||
offending usage causes tail to revert to its conventional sleep-based
|
||||
(i.e., not inotify-based) implementation.
|
||||
[bug introduced in coreutils-7.5]
|
||||
|
||||
** Portability
|
||||
|
||||
ln, link: link f z/ would mistakenly succeed on Solaris 10, given an
|
||||
existing file, f, and nothing named "z". ln -T f z/ has the same problem.
|
||||
Each would mistakenly create "z" as a link to "f". Now, even on such a
|
||||
system, each command reports the error, e.g.,
|
||||
link: cannot create link `z/' to `f': Not a directory
|
||||
|
||||
** New features
|
||||
|
||||
cp --reflink accepts a new "auto" parameter which falls back to
|
||||
a standard copy if creating a copy-on-write clone is not possible.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
tail -f now ignores "-" when stdin is a pipe or FIFO.
|
||||
tail-with-no-args now ignores -f unconditionally when stdin is a pipe or FIFO.
|
||||
Before, it would ignore -f only when no file argument was specified,
|
||||
and then only when POSIXLY_CORRECT was set. Now, :|tail -f - terminates
|
||||
immediately. Before, it would block indefinitely.
|
||||
|
||||
|
||||
* Noteworthy changes in release 7.5 (2009-08-20) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
dd's oflag=direct option now works even when the size of the input
|
||||
is not a multiple of e.g., 512 bytes.
|
||||
|
||||
dd now handles signals consistently even when they're received
|
||||
before data copying has started.
|
||||
|
||||
install runs faster again with SELinux enabled
|
||||
[introduced in coreutils-7.0]
|
||||
|
||||
ls -1U (with two or more arguments, at least one a nonempty directory)
|
||||
would print entry names *before* the name of the containing directory.
|
||||
Also fixed incorrect output of ls -1RU and ls -1sU.
|
||||
[introduced in coreutils-7.0]
|
||||
|
||||
sort now correctly ignores fields whose ending position is specified
|
||||
before the start position. Previously in numeric mode the remaining
|
||||
part of the line after the start position was used as the sort key.
|
||||
[This bug appears to have been present in "the beginning".]
|
||||
|
||||
truncate -s failed to skip all whitespace in the option argument in
|
||||
some locales.
|
||||
|
||||
** New programs
|
||||
|
||||
stdbuf: A new program to run a command with modified stdio buffering
|
||||
for its standard streams.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
ls --color: files with multiple hard links are no longer colored differently
|
||||
by default. That can be enabled by changing the LS_COLORS environment
|
||||
variable. You can control that using the MULTIHARDLINK dircolors input
|
||||
variable which corresponds to the 'mh' LS_COLORS item. Note these variables
|
||||
were renamed from 'HARDLINK' and 'hl' which were available since
|
||||
coreutils-7.1 when this feature was introduced.
|
||||
|
||||
** Deprecated options
|
||||
|
||||
nl --page-increment: deprecated in favor of --line-increment, the new option
|
||||
maintains the previous semantics and the same short option, -i.
|
||||
|
||||
** New features
|
||||
|
||||
chroot now accepts the options --userspec and --groups.
|
||||
|
||||
cp accepts a new option, --reflink: create a lightweight copy
|
||||
using copy-on-write (COW). This is currently only supported within
|
||||
a btrfs file system.
|
||||
|
||||
cp now preserves time stamps on symbolic links, when possible
|
||||
|
||||
sort accepts a new option, --human-numeric-sort (-h): sort numbers
|
||||
while honoring human readable suffixes like KiB and MB etc.
|
||||
|
||||
tail --follow now uses inotify when possible, to be more responsive
|
||||
to file changes and more efficient when monitoring many files.
|
||||
|
||||
|
||||
* Noteworthy changes in release 7.4 (2009-05-07) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
date -d 'next mon', when run on a Monday, now prints the date
|
||||
7 days in the future rather than the current day. Same for any other
|
||||
day-of-the-week name, when run on that same day of the week.
|
||||
[This bug appears to have been present in "the beginning". ]
|
||||
|
||||
date -d tuesday, when run on a Tuesday -- using date built from the 7.3
|
||||
release tarball, not from git -- would print the date 7 days in the future.
|
||||
Now, it works properly and prints the current date. That was due to
|
||||
human error (including not-committed changes in a release tarball)
|
||||
and the fact that there is no check to detect when the gnulib/ git
|
||||
submodule is dirty.
|
||||
|
||||
** Build-related
|
||||
|
||||
make check: two tests have been corrected
|
||||
|
||||
** Portability
|
||||
|
||||
There have been some ACL-related portability fixes for *BSD,
|
||||
inherited from gnulib.
|
||||
|
||||
|
||||
* Noteworthy changes in release 7.3 (2009-05-01) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp now diagnoses failure to preserve selinux/xattr attributes when
|
||||
--preserve=context,xattr is specified in combination with -a.
|
||||
Also, cp no longer suppresses attribute-preservation diagnostics
|
||||
when preserving SELinux context was explicitly requested.
|
||||
|
||||
ls now aligns output correctly in the presence of abbreviated month
|
||||
names from the locale database that have differing widths.
|
||||
|
||||
ls -v and sort -V now order names like "#.b#" properly
|
||||
|
||||
mv: do not print diagnostics when failing to preserve xattr's on file
|
||||
systems without xattr support.
|
||||
|
||||
sort -m no longer segfaults when its output file is also an input file.
|
||||
E.g., with this, touch 1; sort -m -o 1 1, sort would segfault.
|
||||
[introduced in coreutils-7.2]
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
shred, sort, shuf: now use an internal pseudorandom generator by default.
|
||||
This is mainly noticable in shred where the 3 random passes it does by
|
||||
default should proceed at the speed of the disk. Previously /dev/urandom
|
||||
was used if available, which is relatively slow on GNU/Linux systems.
|
||||
|
||||
** Improved robustness
|
||||
|
||||
cp would exit successfully after copying less than the full contents
|
||||
of a file larger than ~4000 bytes from a linux-/proc file system to a
|
||||
destination file system with a fundamental block size of 4KiB or greater.
|
||||
Reading into a 4KiB-or-larger buffer, cp's "read" syscall would return
|
||||
a value smaller than 4096, and cp would interpret that as EOF (POSIX
|
||||
allows this). This optimization, now removed, saved 50% of cp's read
|
||||
syscalls when copying small files. Affected linux kernels: at least
|
||||
2.6.9 through 2.6.29.
|
||||
[the optimization was introduced in coreutils-6.0]
|
||||
|
||||
** Portability
|
||||
|
||||
df now pre-mounts automountable directories even with automounters for
|
||||
which stat-like syscalls no longer provoke mounting. Now, df uses open.
|
||||
|
||||
`id -G $USER` now works correctly even on Darwin and NetBSD. Previously it
|
||||
would either truncate the group list to 10, or go into an infinite loop,
|
||||
due to their non-standard getgrouplist implementations.
|
||||
[truncation introduced in coreutils-6.11]
|
||||
[infinite loop introduced in coreutils-7.1]
|
||||
|
||||
|
||||
* Noteworthy changes in release 7.2 (2009-03-31) [stable]
|
||||
|
||||
** New features
|
||||
|
||||
pwd now accepts the options --logical (-L) and --physical (-P). For
|
||||
compatibility with existing scripts, -P is the default behavior
|
||||
unless POSIXLY_CORRECT is requested.
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cat once again immediately outputs data it has processed.
|
||||
Previously it would have been buffered and only output if enough
|
||||
data was read, or on process exit.
|
||||
[bug introduced in coreutils-6.0]
|
||||
|
||||
comm's new --check-order option would fail to detect disorder on any pair
|
||||
of lines where one was a prefix of the other. For example, this would
|
||||
fail to report the disorder: printf 'Xb\nX\n'>k; comm --check-order k k
|
||||
[bug introduced in coreutils-7.0]
|
||||
|
||||
cp once again diagnoses the invalid "cp -rl dir dir" right away,
|
||||
rather than after creating a very deep dir/dir/dir/... hierarchy.
|
||||
The bug strikes only with both --recursive (-r, -R) and --link (-l).
|
||||
[bug introduced in coreutils-7.1]
|
||||
|
||||
ls --sort=version (-v) sorted names beginning with "." inconsistently.
|
||||
Now, names that start with "." are always listed before those that don't.
|
||||
|
||||
pr: fix the bug whereby --indent=N (-o) did not indent header lines
|
||||
[bug introduced in coreutils-6.9.90]
|
||||
|
||||
sort now handles specified key ends correctly.
|
||||
Previously -k1,1b would have caused leading space from field 2 to be
|
||||
included in the sort while -k2,3.0 would have not included field 3.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
cat,cp,install,mv,split: these programs now read and write a minimum
|
||||
of 32KiB at a time. This was seen to double throughput when reading
|
||||
cached files on GNU/Linux-based systems.
|
||||
|
||||
cp -a now tries to preserve extended attributes (xattr), but does not
|
||||
diagnose xattr-preservation failure. However, cp --preserve=all still does.
|
||||
|
||||
ls --color: hard link highlighting can be now disabled by changing the
|
||||
LS_COLORS environment variable. To disable it you can add something like
|
||||
this to your profile: eval `dircolors | sed s/hl=[^:]*:/hl=:/`
|
||||
|
||||
|
||||
* Noteworthy changes in release 7.1 (2009-02-21) [stable]
|
||||
|
||||
** New features
|
||||
|
||||
Add extended attribute support available on certain filesystems like ext2
|
||||
and XFS.
|
||||
cp: Tries to copy xattrs when --preserve=xattr or --preserve=all specified
|
||||
mv: Always tries to copy xattrs
|
||||
install: Never copies xattrs
|
||||
|
||||
cp and mv accept a new option, --no-clobber (-n): silently refrain
|
||||
from overwriting any existing destination file
|
||||
|
||||
dd accepts iflag=cio and oflag=cio to open the file in CIO (concurrent I/O)
|
||||
mode where this feature is available.
|
||||
|
||||
install accepts a new option, --compare (-C): compare each pair of source
|
||||
and destination files, and if the destination has identical content and
|
||||
any specified owner, group, permissions, and possibly SELinux context, then
|
||||
do not modify the destination at all.
|
||||
|
||||
ls --color now highlights hard linked files, too
|
||||
|
||||
stat -f recognizes the Lustre file system type
|
||||
|
||||
** Bug fixes
|
||||
|
||||
chgrp, chmod, chown --silent (--quiet, -f) no longer print some diagnostics
|
||||
[bug introduced in coreutils-5.1]
|
||||
|
||||
cp uses much less memory in some situations
|
||||
|
||||
cp -a now correctly tries to preserve SELinux context (announced in 6.9.90),
|
||||
doesn't inform about failure, unlike with --preserve=all
|
||||
|
||||
du --files0-from=FILE no longer reads all of FILE into RAM before
|
||||
processing the first file name
|
||||
|
||||
seq 9223372036854775807 9223372036854775808 now prints only two numbers
|
||||
on systems with extended long double support and good library support.
|
||||
Even with this patch, on some systems, it still produces invalid output,
|
||||
from 3 to at least 1026 lines long. [bug introduced in coreutils-6.11]
|
||||
|
||||
seq -w now accounts for a decimal point added to the last number
|
||||
to correctly print all numbers to the same width.
|
||||
|
||||
wc --files0-from=FILE no longer reads all of FILE into RAM, before
|
||||
processing the first file name, unless the list of names is known
|
||||
to be small enough.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
cp and mv: the --reply={yes,no,query} option has been removed.
|
||||
Using it has elicited a warning for the last three years.
|
||||
|
||||
dd: user specified offsets that are too big are handled better.
|
||||
Previously, erroneous parameters to skip and seek could result
|
||||
in redundant reading of the file with no warnings or errors.
|
||||
|
||||
du: -H (initially equivalent to --si) is now equivalent to
|
||||
--dereference-args, and thus works as POSIX requires
|
||||
|
||||
shred: now does 3 overwrite passes by default rather than 25.
|
||||
|
||||
ls -l now marks SELinux-only files with the less obtrusive '.',
|
||||
rather than '+'. A file with any other combination of MAC and ACL
|
||||
is still marked with a '+'.
|
||||
|
||||
|
||||
* Noteworthy changes in release 7.0 (2008-10-05) [beta]
|
||||
|
||||
** New programs
|
||||
|
||||
timeout: Run a command with bounded time.
|
||||
truncate: Set the size of a file to a specified size.
|
||||
|
||||
** New features
|
||||
|
||||
chgrp, chmod, chown, chcon, du, rm: now all display linear performance,
|
||||
even when operating on million-entry directories on ext3 and ext4 file
|
||||
systems. Before, they would exhibit O(N^2) performance, due to linear
|
||||
per-entry seek time cost when operating on entries in readdir order.
|
||||
Rm was improved directly, while the others inherit the improvement
|
||||
from the newer version of fts in gnulib.
|
||||
|
||||
comm now verifies that the inputs are in sorted order. This check can
|
||||
be turned off with the --nocheck-order option.
|
||||
|
||||
comm accepts new option, --output-delimiter=STR, that allows specification
|
||||
of an output delimiter other than the default single TAB.
|
||||
|
||||
cp and mv: the deprecated --reply=X option is now also undocumented.
|
||||
|
||||
dd accepts iflag=fullblock to make it accumulate full input blocks.
|
||||
With this new option, after a short read, dd repeatedly calls read,
|
||||
until it fills the incomplete block, reaches EOF, or encounters an error.
|
||||
|
||||
df accepts a new option --total, which produces a grand total of all
|
||||
arguments after all arguments have been processed.
|
||||
|
||||
If the GNU MP library is available at configure time, factor and
|
||||
expr support arbitrarily large numbers. Pollard's rho algorithm is
|
||||
used to factor large numbers.
|
||||
|
||||
install accepts a new option --strip-program to specify the program used to
|
||||
strip binaries.
|
||||
|
||||
ls now colorizes files with capabilities if libcap is available
|
||||
|
||||
ls -v now uses filevercmp function as sort predicate (instead of strverscmp)
|
||||
|
||||
md5sum now accepts the new option, --quiet, to suppress the printing of
|
||||
'OK' messages. sha1sum, sha224sum, sha384sum, and sha512sum accept it, too.
|
||||
|
||||
sort accepts a new option, --files0-from=F, that specifies a file
|
||||
containing a null-separated list of files to sort. This list is used
|
||||
instead of filenames passed on the command-line to avoid problems with
|
||||
maximum command-line (argv) length.
|
||||
|
||||
sort accepts a new option --batch-size=NMERGE, where NMERGE
|
||||
represents the maximum number of inputs that will be merged at once.
|
||||
When processing more than NMERGE inputs, sort uses temporary files.
|
||||
|
||||
sort accepts a new option --version-sort (-V, --sort=version),
|
||||
specifying that ordering is to be based on filevercmp.
|
||||
|
||||
** Bug fixes
|
||||
|
||||
chcon --verbose now prints a newline after each message
|
||||
|
||||
od no longer suffers from platform bugs in printf(3). This is
|
||||
probably most noticeable when using 'od -tfL' to print long doubles.
|
||||
|
||||
seq -0.1 0.1 2 now prints 2,0 when locale's decimal point is ",".
|
||||
Before, it would mistakenly omit the final number in that example.
|
||||
|
||||
shuf honors the --zero-terminated (-z) option, even with --input-range=LO-HI
|
||||
|
||||
shuf --head-count is now correctly documented. The documentation
|
||||
previously claimed it was called --head-lines.
|
||||
|
||||
** Improvements
|
||||
|
||||
Improved support for access control lists (ACLs): On MacOS X, Solaris 7..10,
|
||||
HP-UX 11, Tru64, AIX, IRIX 6.5, and Cygwin, "ls -l" now displays the presence
|
||||
of an ACL on a file via a '+' sign after the mode, and "cp -p" copies ACLs.
|
||||
|
||||
join has significantly better performance due to better memory management
|
||||
|
||||
ls now uses constant memory when not sorting and using one_per_line format,
|
||||
no matter how many files are in a given directory
|
||||
|
||||
od now aligns fields across lines when printing multiple -t
|
||||
specifiers, and no longer prints fields that resulted entirely from
|
||||
padding the input out to the least common multiple width.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
stat's --context (-Z) option has always been a no-op.
|
||||
Now it evokes a warning that it is obsolete and will be removed.
|
||||
|
||||
|
||||
* Noteworthy changes in release 6.12 (2008-05-31) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
chcon, runcon: --help output now includes the bug-reporting address
|
||||
|
||||
cp -p copies permissions more portably. For example, on MacOS X 10.5,
|
||||
"cp -p some-fifo some-file" no longer fails while trying to copy the
|
||||
permissions from the some-fifo argument.
|
||||
|
||||
id with no options now prints the SELinux context only when invoked
|
||||
with no USERNAME argument.
|
||||
|
||||
id and groups once again print the AFS-specific nameless group-ID (PAG).
|
||||
Printing of such large-numbered, kernel-only (not in /etc/group) group-IDs
|
||||
was suppressed in 6.11 due to ignorance that they are useful.
|
||||
|
||||
uniq: avoid subtle field-skipping malfunction due to isblank misuse.
|
||||
In some locales on some systems, isblank(240) (aka  ) is nonzero.
|
||||
On such systems, uniq --skip-fields=N would fail to skip the proper
|
||||
number of fields for some inputs.
|
||||
|
||||
tac: avoid segfault with --regex (-r) and multiple files, e.g.,
|
||||
"echo > x; tac -r x x". [bug present at least in textutils-1.8b, from 1992]
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
install once again sets SELinux context, when possible
|
||||
[it was deliberately disabled in 6.9.90]
|
||||
|
||||
|
||||
* Noteworthy changes in release 6.11 (2008-04-19) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
configure --enable-no-install-program=groups now works.
|
||||
|
||||
"cp -fR fifo E" now succeeds with an existing E. Before this fix, using
|
||||
-fR to copy a fifo or "special" file onto an existing file would fail
|
||||
with EEXIST. Now, it once again unlinks the destination before trying
|
||||
to create the destination file. [bug introduced in coreutils-5.90]
|
||||
|
||||
dd once again works with unnecessary options like if=/dev/stdin and
|
||||
of=/dev/stdout. [bug introduced in fileutils-4.0h]
|
||||
|
||||
id now uses getgrouplist, when possible. This results in
|
||||
much better performance when there are many users and/or groups.
|
||||
|
||||
ls no longer segfaults on files in /proc when linked with an older version
|
||||
of libselinux. E.g., ls -l /proc/sys would dereference a NULL pointer.
|
||||
|
||||
md5sum would segfault for invalid BSD-style input, e.g.,
|
||||
echo 'MD5 (' | md5sum -c - Now, md5sum ignores that line.
|
||||
sha1sum, sha224sum, sha384sum, and sha512sum are affected, too.
|
||||
[bug introduced in coreutils-5.1.0]
|
||||
|
||||
md5sum -c would accept a NUL-containing checksum string like "abcd\0..."
|
||||
and would unnecessarily read and compute the checksum of the named file,
|
||||
and then compare that checksum to the invalid one: guaranteed to fail.
|
||||
Now, it recognizes that the line is not valid and skips it.
|
||||
sha1sum, sha224sum, sha384sum, and sha512sum are affected, too.
|
||||
[bug present in the original version, in coreutils-4.5.1, 1995]
|
||||
|
||||
"mkdir -Z x dir" no longer segfaults when diagnosing invalid context "x"
|
||||
mkfifo and mknod would fail similarly. Now they're fixed.
|
||||
|
||||
mv would mistakenly unlink a destination file before calling rename,
|
||||
when the destination had two or more hard links. It no longer does that.
|
||||
[bug introduced in coreutils-5.3.0]
|
||||
|
||||
"paste -d'\' file" no longer overruns memory (heap since coreutils-5.1.2,
|
||||
stack before then) [bug present in the original version, in 1992]
|
||||
|
||||
"pr -e" with a mix of backspaces and TABs no longer corrupts the heap
|
||||
[bug present in the original version, in 1992]
|
||||
|
||||
"ptx -F'\' long-file-name" would overrun a malloc'd buffer and corrupt
|
||||
the heap. That was triggered by a lone backslash (or odd number of them)
|
||||
at the end of the option argument to --flag-truncation=STRING (-F),
|
||||
--word-regexp=REGEXP (-W), or --sentence-regexp=REGEXP (-S).
|
||||
|
||||
"rm -r DIR" would mistakenly declare to be "write protected" -- and
|
||||
prompt about -- full DIR-relative names longer than MIN (PATH_MAX, 8192).
|
||||
|
||||
"rmdir --ignore-fail-on-non-empty" detects and ignores the failure
|
||||
in more cases when a directory is empty.
|
||||
|
||||
"seq -f % 1" would issue the erroneous diagnostic "seq: memory exhausted"
|
||||
rather than reporting the invalid string format.
|
||||
[bug introduced in coreutils-6.0]
|
||||
|
||||
** New features
|
||||
|
||||
join now verifies that the inputs are in sorted order. This check can
|
||||
be turned off with the --nocheck-order option.
|
||||
|
||||
sort accepts the new option --sort=WORD, where WORD can be one of
|
||||
general-numeric, month, numeric or random. These are equivalent to the
|
||||
options --general-numeric-sort/-g, --month-sort/-M, --numeric-sort/-n
|
||||
and --random-sort/-R, resp.
|
||||
|
||||
** Improvements
|
||||
|
||||
id and groups work around an AFS-related bug whereby those programs
|
||||
would print an invalid group number, when given no user-name argument.
|
||||
|
||||
ls --color no longer outputs unnecessary escape sequences
|
||||
|
||||
seq gives better diagnostics for invalid formats.
|
||||
|
||||
** Portability
|
||||
|
||||
rm now works properly even on systems like BeOS and Haiku,
|
||||
which have negative errno values.
|
||||
|
||||
** Consistency
|
||||
|
||||
install, mkdir, rmdir and split now write --verbose output to stdout,
|
||||
not to stderr.
|
||||
|
||||
|
||||
* Noteworthy changes in release 6.10 (2008-01-22) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
Fix a non-portable use of sed in configure.ac.
|
||||
[bug introduced in coreutils-6.9.92]
|
||||
|
||||
|
||||
* Noteworthy changes in release 6.9.92 (2008-01-12) [beta]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp --parents no longer uses uninitialized memory when restoring the
|
||||
permissions of a just-created destination directory.
|
||||
[bug introduced in coreutils-6.9.90]
|
||||
|
||||
tr's case conversion would fail in a locale with differing numbers
|
||||
of lower case and upper case characters. E.g., this would fail:
|
||||
env LC_CTYPE=en_US.ISO-8859-1 tr '[:upper:]' '[:lower:]'
|
||||
[bug introduced in coreutils-6.9.90]
|
||||
|
||||
** Improvements
|
||||
|
||||
"touch -d now writable-but-owned-by-someone-else" now succeeds
|
||||
whenever that same command would succeed without "-d now".
|
||||
Before, it would work fine with no -d option, yet it would
|
||||
fail with the ostensibly-equivalent "-d now".
|
||||
|
||||
|
||||
* Noteworthy changes in release 6.9.91 (2007-12-15) [beta]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
"ls -l" would not output "+" on SELinux hosts unless -Z was also given.
|
||||
|
||||
"rm" would fail to unlink a non-directory when run in an environment
|
||||
in which the user running rm is capable of unlinking a directory.
|
||||
[bug introduced in coreutils-6.9]
|
||||
|
||||
|
||||
* Noteworthy changes in release 6.9.90 (2007-12-01) [beta]
|
||||
|
||||
** New programs
|
||||
|
||||
arch: equivalent to uname -m, not installed by default
|
||||
But don't install this program on Solaris systems.
|
||||
|
||||
chcon: change the SELinux security context of a file
|
||||
|
||||
mktemp: create a temporary file or directory (or names)
|
||||
|
||||
runcon: run a program in a different SELinux security context
|
||||
|
||||
** Programs no longer installed by default
|
||||
|
||||
hostname, su
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
cp, by default, refuses to copy through a dangling destination symlink
|
||||
Set POSIXLY_CORRECT if you require the old, risk-prone behavior.
|
||||
|
||||
pr -F no longer suppresses the footer or the first two blank lines in
|
||||
the header. This is for compatibility with BSD and POSIX.
|
||||
|
||||
tr now warns about an unescaped backslash at end of string.
|
||||
The tr from coreutils-5.2.1 and earlier would fail for such usage,
|
||||
and Solaris' tr ignores that final byte.
|
||||
|
||||
** New features
|
||||
|
||||
Add SELinux support, based on the patch from Fedora:
|
||||
* cp accepts new --preserve=context option.
|
||||
* "cp -a" works with SELinux:
|
||||
Now, cp -a attempts to preserve context, but failure to do so does
|
||||
not change cp's exit status. However "cp --preserve=context" is
|
||||
similar, but failure *does* cause cp to exit with nonzero status.
|
||||
* install accepts new "-Z, --context=C" option.
|
||||
* id accepts new "-Z" option.
|
||||
* stat honors the new %C format directive: SELinux security context string
|
||||
* ls accepts a slightly modified -Z option.
|
||||
* ls: contrary to Fedora version, does not accept --lcontext and --scontext
|
||||
|
||||
The following commands and options now support the standard size
|
||||
suffixes kB, M, MB, G, GB, and so on for T, P, Y, Z, and Y:
|
||||
head -c, head -n, od -j, od -N, od -S, split -b, split -C,
|
||||
tail -c, tail -n.
|
||||
|
||||
cp -p tries to preserve the GID of a file even if preserving the UID
|
||||
is not possible.
|
||||
|
||||
uniq accepts a new option: --zero-terminated (-z). As with the sort
|
||||
option of the same name, this makes uniq consume and produce
|
||||
NUL-terminated lines rather than newline-terminated lines.
|
||||
|
||||
wc no longer warns about character decoding errors in multibyte locales.
|
||||
This means for example that "wc /bin/sh" now produces normal output
|
||||
(though the word count will have no real meaning) rather than many
|
||||
error messages.
|
||||
|
||||
** New build options
|
||||
|
||||
By default, "make install" no longer attempts to install (or even build) su.
|
||||
To change that, use ./configure --enable-install-program=su.
|
||||
If you also want to install the new "arch" program, do this:
|
||||
./configure --enable-install-program=arch,su.
|
||||
|
||||
You can inhibit the compilation and installation of selected programs
|
||||
at configure time. For example, to avoid installing "hostname" and
|
||||
"uptime", use ./configure --enable-no-install-program=hostname,uptime
|
||||
Note: currently, "make check" passes, even when arch and su are not
|
||||
built (that's the new default). However, if you inhibit the building
|
||||
and installation of other programs, don't be surprised if some parts
|
||||
of "make check" fail.
|
||||
|
||||
** Remove deprecated options
|
||||
|
||||
df no longer accepts the --kilobytes option.
|
||||
du no longer accepts the --kilobytes or --megabytes options.
|
||||
ls no longer accepts the --kilobytes option.
|
||||
ptx longer accepts the --copyright option.
|
||||
who no longer accepts -i or --idle.
|
||||
|
||||
** Improved robustness
|
||||
|
||||
ln -f can no longer silently clobber a just-created hard link.
|
||||
In some cases, ln could be seen as being responsible for data loss.
|
||||
For example, given directories a, b, c, and files a/f and b/f, we
|
||||
should be able to do this safely: ln -f a/f b/f c && rm -f a/f b/f
|
||||
However, before this change, ln would succeed, and thus cause the
|
||||
loss of the contents of a/f.
|
||||
|
||||
stty no longer silently accepts certain invalid hex values
|
||||
in its 35-colon command-line argument
|
||||
|
||||
** Bug fixes
|
||||
|
||||
chmod no longer ignores a dangling symlink. Now, chmod fails
|
||||
with a diagnostic saying that it cannot operate on such a file.
|
||||
[bug introduced in coreutils-5.1.0]
|
||||
|
||||
cp attempts to read a regular file, even if stat says it is empty.
|
||||
Before, "cp /proc/cpuinfo c" would create an empty file when the kernel
|
||||
reports stat.st_size == 0, while "cat /proc/cpuinfo > c" would "work",
|
||||
and create a nonempty one. [bug introduced in coreutils-6.0]
|
||||
|
||||
cp --parents no longer mishandles symlinks to directories in file
|
||||
name components in the source, e.g., "cp --parents symlink/a/b d"
|
||||
no longer fails. Also, 'cp' no longer considers a destination
|
||||
symlink to be the same as the referenced file when copying links
|
||||
or making backups. For example, if SYM is a symlink to FILE,
|
||||
"cp -l FILE SYM" now reports an error instead of silently doing
|
||||
nothing. The behavior of 'cp' is now better documented when the
|
||||
destination is a symlink.
|
||||
|
||||
"cp -i --update older newer" no longer prompts; same for mv
|
||||
|
||||
"cp -i" now detects read errors on standard input, and no longer consumes
|
||||
too much seekable input; same for ln, install, mv, and rm.
|
||||
|
||||
cut now diagnoses a range starting with zero (e.g., -f 0-2) as invalid;
|
||||
before, it would treat it as if it started with 1 (-f 1-2).
|
||||
|
||||
"cut -f 2-0" now fails; before, it was equivalent to "cut -f 2-"
|
||||
|
||||
cut now diagnoses the '-' in "cut -f -" as an invalid range, rather
|
||||
than interpreting it as the unlimited range, "1-".
|
||||
|
||||
date -d now accepts strings of the form e.g., 'YYYYMMDD +N days',
|
||||
in addition to the usual 'YYYYMMDD N days'.
|
||||
|
||||
du -s now includes the size of any stat'able-but-inaccessible directory
|
||||
in the total size.
|
||||
|
||||
du (without -s) prints whatever it knows of the size of an inaccessible
|
||||
directory. Before, du would print nothing for such a directory.
|
||||
|
||||
ls -x DIR would sometimes output the wrong string in place of the
|
||||
first entry. [introduced in coreutils-6.8]
|
||||
|
||||
ls --color would mistakenly color a dangling symlink as if it were
|
||||
a regular symlink. This would happen only when the dangling symlink
|
||||
was not a command-line argument and in a directory with d_type support.
|
||||
[introduced in coreutils-6.0]
|
||||
|
||||
ls --color, (with a custom LS_COLORS envvar value including the
|
||||
ln=target attribute) would mistakenly output the string "target"
|
||||
before the name of each symlink. [introduced in coreutils-6.0]
|
||||
|
||||
od's --skip (-j) option now works even when the kernel says that a
|
||||
nonempty regular file has stat.st_size = 0. This happens at least
|
||||
with files in /proc and linux-2.6.22.
|
||||
|
||||
"od -j L FILE" had a bug: when the number of bytes to skip, L, is exactly
|
||||
the same as the length of FILE, od would skip *no* bytes. When the number
|
||||
of bytes to skip is exactly the sum of the lengths of the first N files,
|
||||
od would skip only the first N-1 files. [introduced in textutils-2.0.9]
|
||||
|
||||
./printf %.10000000f 1 could get an internal ENOMEM error and generate
|
||||
no output, yet erroneously exit with status 0. Now it diagnoses the error
|
||||
and exits with nonzero status. [present in initial implementation]
|
||||
|
||||
seq no longer mishandles obvious cases like "seq 0 0.000001 0.000003",
|
||||
so workarounds like "seq 0 0.000001 0.0000031" are no longer needed.
|
||||
|
||||
seq would mistakenly reject some valid format strings containing %%,
|
||||
and would mistakenly accept some invalid ones. e.g., %g%% and %%g, resp.
|
||||
|
||||
"seq .1 .1" would mistakenly generate no output on some systems
|
||||
|
||||
Obsolete sort usage with an invalid ordering-option character, e.g.,
|
||||
"env _POSIX2_VERSION=199209 sort +1x" no longer makes sort free an
|
||||
invalid pointer [introduced in coreutils-6.5]
|
||||
|
||||
sorting very long lines (relative to the amount of available memory)
|
||||
no longer provokes unaligned memory access
|
||||
|
||||
split --line-bytes=N (-C N) no longer creates an empty file
|
||||
[this bug is present at least as far back as textutils-1.22 (Jan, 1997)]
|
||||
|
||||
tr -c no longer aborts when translating with Set2 larger than the
|
||||
complement of Set1. [present in the original version, in 1992]
|
||||
|
||||
tr no longer rejects an unmatched [:lower:] or [:upper:] in SET1.
|
||||
[present in the original version]
|
||||
|
||||
|
||||
* Noteworthy changes in release 6.9 (2007-03-22) [stable]
|
||||
* Noteworthy changes in release 6.8+ (????-??-??) [not-unstable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
@@ -871,6 +13,7 @@ GNU coreutils NEWS -*- outline -*-
|
||||
Using pr -m -s (i.e. merging files, with TAB as the output separator)
|
||||
no longer inserts extraneous spaces between output columns.
|
||||
|
||||
|
||||
* Noteworthy changes in release 6.8 (2007-02-24) [not-unstable]
|
||||
|
||||
** Bug fixes
|
||||
@@ -908,33 +51,11 @@ GNU coreutils NEWS -*- outline -*-
|
||||
pwd and "readlink -e ." no longer fail unnecessarily when a parent
|
||||
directory is unreadable.
|
||||
|
||||
rm (without -f) could prompt when it shouldn't, or fail to prompt
|
||||
when it should, when operating on a full name longer than 511 bytes
|
||||
and getting an ENOMEM error while trying to form the long name.
|
||||
|
||||
rm could mistakenly traverse into the wrong directory under unusual
|
||||
conditions: when a full name longer than 511 bytes specifies a search-only
|
||||
directory, and when forming that name fails with ENOMEM, rm would attempt
|
||||
to open a truncated-to-511-byte name with the first five bytes replaced
|
||||
with "[...]". If such a directory were to actually exist, rm would attempt
|
||||
to remove it.
|
||||
|
||||
"rm -rf /etc/passwd" (run by non-root) now prints a diagnostic.
|
||||
Before it would print nothing.
|
||||
|
||||
"rm --interactive=never F" no longer prompts for an unwritable F
|
||||
|
||||
"rm -rf D" would emit an misleading diagnostic when failing to
|
||||
remove a symbolic link within the unwritable directory, D.
|
||||
Introduced in coreutils-6.0. Similarly, when a cross-partition
|
||||
"mv" fails because the source directory is unwritable, it now gives
|
||||
a reasonable diagnostic. Before, this would print
|
||||
$ mkdir /tmp/x; touch /tmp/x/y; chmod -w /tmp/x;
|
||||
$ test $(stat -c %d /tmp/x) -ne $(stat -c %d .) && mv /tmp/x/y .
|
||||
mv: cannot remove `/tmp/x/y': Not a directory
|
||||
Now it prints this:
|
||||
mv: cannot remove `/tmp/x/y': Permission denied.
|
||||
|
||||
** New features
|
||||
|
||||
sort's new --compress-program=PROG option specifies a compression
|
||||
@@ -966,7 +87,7 @@ GNU coreutils NEWS -*- outline -*-
|
||||
Fix similar problems with cp options like -p that imply
|
||||
--preserve=ownership, with install -d when combined with either -o
|
||||
or -g, and with mv when copying across file system boundaries.
|
||||
This bug affects all versions of coreutils through 6.6.
|
||||
This bug affects coreutils 6.0 through 6.6.
|
||||
|
||||
du --one-file-system (-x) would skip subdirectories of any directory
|
||||
listed as second or subsequent command line argument. This bug affects
|
||||
@@ -2721,7 +1842,8 @@ packages, see ./old/*/NEWS.
|
||||
|
||||
========================================================================
|
||||
|
||||
Copyright (C) 2001-2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2 or
|
||||
|
||||
84
README
84
README
@@ -7,21 +7,18 @@ arbitrary limits.
|
||||
|
||||
The programs that can be built with this package are:
|
||||
|
||||
[ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
|
||||
[ base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
|
||||
csplit cut date dd df dir dircolors dirname du echo env expand expr
|
||||
factor false fmt fold groups head hostid hostname id install join kill
|
||||
link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup
|
||||
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
|
||||
runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum shred shuf
|
||||
sleep sort split stat stdbuf stty su sum sync tac tail tee test timeout
|
||||
touch tr true truncate tsort tty uname unexpand uniq unlink uptime users
|
||||
vdir wc who whoami yes
|
||||
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.
|
||||
|
||||
If you obtained this file as part of a "git clone", then see the
|
||||
README-hacking file. If this file came to you as part of a tar archive,
|
||||
then see the file INSTALL for compilation and installation instructions.
|
||||
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
|
||||
@@ -41,7 +38,7 @@ 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 commit logs.
|
||||
attributed in the ChangeLog files.
|
||||
|
||||
And thanks to the following people who have provided accounts for
|
||||
portability testing on many different types of systems: Bob Proulx,
|
||||
@@ -58,28 +55,9 @@ 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.
|
||||
|
||||
|
||||
*****************************************
|
||||
On Mac OS X 10.5.1 (Darwin 9.1), test failure
|
||||
-----------------------------------------
|
||||
|
||||
Mac OS X 10.5.1 (Darwin 9.1) provides only partial (and incompatible)
|
||||
ACL support, so although "./configure && make" succeeds, "make check"
|
||||
exposes numerous failures. The solution is to turn off ACL support
|
||||
manually via "./configure --disable-acl". For details, see
|
||||
<http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/12292/focus=12318>.
|
||||
|
||||
|
||||
*****************************************
|
||||
Test failure with NLS and gettext <= 0.17
|
||||
-----------------------------------------
|
||||
|
||||
Due to a conflict between libintl.h and gnulib's new xprintf module,
|
||||
when you configure with NLS support, and with a gettext installation
|
||||
older than 0.17.1 (not yet released, at the time of this writing),
|
||||
then some tests fail, at least on NetBSD 1.6. To work around it in
|
||||
the mean time, you can configure with --disable-nls. For details,
|
||||
see <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/12015/>.
|
||||
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).
|
||||
|
||||
|
||||
***********************
|
||||
@@ -92,15 +70,11 @@ compiler, due to the use of declarations after non-declaration statements
|
||||
in several files in src/. There is code in configure to find and, if
|
||||
possible, enable an appropriate compiler. However, if configure doesn't
|
||||
find a C99 compiler, it continues nonetheless, and your build will fail.
|
||||
If that happens, simply[*] apply the included patch using the following
|
||||
If that happens, simply apply the included patch using the following
|
||||
command, and then run make again:
|
||||
|
||||
cd src && patch < c99-to-c89.diff
|
||||
|
||||
[*] however, as of coreutils-7.1, the "c99-to-c89.diff" file is no longer
|
||||
maintained, so even if the patches still apply, the result will be an
|
||||
incomplete conversion. It's been 10 years. Get a decent compiler! ;-)
|
||||
|
||||
|
||||
***********************
|
||||
HPUX 11.x build failure
|
||||
@@ -150,7 +124,7 @@ 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 PATH="$PATH" NON_ROOT_USERNAME=$USER make -k check-root
|
||||
sudo env NON_ROOT_USERNAME=$USER make -k 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
|
||||
@@ -165,17 +139,17 @@ Reporting bugs:
|
||||
IMPORTANT: if you take the time to report a test failure,
|
||||
please be sure to include the output of running `make check'
|
||||
in verbose mode for each failing test. For example,
|
||||
if the test that fails is tests/misc/df, then you would
|
||||
run this command:
|
||||
if the test that fails is tests/mv/hard-link-1, then you
|
||||
would run this command:
|
||||
|
||||
(cd tests && make check TESTS=misc/df VERBOSE=yes) >> log 2>&1
|
||||
env VERBOSE=yes make check -C tests/mv TESTS=hard-link-1 >> log 2>&1
|
||||
|
||||
For some tests, you can get even more detail by adding DEBUG=yes.
|
||||
Then include the contents of the file `log' in your bug report.
|
||||
For some tests, you can get even more detail by including
|
||||
DEBUG=yes in the environment:
|
||||
|
||||
Send bug reports, questions, comments, etc. to bug-coreutils@gnu.org.
|
||||
If you would like to suggest a patch, see the files README-hacking
|
||||
and HACKING for tips.
|
||||
env DEBUG=yes VERBOSE=yes make check -C tests/mv TESTS=hard-link-1 >> log 2>&1
|
||||
|
||||
and then include the contents of the file `log' in your bug report.
|
||||
|
||||
***************************************
|
||||
|
||||
@@ -189,13 +163,14 @@ 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 public repository), an explanation for why the patch is
|
||||
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.
|
||||
Here are instructions for checking out the latest development sources:
|
||||
Instructions for checking out the latest source via CVS are here:
|
||||
|
||||
http://savannah.gnu.org/cvs/?group=coreutils
|
||||
|
||||
http://savannah.gnu.org/git/?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
|
||||
@@ -213,7 +188,13 @@ subtle bugs.
|
||||
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 the tools listed in bootstrap.conf's buildreq string.
|
||||
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.
|
||||
|
||||
All of these programs except `test' recognize the `--version' option.
|
||||
When reporting bugs, please include in the subject line both the package
|
||||
@@ -229,7 +210,8 @@ the address on the last line of --help output.
|
||||
|
||||
========================================================================
|
||||
|
||||
Copyright (C) 1998, 2002-2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 2002, 2003, 2004, 2005, 2006 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2 or
|
||||
|
||||
@@ -2,47 +2,50 @@
|
||||
|
||||
These notes intend to help people working on the checked-out sources.
|
||||
These requirements do not apply when building from a distribution tarball.
|
||||
See also HACKING for more detailed coreutils contribution guidelines.
|
||||
|
||||
* Requirements
|
||||
|
||||
We've opted to keep only the highest-level sources in the GIT repository.
|
||||
This eases our maintenance burden, (fewer merges etc.), but imposes more
|
||||
requirements on anyone wishing to build from the just-checked-out sources.
|
||||
Note the requirements to build the released archive are much less and
|
||||
are just the requirements of the standard ./configure && make procedure.
|
||||
Specific development tools and versions will be checked for and listed by
|
||||
the bootstrap script. See README-prereq for specific notes on obtaining
|
||||
these prerequisite tools.
|
||||
For example, you have to use the latest stable versions of the maintainer
|
||||
tools we depend upon, including:
|
||||
|
||||
- Automake <http://www.gnu.org/software/automake/>
|
||||
- Autoconf <http://www.gnu.org/software/autoconf/>
|
||||
- Bison <http://www.gnu.org/software/bison/>
|
||||
- Gettext <http://www.gnu.org/software/gettext/>
|
||||
- Gzip <http://www.gnu.org/software/gzip/>
|
||||
- Tar <http://www.gnu.org/software/tar/>
|
||||
- Wget <http://www.gnu.org/software/wget/>
|
||||
|
||||
As of this writing, the latest stable version of Gzip is 1.2.4 but we
|
||||
suggest using test version 1.3.5 (or later, if one becomes available).
|
||||
|
||||
Valgrind <http://valgrind.org/> is also highly recommended, if
|
||||
Valgrind supports your architecture. See also README-valgrind.
|
||||
Valgrind supports your architecture.
|
||||
|
||||
While building from a just-cloned source tree may require installing a
|
||||
few prerequisites, later, a plain `git pull && make' should be sufficient.
|
||||
Only building the initial full source tree will be a bit painful.
|
||||
Later, a plain `git-pull && make' should be sufficient.
|
||||
|
||||
* First GIT checkout
|
||||
|
||||
You can get a copy of the source repository like this:
|
||||
Obviously, if you are reading these notes, you did manage to check out
|
||||
this package from GIT. The next step is to get other files needed to
|
||||
build, which are extracted from other source packages:
|
||||
|
||||
$ git clone git://git.sv.gnu.org/coreutils
|
||||
$ cd coreutils
|
||||
|
||||
The next step is to get and check other files needed to build,
|
||||
which are extracted from other source packages:
|
||||
|
||||
$ ./bootstrap
|
||||
$ ./bootstrap
|
||||
|
||||
And there you are! Just
|
||||
|
||||
$ ./configure #[--enable-gcc-warnings]
|
||||
$ make
|
||||
$ make check
|
||||
$ ./configure
|
||||
$ make
|
||||
$ make check
|
||||
|
||||
At this point, there should be no difference between your local copy,
|
||||
and the GIT master copy:
|
||||
|
||||
$ git diff
|
||||
$ git-diff
|
||||
|
||||
should output no difference.
|
||||
|
||||
@@ -50,12 +53,12 @@ Enjoy!
|
||||
|
||||
-----
|
||||
|
||||
Copyright (C) 2002-2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002-2007 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
@@ -63,4 +66,6 @@ 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, see <http://www.gnu.org/licenses/>.
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301, USA.
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
As of 2002-09-01, the GNU fileutils, textutils, and sh-utils
|
||||
packages have been merged into one, called the GNU coreutils.
|
||||
See http://www.gnu.org/software/coreutils/ for a description.
|
||||
Here's the FAQ list:
|
||||
|
||||
http://www.gnu.org/software/coreutils/faq/
|
||||
|
||||
For information on the mailing lists associated with the
|
||||
coreutils package, see these:
|
||||
@@ -13,6 +10,4 @@ coreutils package, see these:
|
||||
|
||||
mailing list archives are here:
|
||||
|
||||
http://news.gmane.org/gmane.comp.gnu.coreutils.announce
|
||||
http://news.gmane.org/gmane.comp.gnu.core-utils.bugs (up to the minute)
|
||||
http://mail.gnu.org/pipermail/bug-coreutils/ (updated every 12 hours)
|
||||
http://mail.gnu.org/pipermail/bug-coreutils/
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
This gives some notes on obtaining the tools required for development.
|
||||
I.E. the tools checked for by the bootstrap script and include:
|
||||
|
||||
- Autoconf <http://www.gnu.org/software/autoconf/>
|
||||
- Automake <http://www.gnu.org/software/automake/>
|
||||
- Bison <http://www.gnu.org/software/bison/>
|
||||
- Gettext <http://www.gnu.org/software/gettext/>
|
||||
- Git <http://git.or.cz/>
|
||||
- Gperf <http://www.gnu.org/software/gperf/>
|
||||
- Gzip <http://www.gnu.org/software/gzip/>
|
||||
- Perl <http://www.cpan.org/>
|
||||
- Rsync <http://samba.anu.edu.au/rsync/>
|
||||
- Tar <http://www.gnu.org/software/tar/>
|
||||
- Texinfo <http://www.gnu.org/software/texinfo/>
|
||||
|
||||
Note please try to install/build official packages for your system.
|
||||
If these are not available then one can make them available only to
|
||||
the coreutils build using the following instructions. Even if the
|
||||
official packages for your system are too old, please install them
|
||||
as they may be required to build the newer versions.
|
||||
|
||||
* autoconf *
|
||||
|
||||
# Note Autoconf 2.62 or newer is needed to build automake-1.11
|
||||
git clone --depth=1 git://git.sv.gnu.org/autoconf.git
|
||||
git checkout v2.62
|
||||
autoreconf -vi
|
||||
./configure --prefix=$HOME/coreutils/deps
|
||||
make install
|
||||
|
||||
* automake *
|
||||
|
||||
# Note help2man is required to build automake fully
|
||||
git clone git://git.sv.gnu.org/automake.git
|
||||
cd automake
|
||||
git checkout -b branch-1.11 --track origin/branch-1.11
|
||||
./bootstrap
|
||||
./configure --prefix=$HOME/coreutils/deps
|
||||
make install
|
||||
|
||||
coreutils uses XZ utils (successor to LZMA) to create
|
||||
a compressed distribution tarball. Using this feature of Automake
|
||||
requires version 1.10a or newer, as well as the xz program itself.
|
||||
|
||||
* xz *
|
||||
|
||||
git clone git://ctrl.tukaani.org/xz.git
|
||||
cd xz
|
||||
./autogen.sh
|
||||
./configure --prefix=$HOME/coreutils/deps
|
||||
make install
|
||||
|
||||
Now we can build coreutils as described in README-hacking
|
||||
as long as $PATH starts with $HOME/coreutils/deps/bin, which
|
||||
one can set for the current shell like:
|
||||
$ export PATH=$HOME/coreutils/deps/bin:$PATH
|
||||
@@ -1,97 +0,0 @@
|
||||
Here are most of the steps we (maintainers) follow when making a release.
|
||||
|
||||
* start from a clean, up-to-date git directory.
|
||||
|
||||
git checkout master; git pull
|
||||
|
||||
* Run ./configure && make maintainer-clean
|
||||
|
||||
* Ensure that the desired versions of autoconf, automake, bison, etc.
|
||||
are in your PATH. See the buildreq list in bootstrap.conf for
|
||||
the complete list.
|
||||
|
||||
* Ensure that you're on "master" with no uncommitted diffs.
|
||||
This should produce no output: git checkout master; git diff
|
||||
|
||||
* Run bootstrap: ./bootstrap
|
||||
|
||||
FIXME: enable excluded programs like arch? to get their manual pages?
|
||||
|
||||
* Pre-release testing:
|
||||
Ensure that make check syntax-check succeeds.
|
||||
On at least one SELinux-enabled (enforcing) and one non-SELinux system,
|
||||
run all tests, both root-only and regular.
|
||||
Run *all* non-root tests, including expensive and very expensive ones i.e.,
|
||||
run this: make -j1 check RUN_VERY_EXPENSIVE_TESTS=yes RUN_EXPENSIVE_TESTS=yes
|
||||
|
||||
Run the root-only tests:
|
||||
sudo env PATH="$PATH" NON_ROOT_USERNAME=$USER make -k check-root
|
||||
|
||||
* Run "make distcheck"
|
||||
|
||||
* Manually set the date, version number, and [stable/alpha/beta] on
|
||||
line 3 of NEWS, then do e.g.,:
|
||||
|
||||
v=8.0
|
||||
pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' Makefile)
|
||||
git commit -F <(printf 'version '$v'\n\n* NEWS: Record release date.\n') -a
|
||||
git tag -s -m "$pkg $v" v$v HEAD
|
||||
|
||||
* Run the following to create release tarballs. Your choice selects the
|
||||
corresponding upload-to destination in the emitted gnupload command.
|
||||
The different destinations are specified in cfg.mk. See the definitions
|
||||
of gnu_ftp_host-{alpha,beta,stable}.
|
||||
|
||||
# "TYPE" must be stable, beta or alpha
|
||||
make TYPE
|
||||
|
||||
* Test the tarball. copy it to a few odd-ball systems and ensure that
|
||||
it builds and passes all tests.
|
||||
|
||||
* While that's happening, write the release announcement that you will
|
||||
soon post.
|
||||
|
||||
Once all the builds and tests have passed,
|
||||
|
||||
* Run the gnupload command that was suggested by your "make major" run above.
|
||||
|
||||
* Wait a few minutes (maybe up to 30?) and then use the release URLs to
|
||||
download all tarball/signature pairs and use gpg --verify to ensure
|
||||
that they're all valid.
|
||||
|
||||
* Push the new tag:
|
||||
|
||||
v=$(cat .prev-version)
|
||||
git push origin tag v$v
|
||||
|
||||
* Send the gpg-signed announcement mail, e.g.,
|
||||
|
||||
To: info-gnu@gnu.org, coreutils-announce@gnu.org
|
||||
Cc: coordinator@translationproject.org, bug-coreutils@gnu.org
|
||||
Subject: coreutils-8.0 released [beta]
|
||||
|
||||
* Approve the announcement here:
|
||||
http://lists.gnu.org/mailman/admindb/coreutils-announce
|
||||
|
||||
* Announce it on Savannah, too:
|
||||
From here:
|
||||
https://savannah.gnu.org/projects/coreutils/
|
||||
click on the "submit news", then write something like the following:
|
||||
(If there is no such button, then enable "News" for the project via
|
||||
the Main -> "Select Features" menu item, or via this link:
|
||||
https://savannah.gnu.org/project/admin/editgroupfeatures.php?group=gzip)
|
||||
|
||||
Subject: coreutils-0.0 released [beta]
|
||||
The announcement is here:
|
||||
http://article.gmane.org/gmane.comp.gnu.core-utils.announce/54
|
||||
|
||||
Then go here to approve it:
|
||||
https://savannah.gnu.org/news/approve.php?group=coreutils
|
||||
|
||||
* After each non-alpha release, update the on-line manual accessible via
|
||||
|
||||
http://www.gnu.org/software/coreutils/manual/
|
||||
|
||||
by running this:
|
||||
|
||||
build-aux/gnu-web-doc-update
|
||||
@@ -1,11 +1,11 @@
|
||||
#! /bin/bash
|
||||
# Convert this package for use with valgrind.
|
||||
|
||||
# Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# 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,
|
||||
@@ -14,7 +14,9 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# Convert Makefile.am files:
|
||||
# find tests -name Makefile.am | xargs grep -wl PATH|xargs perl -pi -e \
|
||||
@@ -23,7 +25,7 @@
|
||||
# find tests -name Makefile.am|xargs grep -wl PATH|xargs perl -pi -e 's,src/vg,src,'
|
||||
#
|
||||
# Create this symlink for suppressions (this is no longer necessary,
|
||||
# with Linux kernel 2.6.9 and valgrind-2.2.0):
|
||||
# with linux-2.6.9 and valgrind-2.2.0):
|
||||
# ln -s $PWD/.vg-suppressions /tmp/cu-vg
|
||||
|
||||
# Create src/vg:
|
||||
|
||||
104
THANKS
104
THANKS
@@ -10,10 +10,8 @@ the bug-report mailing list (as seen on last line of e.g., cp --help).
|
||||
A Costa agcosta@gis.net
|
||||
Aaron Hawley ashawley@uvm.edu
|
||||
Achim Blumensath blume@corona.oche.de
|
||||
Adam Jimerson vendion@charter.net
|
||||
Adam Klein aklein@debian.org
|
||||
Adrian Bunk bunk@stusta.de
|
||||
AIDA Shinra shinra@j10n.org
|
||||
Akim Demaille demaille@inf.enst.fr
|
||||
Alain Magloire alain@qnx.com
|
||||
Alan Iwi iwi@atm.ox.ac.uk
|
||||
@@ -22,26 +20,20 @@ Albert Hopkins ahopkins@dynacare.com
|
||||
Alberto Accomazzi alberto@cfa0.harvard.edu
|
||||
aldomel aldomel@ix.netcom.com
|
||||
Alen Muzinic zveki@fly.cc.fer.hr
|
||||
Alexander Nguyen vinh@seas.ucla.edu
|
||||
Alexander V. Lukyanov lav@netis.ru
|
||||
Allen Hewes allen@decisiv.net
|
||||
Axel Dörfler axeld@pinc-software.de
|
||||
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 Frische andreasfrische@gmail.com
|
||||
Andreas Gruenbacher ag@bestbits.at
|
||||
Andreas Jaeger jaeger@gnu.org
|
||||
Andreas Luik luik@isa.de
|
||||
Andreas Schwab schwab@linux-m68k.org
|
||||
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 Church achurch@achurch.org
|
||||
Andrew Dalke dalke@bioreason.com
|
||||
Andrew Fabbro andrew@fabbro.org
|
||||
Andrew Pham andpha@us.ibm.com
|
||||
@@ -62,13 +54,11 @@ Augey Mikus mikus@dqc.org
|
||||
Aurelien Jarno aurel32@debian.org
|
||||
Austin Donnelly Austin.Donnelly@cl.cam.ac.uk
|
||||
Axel Kittenberger Anshil@gmx.net
|
||||
Barry Kelly http://barrkel.blogspot.com/
|
||||
Bauke Jan Douma bjdouma@xs4all.nl
|
||||
Ben Elliston bje@air.net.au
|
||||
Ben Harris bjh21@netbsd.org
|
||||
Bengt Martensson bengt@mathematik.uni-Bremen.de
|
||||
Benjamin Cutler cutlerbc@simla.colostate.edu
|
||||
Benno Schulenberg bensberg@justemail.net
|
||||
Bengt Martensson bengt@mathematik.uni-Bremen.de
|
||||
Bernard Giroud bernard.giroud@creditlyonnais.ch
|
||||
Bernd Eckenfels ecki@debian.org
|
||||
Bernd Leibing bernd.leibing@rz.uni-ulm.de
|
||||
@@ -76,10 +66,7 @@ Bernd Melchers melchers@cis.fu-berlin.de
|
||||
Bernhard Baehr bernhard.baehr@gmx.de
|
||||
Bernhard Gabler bernhard@uni-koblenz.de
|
||||
Bernhard Rosenkraenzer bero@redhat.de
|
||||
Bernhard Voelker bernhard.voelker@siemens-enterprise.com
|
||||
Bert Deknuydt Bert.Deknuydt@esat.kuleuven.ac.be
|
||||
Bert Wesarg bert.wesarg@googlemail.com
|
||||
Bill Brelsford wb@k2di.net
|
||||
Bill Peters peters@gaffel.as.arizona.edu
|
||||
Bjorn Helgaas helgaas@rsn.hp.com
|
||||
Bob McCracken kerouac@ravenet.com
|
||||
@@ -87,16 +74,12 @@ 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 M. Carlson sandals@crustytoothpaste.ath.cx
|
||||
Brian Silverman bsilverman@conceptxdesign.com
|
||||
Brian Youmans 3diff@gnu.org
|
||||
Bruce Korb bkorb@veritas.com
|
||||
Bruce Robertson brucer@theodolite.dyndns.org
|
||||
Bruno Haible haible@clisp.cons.org
|
||||
C de-Avillez hggdh2@gmail.com
|
||||
Carl Johnson carlj@cjlinux.home.org
|
||||
Carl Lowenstein cdl@mpl.UCSD.EDU
|
||||
Carl Roth roth@urs.us
|
||||
Carlos Canau Carlos.Canau@relay.puug.pt
|
||||
Charles Karney karney@pppl.gov
|
||||
Charles Randall crandall@matchlogic.com
|
||||
@@ -115,28 +98,21 @@ Christophe LYON christophe.lyon@st.com
|
||||
Chuck Hedrick hedrick@klinzhai.rutgers.edu
|
||||
Clark Morgan cmorgan@aracnet.com
|
||||
Clement Wang clem.wang@overture.com
|
||||
Cliff Miller cbm@whatexit.org
|
||||
Colin Plumb colin@nyx.net
|
||||
Colin Watson cjw44@riva.ucam.org
|
||||
Collin Rogowski collin@rogowski.de
|
||||
Cray-Cyber Project http://www.cray-cyber.org
|
||||
Cristian Cadar cristic@stanford.edu
|
||||
Cyril Bouthors cyril@bouthors.org
|
||||
Dale Scheetz dwarf@polaris.net
|
||||
Dameon G. Rogers dgr03@uark.edu
|
||||
Dan Hagerty hag@gnu.ai.it.edu
|
||||
Dan Jacobson jidanni@jidanni.org
|
||||
Dan Jacobson http://www.geocities.com/jidani
|
||||
Dan Pascu dan@services.iiruc.ro
|
||||
Daniel Bergstrom noa@melody.se
|
||||
Daniel Dunbar ddunbar@stanford.edu
|
||||
Daniel P. Berrangé berrange@redhat.com
|
||||
Dániel Varga danielv@axelero.hu
|
||||
Danny Levinson danny.levinson@overture.com
|
||||
Darrel Francis d.francis@cheerful.com
|
||||
Darren Salt ds@youmustbejoking.demon.co.uk
|
||||
Dave Beckett dajobe@dajobe.org
|
||||
David Alan Gilbert gilbertd@treblig.org
|
||||
David Bartley dtbartle@csclub.uwaterloo.ca
|
||||
David Dyck dcd@tc.fluke.COM
|
||||
David Eisner cradle@umd.edu
|
||||
David Flynn dav@chess.plus.com
|
||||
@@ -144,11 +120,8 @@ David Godfrey dave@delta.demon.co.uk
|
||||
David Luyer david_luyer@pacific.net.au
|
||||
David Madore david.madore@ens.fr
|
||||
David Malone dwmalone@cnri.dit.ie
|
||||
Davide Canova kc.canova@gmail.com
|
||||
Dawson Engler engler@stanford.edu
|
||||
Dean Gaudet dean-savannah@arctic.org
|
||||
Deepak Goel deego@gnufans.org
|
||||
Denis Excoffier denis.excoffier@airbus.com
|
||||
Dennis Henriksen opus@flamingo.osrl.dk
|
||||
Dennis Smit ds@nerds-incorporated.org
|
||||
Derek Clegg dclegg@next.com
|
||||
@@ -166,14 +139,10 @@ Duncan Roe duncanr@optimation.com.au
|
||||
Ed Avis ed@membled.com
|
||||
Edward Welbourne eddy@opera.com
|
||||
Edzer Pebesma Edzer.Pebesma@rivm.nl
|
||||
Egmont Koblinger egmont@uhulinux.hu
|
||||
Eirik Fuller eirik@hackrat.com
|
||||
Eivind eivindt@multinet.no
|
||||
Elbert Pol elbert.pol@gmail.com
|
||||
Eli Zaretskii eliz@is.elta.co.il
|
||||
Elias Pipping pipping@gentoo.org
|
||||
Emile LeBlanc leblanc@math.toronto.edu
|
||||
Erik Auerswald auerswal@unix-ag.uni-kl.de
|
||||
Eric Backus ericb@lsid.hp.com
|
||||
Eric Blake ebb9@byu.net
|
||||
Eric G. Miller egm2@jps.net
|
||||
@@ -187,7 +156,6 @@ Felix Rauch Valenti frauch@cse.unsw.edu.au
|
||||
Ferdinand fw@scenic.mine.nu
|
||||
Fletcher Mattox fletcher@cs.utexas.edu
|
||||
Florent Bayle florent@sarcelle.net
|
||||
Florian Schlichting fschlich@cis.fu-berlin.de
|
||||
Florin Iucha fiucha@hsys.mic.ro
|
||||
Francesco Montorsi fr_m@hotmail.com
|
||||
François Pinard pinard@iro.umontreal.ca
|
||||
@@ -200,29 +168,24 @@ 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 Johnson garyjohn@spk.agilent.com
|
||||
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
|
||||
Gerald Pfeifer gerald@pfeifer.com
|
||||
Gerhard Poul gpoul@gnu.org
|
||||
Germano Leichsenring germano@jedi.cs.kobe-u.ac.jp
|
||||
Glen Lenker glen.lenker@gmail.com
|
||||
Göran Uddeborg goeran@uddeborg.se
|
||||
Göran Uddeborg goeran@uddeborg.pp.se
|
||||
Guochun Shi gshi@ncsa.uiuc.edu
|
||||
GOTO Masanori gotom@debian.or.jp
|
||||
Greg Louis glouis@dynamicro.on.ca
|
||||
Greg McGary gkm@gnu.org
|
||||
Greg Metcalfe metcalfegreg@qwest.net
|
||||
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
|
||||
Guntram Blohm Extern.Guntram.Blohm@AUDI.DE
|
||||
H. J. Lu hjl@valinux.com
|
||||
Hans Ginzel hans@matfyz.cz
|
||||
Hans Lermen lermen@fgan.de
|
||||
@@ -231,7 +194,6 @@ Harald Dunkel harald.dunkel@t-online.de
|
||||
Harry Liu rliu@lek.ugcs.caltech.edu
|
||||
Harti Brandt brandt@fokus.fraunhofer.de
|
||||
Harvey Eneman Harvey.Eneman@oracle.com
|
||||
Heiko Marr h.marr@webmasters.de
|
||||
Helen Faulkner helen_ml_faulkner@yahoo.co.uk
|
||||
Herbert Xu herbert@gondor.apana.org.au
|
||||
Holger Berger hberger@ess.nec.de
|
||||
@@ -240,38 +202,29 @@ Hugh Daniel hugh@xanadu.com
|
||||
Ian Bruce ian.bruce@myrealbox.com
|
||||
Iain Calder ic56@rogers.com
|
||||
Ian Jackson ijackson@chiark.greenend.org.uk
|
||||
Ian Kent ikent@redhat.com
|
||||
Ian Lance Taylor ian@cygnus.com
|
||||
Ian Turner vectro@pipeline.com
|
||||
Iida Yosiaki iida@gnu.org
|
||||
Ilya N. Golubev gin@mo.msk.ru
|
||||
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 Lemley James.Lemley@acxiom.com
|
||||
James Hunt jamesodhunt@hotmail.com
|
||||
James Ralston ralston@pobox.com
|
||||
James R. Van Zandt jrvz@comcast.net
|
||||
James Sneeringer jvs@ocslink.com
|
||||
James Tanis jtt@soscorp.com
|
||||
James Youngman jay@gnu.org
|
||||
James Youngman james+usenet@free-lunch.demon.co.uk
|
||||
Jamie Lokier jamie@imbolc.ucc.ie
|
||||
Jamie McClelland jm@mayfirst.org
|
||||
Jan Engelhardt jengelh@medozas.de
|
||||
Jan Fedak J.Fedak@sh.cvut.cz
|
||||
Jan Moringen jan.moringen@uni-bielefeld.de
|
||||
Jan Nieuwenhuizen janneke@gnu.org
|
||||
Janos Farkas chexum@shadow.banki.hu
|
||||
Jarkko Hietaniemi jhi@epsilon.hut.fi
|
||||
Jarod Wilson jwilson@redhat.com
|
||||
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
|
||||
Jeph Cowan jeph@ucar.edu
|
||||
Jeremy Maitin-Shepard jbms@cmu.edu
|
||||
Jerome Abela abela@hsc.fr
|
||||
Jérôme Zago bug-coreutils-ml@agt-the-walker.net
|
||||
Jesse Kornblum kornblum@usna.edu
|
||||
@@ -282,9 +235,7 @@ Jim Dennis jimd@starshine.org
|
||||
Joakim Rosqvist dvljrt@cs.umu.se
|
||||
Jochen Hein jochen@jochen.org
|
||||
Joe Orton joe@manyfish.co.uk
|
||||
Joel E. Denny jdenny@clemson.edu
|
||||
Joerg Sonnenberger joerg@britannica.bec.de
|
||||
Joey Hess joeyh@debian.org
|
||||
Johan Boule bohan@bohan.dyndns.org
|
||||
Johan Danielsson joda@pdc.kth.se
|
||||
John Bley jbb6@acpub.duke.edu
|
||||
@@ -301,12 +252,9 @@ 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
|
||||
Josh Triplett josh@freedesktop.org
|
||||
Joshua Hudson joshudson@gmail.com
|
||||
Josselin Mouette joss@debian.org
|
||||
Juan F. Codagnone juam@arnet.com.ar
|
||||
Juan M. Guerrero st001906@hrz1.hrz.tu-darmstadt.de
|
||||
Julian Bradfield jcb@inf.ed.ac.uk
|
||||
Jungshik Shin jshin@pantheon.yale.edu
|
||||
Jürgen Fluk louis@dachau.marco.de
|
||||
Jurriaan thunder7@xs4all.nl
|
||||
@@ -326,7 +274,6 @@ Keith Owens kaos@audio.apana.org.au
|
||||
Keith Thompson kst@cts.com
|
||||
Ken Pizzini kenp@halcyon.com
|
||||
Kevin Mudrick kmudrick@healthmarketscience.com
|
||||
Kirk Kelsey kirk.kelsey@0x4b.net
|
||||
Kristin E Thomas kristint@us.ibm.com
|
||||
Kjetil Torgrim Homme kjetilho@ifi.uio.no
|
||||
Kristoffer Rose kris@diku.dk
|
||||
@@ -336,7 +283,6 @@ Leah Q eequor@earthlink.net
|
||||
Lehti Rami rammer@cs.tut.fi
|
||||
Leonard N. Zubkoff lnz@dandelion.com
|
||||
Leonardo Milano lmilano@udel.edu
|
||||
Lluís Batlle viriketo@gmail.com
|
||||
Lorne Baker lbaker@nitro.avint.net
|
||||
Luke Hassell lukehassell@yahoo.com
|
||||
Luke Kendall lukekendall@optushome.com.au
|
||||
@@ -375,10 +321,8 @@ 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
|
||||
Matias A. Fonzo selk@dragora.org
|
||||
Matt Kraai kraai@ftbfs.org
|
||||
Matt Perry matt@primefactor.com
|
||||
Matt Pham mattvpham@gmail.com
|
||||
Matt Schalit mschalit@pacbell.net
|
||||
Matt Swift swift@alum.mit.edu
|
||||
Matthew Arnison maffew@cat.org.au
|
||||
@@ -391,9 +335,7 @@ Matthew Swift swift@alum.mit.edu
|
||||
Matthew Woehlke mw_triad@users.sourceforge.net
|
||||
Matthias Urlichs smurf@noris.de
|
||||
Matti Aarnio matti.aarnio@zmailer.org
|
||||
Mathias Brodala info@noctus.net
|
||||
Mattias Wadenstein maswan@acc.umu.se
|
||||
Max Chang maxchang@ucla.edu
|
||||
Meelis Roos mroos@tartu.cyber.ee
|
||||
Michael michael@aplatform.com
|
||||
Michael ??? michael@roka.net
|
||||
@@ -405,9 +347,7 @@ Michael Hasselberg mikelh@zonta.ping.de
|
||||
Michael Hohn hohn@math.utah.edu
|
||||
Michael J. Croghan mcroghan@usatoday.com
|
||||
Michael McFarland sidlon@yahoo.com
|
||||
Michael McLagan mmclagan@invlogic.com
|
||||
Michael Piefel piefel@informatik.hu-berlin.de
|
||||
Michael Speer knomenet@gmail.com
|
||||
Michael Steffens michael.steffens@s.netic.de
|
||||
Michael Stone mstone@debian.org
|
||||
Michael Stutz stutz@dsl.org
|
||||
@@ -418,7 +358,6 @@ Michal Politowski mpol@charybda.icm.edu.pl
|
||||
Michal Svec msvec@suse.cz
|
||||
Michel Robitaille robitail@IRO.UMontreal.CA
|
||||
Michiel Bacchiani bacchian@raven.bu.edu
|
||||
Mikael Magnusson mikachu@gmail.com
|
||||
Mike Castle dalgoda@ix.netcom.com
|
||||
Mike Coleman mkc@mathdogs.com
|
||||
Mike Jetzer mjetzer@mke.catalystwms.com
|
||||
@@ -432,13 +371,11 @@ 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 Graham nick.d.graham@gmail.com
|
||||
Nick Lawes nlawes@silverplatter.com
|
||||
Nickolai Zeldovich nickolai@cs.stanford.edu
|
||||
Nicolas François nicolas.francois@centraliens.net
|
||||
Niklas Edmundsson nikke@acc.umu.se
|
||||
Nikola Milutinovic Nikola.Milutinovic@ev.co.yu
|
||||
Nima Nikzad nnikzad@ucla.edu
|
||||
Noah Friedman friedman@splode.com
|
||||
Noel Cragg noel@red-bean.com
|
||||
Norbert Kiesel nkiesel@tbdnetworks.com
|
||||
@@ -446,15 +383,10 @@ Olatunji Oluwabukunmi Ruwase tjruwase@stanford.edu
|
||||
Olav Morkrid olav@funcom.com
|
||||
Ole Laursen olau@hardworking.dk
|
||||
Oliver Kiddle okiddle@yahoo.co.uk
|
||||
Olivier Fourdan ofourdan@redhat.com
|
||||
Ørn E. Hansen oehansen@daimi.aau.dk
|
||||
Oskar Liljeblad osk@hem.passagen.se
|
||||
Otavio Salvador otavio@ossystems.com.br
|
||||
Pádraig Brady P@draigBrady.com
|
||||
Patrick Mauritz oxygene@studentenbude.ath.cx
|
||||
Paul D. Smith psmith@gnu.org
|
||||
Paul Eggert eggert@twinsun.com
|
||||
Paul Ghaleb paul.ghaleb@st.com
|
||||
Paul Jarc prj@po.cwru.edu
|
||||
Paul Nevai nevai@ops.mps.ohio-state.edu
|
||||
Paul Sauer paul@alexa.com
|
||||
@@ -464,9 +396,7 @@ 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
|
||||
Per Starbäck starback@stp.lingfil.uu.se
|
||||
Peter Breitenlohner peb@mppmu.mpg.de
|
||||
Peter Dyballa peter_dyballa@web.de
|
||||
Peter Eriksson peter@ifm.liu.se
|
||||
Peter Fales psfales@lucent.com
|
||||
Peter Horst peter@ointment.org
|
||||
@@ -474,19 +404,15 @@ Peter Moulder reiter@netspace.net.au
|
||||
Peter O'Gorman bug-coreutils@mlists.thewrittenword.com
|
||||
Peter Samuelson psamuels@sampo.creighton.edu
|
||||
Peter Seebach seebs@taniemarie.solon.com
|
||||
Petr Uzel petr.uzel@suse.cz
|
||||
Petter Reinholdtsen pere@hungry.com
|
||||
Phelippe Neveu pneveu@pcigeomatics.com
|
||||
Phil Richards phil.richards@vf.vodafone.co.uk
|
||||
Philip Rowlands phr@doc.ic.ac.uk
|
||||
Philippe De Muyter phdm@macqel.be
|
||||
Philippe Schnoebelen Philippe.Schnoebelen@imag.fr
|
||||
Phillip Jones mouse@datastacks.com
|
||||
Piergiorgio Sartor sartor@sony.de
|
||||
Pieter Bowman bowman@math.utah.edu
|
||||
Piotr Kwapulinski kwap@univ.gda.pl
|
||||
Prashant TR tr@eth.net
|
||||
Priit Jõerüüt jemm4jemm@yahoo.com
|
||||
Rainer Orth ro@TechFak.Uni-Bielefeld.DE
|
||||
Ralf W. Stephan stephan@tmt.de
|
||||
Ralf Wildenhues Ralf.Wildenhues@gmx.de
|
||||
@@ -494,7 +420,6 @@ 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
|
||||
Yang Ren ryang@redhat.com
|
||||
Richard A Downing richard.downing@bcs.org.uk
|
||||
Richard Braakman dark@xs4all.nl
|
||||
Richard Dawe rich@phekda.freeserve.co.uk
|
||||
@@ -514,8 +439,6 @@ 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
|
||||
Rudolf Kastl rkastl@redhat.com
|
||||
Sahil Amoli sahilamoli@gmail.com
|
||||
Sami Farin sfarin@ratol.fi
|
||||
Samuel Tardieu sam@rfc1149.net
|
||||
Samuel Thibault samuel.thibault@ens-lyon.org
|
||||
@@ -524,8 +447,7 @@ 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
|
||||
Sébastien Maret smaret@umich.edu
|
||||
Sergei Steshenko sergstesh@yahoo.com
|
||||
Sébastien Maret smaret@umich.edu
|
||||
Shing-Shong Shei shei@cs.indiana.edu
|
||||
Soeren Sonnenburg sonnenburg@informatik.hu-berlin.de
|
||||
Solar Designer solar@owl.openwall.com
|
||||
@@ -538,21 +460,16 @@ Stephen Gildea gildea@stop.mail-abuse.org
|
||||
Stephen Smoogen smooge@mindspring.com
|
||||
Steve McConnel steve@acadcomp.sil.org
|
||||
Steve McIntyre steve@einval.com
|
||||
Steve Ward planet36@gmail.com
|
||||
Steven G. Johnson stevenj@alum.mit.edu
|
||||
Steven Mocking ufo@quicknet.nl
|
||||
Steven Parkes smparkes@smparkes.net
|
||||
Steven Schveighoffer schveiguy@yahoo.com
|
||||
Steven P Watson steven@magelico.net
|
||||
Stuart Kemp skemp@peter.bmc.com
|
||||
Stuart Shelton stuart@shelton.me
|
||||
Sven Joachim svenjoac@gmx.de
|
||||
Sven Joachim sven_joachim@web.de
|
||||
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
|
||||
The Wanderer inverseparadox@comcast.net
|
||||
Theodoros V. Kalamatianos nyb@users.sourceforge.net
|
||||
Thomas Bushnell thomas@gnu.ai.mit.edu
|
||||
Thomas Goerlich thomas@schnappmatik.de
|
||||
Thomas Hood jdthood@yahoo.co.uk
|
||||
@@ -563,13 +480,10 @@ Thomas Schwinge tschwinge@gnu.org
|
||||
Thomas Wolff mined@towo.net
|
||||
Tim J. Robbins tjr@FreeBSD.org
|
||||
Tim Mooney mooney@dogbert.cc.ndsu.NoDak.edu
|
||||
Tim Ryan Tim_Ryan@bnz.co.nz
|
||||
Tim Smithers mouse@dmouse.com.au
|
||||
Tim Waugh twaugh@redhat
|
||||
Tobias Stoeckmann tobias@bugol.de
|
||||
Toby Peterson toby@opendarwin.org
|
||||
Todd A. Jacobs tjacobs@codegnome.org
|
||||
Tom Fitzhenry tom@tom-fitzhenry.me.uk
|
||||
Tom Haynes thomas@netapp.com
|
||||
Tom Quinn trq@dionysos.thphys.ox.ac.uk
|
||||
Tomas Pospisek tpo@sourcepole.ch
|
||||
@@ -584,7 +498,6 @@ Torbjorn Granlund tege@nada.kth.se
|
||||
Torbjorn Lindgren tl@funcom.no
|
||||
Torsten Landschoff torsten@pclab.ifg.uni-kiel.de
|
||||
Tristan Miller psychonaut@nothingisreal.com
|
||||
Tzvi Rotshtein tzvi.ro@gmail.com
|
||||
Ulrich Drepper drepper@gnu.org
|
||||
Ulrich Hermisson ulrich_hermisson@hotmail.com
|
||||
Urs Thuermann urs@isnogud.escape.de
|
||||
@@ -592,9 +505,7 @@ Uwe H. Steinfeld usteinfeld@gmx.net
|
||||
Vesselin Atanasov vesselin@bgnet.bg
|
||||
Vin Shelton acs@alumni.princeton.edu
|
||||
Vineet Chadha chadha@acis.ufl.edu
|
||||
Vitali Lovich vlovich@gmail.com
|
||||
Vitaly A. Ostanin vyt@altlinux.org
|
||||
Vito Caputo vcaputo@pengaru.com
|
||||
Vlada Macek tuttle@bbs.fsik.cvut.cz
|
||||
Volker Borchert bt@teknon.de
|
||||
Volker Paul vpaul@dohle.com
|
||||
@@ -612,7 +523,6 @@ Wis Macomson wis.macomson@intel.com
|
||||
Wojciech Purczynski cliph@isec.pl
|
||||
Wolfram Kleff kleff@cs.uni-bonn.de
|
||||
Won-kyu Park wkpark@chem.skku.ac.kr
|
||||
Yanko Kaneti yaneti@declera.com
|
||||
Yann Dirson dirson@debian.org
|
||||
Zvi Har'El rl@math.technion.ac.il
|
||||
|
||||
|
||||
120
TODO
120
TODO
@@ -1,43 +1,14 @@
|
||||
If you're interested in helping, here are some tasks that we've considered
|
||||
over the years. Beware: some are quite old and no longer valid. To avoid
|
||||
wasting your time by duplicating work or by working on a task that is no
|
||||
longer pertinent, please search the mailing list and post your intent
|
||||
before embarking on a big project.
|
||||
|
||||
==================================================
|
||||
Modify chmod so that it does not change an inode's st_ctime
|
||||
when the selected operation would have no other effect.
|
||||
First suggested by Hans Ecke <http://hans.ecke.ws> in
|
||||
http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/2920
|
||||
Discussed more recently on <http://bugs.debian.org/497514>.
|
||||
|
||||
document the following in coreutils.texi:
|
||||
mktemp
|
||||
[
|
||||
pinky
|
||||
|
||||
Suggestion from Paul Eggert:
|
||||
More generally, there's not that much use for imaxtostr nowadays,
|
||||
since the inttypes module and newer versions of gettext allow things
|
||||
like _("truncating %s at %" PRIdMAX " bytes") to work portably.
|
||||
I suspect that (if someone cares to take the time) we can remove
|
||||
all instances of imaxtostr and umaxtostr in coreutils and gnulib.
|
||||
|
||||
cp --recursive: use fts and *at functions to perform directory traversals
|
||||
in source and destination hierarchy rather than forming full file names.
|
||||
The latter (current) approach fails unnecessarily when the names
|
||||
become very long, and requires space and time that is quadratic in the
|
||||
depth of the hierarchy. [Bo Borgerson is working on this]
|
||||
stty.c:
|
||||
use xstrtoul, not sscanf
|
||||
|
||||
printf:
|
||||
Now that gnulib supports *printf("%a"), import one of the
|
||||
*printf-posix modules so that printf(1) will support %a even on
|
||||
platforms where the native *printf(3) is deficient.
|
||||
Suggestion from Eric Blake.
|
||||
Suggestion form Eric Blake.
|
||||
|
||||
renice: POSIX utility, needs implementing.
|
||||
suggestion from Karl Berry (among others).
|
||||
Bob Proulx is working on this.
|
||||
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
|
||||
@@ -53,6 +24,13 @@ 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.
|
||||
|
||||
@@ -66,9 +44,19 @@ Should printf '\0123' print "\n3"?
|
||||
|
||||
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
|
||||
|
||||
resolve RH report on cp -a forwarded by Tim Waugh
|
||||
|
||||
tail: don't use xlseek; it *exits*.
|
||||
Instead, maybe use a macro and return nonzero.
|
||||
|
||||
add mktemp? Suggested by Nelson Beebe
|
||||
|
||||
tr: support nontrivial equivalence classes, e.g. [=e=] with LC_COLLATE=fr_FR
|
||||
|
||||
lib/strftime.c: Since %N is the only format that we need but that
|
||||
@@ -76,6 +64,11 @@ lib/strftime.c: Since %N is the only format that we need but 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
|
||||
|
||||
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"
|
||||
@@ -101,8 +94,9 @@ sort: Investigate better sorting algorithms; see Knuth vol. 3.
|
||||
5.3.1, who credits Lester Ford, Jr. and Selmer Johnson, American
|
||||
Mathematical Monthly 66 (1959), 387-389.
|
||||
|
||||
shred: Update shred as described here to conform to DoD 5220 rules:
|
||||
http://lists.gnu.org/archive/html/bug-coreutils/2007-05/msg00075.html
|
||||
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.
|
||||
|
||||
Remove suspicious uses of alloca (ones that may allocate more than
|
||||
about 4k)
|
||||
@@ -110,15 +104,16 @@ Remove suspicious uses of alloca (ones that may allocate more than
|
||||
Adapt these contribution guidelines for coreutils:
|
||||
http://sources.redhat.com/automake/contribute.html
|
||||
|
||||
Improve test coverage.
|
||||
See HACKING for instructions on generating an html test coverage report.
|
||||
Find a program that has poor coverage and improve.
|
||||
|
||||
Changes expected to go in, someday.
|
||||
======================================
|
||||
|
||||
dd patch from Olivier Delhomme
|
||||
|
||||
Andreas Gruenbacher's 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
|
||||
@@ -127,18 +122,27 @@ Changes expected to go in, someday.
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
------------------------------
|
||||
|
||||
Have euidaccess.m4 check for eaccess as well as euidaccess
|
||||
If found, then do `#define euidaccess eaccess'.
|
||||
|
||||
Remove long-deprecated options. Search case-insensitive for
|
||||
`deprecated' and `remove in '. Automate this.
|
||||
|
||||
@@ -146,36 +150,43 @@ Add a distcheck-time test to ensure that every distributed
|
||||
file is either read-only(indicating generated) or is
|
||||
version-controlled and up to date.
|
||||
|
||||
remove `%s' notation (now that they're all gone, add a maint.mk sc_
|
||||
rule to ensure no new ones are added):
|
||||
grep -E "\`%.{,4}s'" src/*.c
|
||||
Implement Ulrich Drepper's suggestion to use getgrouplist rather
|
||||
than getugroups. This affects only `id', but makes a big difference
|
||||
on systems with many users and/or groups, and makes id usable once
|
||||
again on systems where access restrictions make getugroups fail.
|
||||
But first we'll need a run-test (either in an autoconf macro or at
|
||||
run time) to avoid the segfault bug in libc-2.3.2's getgrouplist.
|
||||
In that case, we'd revert to using a new (to-be-written) getgrouplist
|
||||
module that does most of what `id' already does. Or just avoid the
|
||||
buggy use of getgrouplist by never passing it a buffer of length zero.
|
||||
See https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=200327
|
||||
|
||||
remove all uses of the `register' keyword: Done. add a maint.mk rule
|
||||
for this, too.
|
||||
remove `%s' notation:
|
||||
grep -E "\`%.{,4}s'" src/*.c
|
||||
|
||||
remove or adjust chown's --changes option, since it
|
||||
can't always do what it currently says it does.
|
||||
|
||||
Support arbitrary-precision arithmetic in those tools for which it
|
||||
makes sense. Factor and expr already support this via libgmp.
|
||||
The "test" program is covered via its string-based comparison of
|
||||
integers. To be converted: seq.
|
||||
|
||||
Adapt tools like wc, tr, fmt, etc. (most of the textutils) to be
|
||||
multibyte aware. The problem is that I want to avoid duplicating
|
||||
significant blocks of logic, yet I also want to incur only minimal
|
||||
(preferably `no') cost when operating in single-byte mode.
|
||||
|
||||
Remove all uses of the `register' keyword
|
||||
|
||||
pr's use of nstrftime can make it malloc a very large (up to SIZE_MAX) buffer
|
||||
|
||||
ls.c: use gettime rather than clock_gettime, gettimeofday, time
|
||||
|
||||
-----
|
||||
|
||||
Copyright (C) 2002-2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
|
||||
Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
@@ -183,4 +194,5 @@ 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, see <http://www.gnu.org/licenses/>.
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
633
bootstrap
633
bootstrap
@@ -2,12 +2,12 @@
|
||||
|
||||
# Bootstrap this package from checked-out sources.
|
||||
|
||||
# Copyright (C) 2003-2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
# 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
|
||||
@@ -15,7 +15,9 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# Written by Paul Eggert.
|
||||
|
||||
@@ -23,18 +25,17 @@ nl='
|
||||
'
|
||||
|
||||
# Ensure file names are sorted consistently across platforms.
|
||||
# Also, ensure diagnostics are in English, e.g., "wget --help" below.
|
||||
LC_ALL=C
|
||||
export LC_ALL
|
||||
|
||||
local_gl_dir=gl
|
||||
|
||||
# Temporary directory names.
|
||||
bt='._bootmp'
|
||||
bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
|
||||
bt2=${bt}2
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
echo >&2 "\
|
||||
Usage: $0 [OPTION]...
|
||||
Bootstrap this package from the checked-out sources.
|
||||
|
||||
@@ -48,45 +49,34 @@ Options:
|
||||
--force Attempt to bootstrap even if the sources seem
|
||||
not to have been checked out.
|
||||
--skip-po Do not download po files.
|
||||
--cvs-user=USERNAME Set the username to use when checking out
|
||||
sources from the gnulib repository.
|
||||
|
||||
If the file $0.conf exists in the same directory as this script, its
|
||||
If the file .bootstrap.conf exists in the current working directory, its
|
||||
contents are read as shell variables to configure the bootstrap.
|
||||
|
||||
For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
|
||||
are honored.
|
||||
|
||||
Running without arguments will suffice in most cases.
|
||||
EOF
|
||||
"
|
||||
}
|
||||
|
||||
# Configuration.
|
||||
|
||||
# Name of the Makefile.am
|
||||
gnulib_mk=gnulib.mk
|
||||
|
||||
# List of gnulib modules needed.
|
||||
gnulib_modules=
|
||||
|
||||
# Any gnulib files needed that are not in modules.
|
||||
gnulib_files=
|
||||
|
||||
# A function to be called after everything else in this script.
|
||||
bootstrap_epilogue() { :; }
|
||||
|
||||
# The command to download all .po files for a specified domain into
|
||||
# a specified directory. Fill in the first %s is the domain name, and
|
||||
# the second with the destination directory. Use rsync's -L and -r
|
||||
# options because the latest/%s directory and the .po files within are
|
||||
# all symlinks.
|
||||
po_download_command_format=\
|
||||
"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
|
||||
# Translation Project URL, for the registry of all projects
|
||||
# and for the translation-team master directory.
|
||||
TP_URL='http://www.iro.umontreal.ca/translation/registry.cgi?domain='
|
||||
TP_PO_URL='http://www.iro.umontreal.ca/translation/teams/PO/'
|
||||
|
||||
extract_package_name='
|
||||
/^AC_INIT(/{
|
||||
/.*,.*,.*, */{
|
||||
/.*,.*,.*,/{
|
||||
s///
|
||||
s/[][]//g
|
||||
s/)$//
|
||||
p
|
||||
q
|
||||
}
|
||||
@@ -102,26 +92,18 @@ package=`sed -n "$extract_package_name" configure.ac` || exit
|
||||
gnulib_name=lib$package
|
||||
|
||||
build_aux=build-aux
|
||||
source_base=lib
|
||||
m4_base=m4
|
||||
doc_base=doc
|
||||
tests_base=tests
|
||||
|
||||
# Extra files from gnulib, which override files from other sources.
|
||||
gnulib_extra_files="
|
||||
$build_aux/install-sh
|
||||
$build_aux/missing
|
||||
$build_aux/mdate-sh
|
||||
$build_aux/texinfo.tex
|
||||
$build_aux/depcomp
|
||||
$build_aux/config.guess
|
||||
$build_aux/config.sub
|
||||
doc/INSTALL
|
||||
$build_aux/install-sh
|
||||
$build_aux/missing
|
||||
$build_aux/mdate-sh
|
||||
$build_aux/texinfo.tex
|
||||
$build_aux/depcomp
|
||||
$build_aux/config.guess
|
||||
$build_aux/config.sub
|
||||
doc/INSTALL
|
||||
"
|
||||
|
||||
# Additional gnulib-tool options to use. Use "\newline" to break lines.
|
||||
gnulib_tool_option_extras=
|
||||
|
||||
# Other locale categories that need message catalogs.
|
||||
EXTRA_LOCALE_CATEGORIES=
|
||||
|
||||
@@ -132,9 +114,6 @@ XGETTEXT_OPTIONS='\\\
|
||||
--flag=error:3:c-format --flag=error_at_line:5:c-format\\\
|
||||
'
|
||||
|
||||
# Package bug report address for gettext files
|
||||
MSGID_BUGS_ADDRESS=bug-$package@gnu.org
|
||||
|
||||
# Files we don't want to import.
|
||||
excluded_files=
|
||||
|
||||
@@ -145,65 +124,8 @@ checkout_only_file=README-hacking
|
||||
# Whether to use copies instead of symlinks.
|
||||
copy=false
|
||||
|
||||
# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
|
||||
# those files to be generated in directories like lib/, m4/, and po/.
|
||||
# Or set it to 'auto' to make this script select which to use based
|
||||
# on which version control system (if any) is used in the source directory.
|
||||
vc_ignore=auto
|
||||
|
||||
# find_tool ENVVAR NAMES...
|
||||
# -------------------------
|
||||
# Search for a required program. Use the value of ENVVAR, if set,
|
||||
# otherwise find the first of the NAMES that can be run (i.e.,
|
||||
# supports --version). If found, set ENVVAR to the program name,
|
||||
# die otherwise.
|
||||
find_tool ()
|
||||
{
|
||||
# Find sha1sum, named gsha1sum on MacPorts.
|
||||
find_tool_envvar=$1
|
||||
shift
|
||||
find_tool_names=$@
|
||||
eval "find_tool_res=\$$find_tool_envvar"
|
||||
if test x"$find_tool_res" = x; then
|
||||
for i
|
||||
do
|
||||
if ($i --version </dev/null) >/dev/null 2>&1; then
|
||||
find_tool_res=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
find_tool_error_prefix="\$$find_tool_envvar: "
|
||||
fi
|
||||
if test x"$find_tool_res" = x; then
|
||||
echo >&2 "$0: one of these is required: $find_tool_names"
|
||||
exit 1
|
||||
fi
|
||||
($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
|
||||
echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version"
|
||||
exit 1
|
||||
}
|
||||
eval "$find_tool_envvar=\$find_tool_res"
|
||||
eval "export $find_tool_envvar"
|
||||
}
|
||||
|
||||
# Find sha1sum, named gsha1sum on MacPorts.
|
||||
find_tool SHA1SUM sha1sum gsha1sum
|
||||
|
||||
# Override the default configuration, if necessary.
|
||||
# Make sure that bootstrap.conf is sourced from the current directory
|
||||
# if we were invoked as "sh bootstrap".
|
||||
case "$0" in
|
||||
*/*) test -r "$0.conf" && . "$0.conf" ;;
|
||||
*) test -r "$0.conf" && . ./"$0.conf" ;;
|
||||
esac
|
||||
|
||||
|
||||
if test "$vc_ignore" = auto; then
|
||||
vc_ignore=
|
||||
test -d .git && vc_ignore=.gitignore
|
||||
test -d CVS && vc_ignore="$vc_ignore .cvsignore"
|
||||
fi
|
||||
test -r bootstrap.conf && . ./bootstrap.conf
|
||||
|
||||
# Translate configuration into internal form.
|
||||
|
||||
@@ -216,7 +138,9 @@ do
|
||||
usage
|
||||
exit;;
|
||||
--gnulib-srcdir=*)
|
||||
GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
|
||||
GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
|
||||
--cvs-user=*)
|
||||
CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
|
||||
--skip-po)
|
||||
SKIP_PO=t;;
|
||||
--force)
|
||||
@@ -239,8 +163,7 @@ fi
|
||||
insert_sorted_if_absent() {
|
||||
file=$1
|
||||
str=$2
|
||||
test -f $file || touch $file
|
||||
echo "$str" | sort -u - $file | cmp - $file > /dev/null \
|
||||
echo "$str" | sort -u - $file | cmp -s - $file \
|
||||
|| echo "$str" | sort -u - $file -o $file \
|
||||
|| exit 1
|
||||
}
|
||||
@@ -253,175 +176,55 @@ grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
|
||||
>/dev/null && found_aux_dir=yes
|
||||
if test $found_aux_dir = no; then
|
||||
echo "$0: expected line not found in configure.ac. Add the following:" >&2
|
||||
echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
|
||||
exit 1
|
||||
echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2.
|
||||
fi
|
||||
|
||||
# If $build_aux doesn't exist, create it now, otherwise some bits
|
||||
# below will malfunction. If creating it, also mark it as ignored.
|
||||
if test ! -d $build_aux; then
|
||||
mkdir $build_aux
|
||||
for dot_ig in x $vc_ignore; do
|
||||
test $dot_ig = x && continue
|
||||
insert_sorted_if_absent $dot_ig $build_aux
|
||||
for ig in .cvsignore .gitignore; do
|
||||
test -f $ig && insert_sorted_if_absent $ig $build_aux
|
||||
done
|
||||
fi
|
||||
|
||||
# Note this deviates from the version comparison in automake
|
||||
# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
|
||||
# but this should suffice as we won't be specifying old
|
||||
# version formats or redundant trailing .0 in bootstrap.conf.
|
||||
# If we did want full compatibility then we should probably
|
||||
# use m4_version_compare from autoconf.
|
||||
sort_ver() { # sort -V is not generally available
|
||||
ver1="$1"
|
||||
ver2="$2"
|
||||
|
||||
# split on '.' and compare each component
|
||||
i=1
|
||||
while : ; do
|
||||
p1=$(echo "$ver1" | cut -d. -f$i)
|
||||
p2=$(echo "$ver2" | cut -d. -f$i)
|
||||
if [ ! "$p1" ]; then
|
||||
echo "$1 $2"
|
||||
break
|
||||
elif [ ! "$p2" ]; then
|
||||
echo "$2 $1"
|
||||
break
|
||||
elif [ ! "$p1" = "$p2" ]; then
|
||||
if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison
|
||||
echo "$2 $1"
|
||||
elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
|
||||
echo "$1 $2"
|
||||
else # numeric, then lexicographic comparison
|
||||
lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
|
||||
if [ "$lp" = "$p2" ]; then
|
||||
echo "$1 $2"
|
||||
else
|
||||
echo "$2 $1"
|
||||
fi
|
||||
fi
|
||||
break
|
||||
fi
|
||||
i=$(($i+1))
|
||||
done
|
||||
}
|
||||
|
||||
get_version() {
|
||||
app=$1
|
||||
|
||||
$app --version >/dev/null 2>&1 || return 1
|
||||
|
||||
$app --version 2>&1 |
|
||||
sed -n 's/[^0-9.]*\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/p
|
||||
t done
|
||||
d
|
||||
:done
|
||||
q'
|
||||
}
|
||||
|
||||
check_versions() {
|
||||
ret=0
|
||||
|
||||
while read app req_ver; do
|
||||
# Honor $APP variables ($TAR, $AUTOCONF, etc.)
|
||||
appvar=`echo $app | tr '[a-z]' '[A-Z]'`
|
||||
test "$appvar" = TAR && appvar=AMTAR
|
||||
eval "app=\${$appvar-$app}"
|
||||
inst_ver=$(get_version $app)
|
||||
if [ ! "$inst_ver" ]; then
|
||||
echo "Error: '$app' not found" >&2
|
||||
ret=1
|
||||
elif [ ! "$req_ver" = "-" ]; then
|
||||
latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
|
||||
if [ ! "$latest_ver" = "$inst_ver" ]; then
|
||||
echo "Error: '$app' version == $inst_ver is too old" >&2
|
||||
echo " '$app' version >= $req_ver is required" >&2
|
||||
ret=1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
print_versions() {
|
||||
echo "Program Min_version"
|
||||
echo "----------------------"
|
||||
printf "$buildreq"
|
||||
echo "----------------------"
|
||||
# can't depend on column -t
|
||||
}
|
||||
|
||||
if ! printf "$buildreq" | check_versions; then
|
||||
test -f README-prereq &&
|
||||
echo "See README-prereq for notes on obtaining these prerequisite programs:" >&2
|
||||
echo
|
||||
print_versions
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$0: Bootstrapping from checked-out $package sources..."
|
||||
|
||||
# See if we can use gnulib's git-merge-changelog merge driver.
|
||||
if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
|
||||
if git config merge.merge-changelog.driver >/dev/null ; then
|
||||
:
|
||||
elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
|
||||
echo "initializing git-merge-changelog driver"
|
||||
git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
|
||||
git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
|
||||
else
|
||||
echo "consider installing git-merge-changelog from gnulib"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
cleanup_gnulib() {
|
||||
status=$?
|
||||
rm -fr gnulib
|
||||
exit $status
|
||||
}
|
||||
|
||||
git_modules_config () {
|
||||
test -f .gitmodules && git config --file .gitmodules "$@"
|
||||
}
|
||||
|
||||
# Get gnulib files.
|
||||
|
||||
case ${GNULIB_SRCDIR--} in
|
||||
-)
|
||||
if git_modules_config submodule.gnulib.url >/dev/null; then
|
||||
if [ ! -d gnulib ]; then
|
||||
echo "$0: getting gnulib files..."
|
||||
git submodule init || exit $?
|
||||
git submodule update || exit $?
|
||||
|
||||
elif [ ! -d gnulib ]; then
|
||||
echo "$0: getting gnulib files..."
|
||||
case ${CVS_AUTH-pserver} in
|
||||
pserver)
|
||||
CVS_PREFIX=':pserver:anonymous@';;
|
||||
ssh)
|
||||
CVS_PREFIX="$CVS_USER${CVS_USER+@}";;
|
||||
*)
|
||||
echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
case $CVS_RSH in
|
||||
'') CVS_RSH=ssh; export CVS_RSH;;
|
||||
esac
|
||||
|
||||
trap cleanup_gnulib 1 2 13 15
|
||||
|
||||
git clone --help|grep depth > /dev/null && shallow='--depth 2' || shallow=
|
||||
git clone $shallow git://git.sv.gnu.org/gnulib ||
|
||||
cvs -z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org:/cvsroot/gnulib co gnulib ||
|
||||
cleanup_gnulib
|
||||
|
||||
trap - 1 2 13 15
|
||||
fi
|
||||
GNULIB_SRCDIR=gnulib
|
||||
;;
|
||||
*)
|
||||
# Redirect the gnulib submodule to the directory on the command line
|
||||
# if possible.
|
||||
if test -d "$GNULIB_SRCDIR"/.git && \
|
||||
git_modules_config submodule.gnulib.url >/dev/null; then
|
||||
git submodule init
|
||||
GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd`
|
||||
git config --replace-all submodule.gnulib.url $GNULIB_SRCDIR
|
||||
echo "$0: getting gnulib files..."
|
||||
git submodule update || exit $?
|
||||
GNULIB_SRCDIR=gnulib
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
|
||||
@@ -429,116 +232,104 @@ gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
|
||||
|
||||
# Get translations.
|
||||
|
||||
download_po_files() {
|
||||
get_translations() {
|
||||
subdir=$1
|
||||
domain=$2
|
||||
echo "$0: getting translations into $subdir for $domain..."
|
||||
cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
|
||||
eval "$cmd"
|
||||
}
|
||||
|
||||
# Download .po files to $po_dir/.reference and copy only the new
|
||||
# or modified ones into $po_dir. Also update $po_dir/LINGUAS.
|
||||
update_po_files() {
|
||||
# Directory containing primary .po files.
|
||||
# Overwrite them only when we're sure a .po file is new.
|
||||
po_dir=$1
|
||||
domain=$2
|
||||
case $WGET_COMMAND in
|
||||
'')
|
||||
echo "$0: wget not available; skipping translations";;
|
||||
?*)
|
||||
echo "$0: getting translations into $subdir for $domain..." &&
|
||||
|
||||
# Download *.po files into this dir.
|
||||
# Usually contains *.s1 checksum files.
|
||||
ref_po_dir="$po_dir/.reference"
|
||||
(cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`) &&
|
||||
$WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
|
||||
|
||||
test -d $ref_po_dir || mkdir $ref_po_dir || return
|
||||
download_po_files $ref_po_dir $domain \
|
||||
&& ls "$ref_po_dir"/*.po 2>/dev/null |
|
||||
sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
|
||||
|
||||
langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
|
||||
test "$langs" = '*' && langs=x
|
||||
for po in $langs; do
|
||||
case $po in x) continue;; esac
|
||||
new_po="$ref_po_dir/$po.po"
|
||||
cksum_file="$ref_po_dir/$po.s1"
|
||||
if ! test -f "$cksum_file" ||
|
||||
! test -f "$po_dir/$po.po" ||
|
||||
! $SHA1SUM -c --status "$cksum_file" \
|
||||
< "$new_po" > /dev/null; then
|
||||
echo "updated $po_dir/$po.po..."
|
||||
cp "$new_po" "$po_dir/$po.po" \
|
||||
&& $SHA1SUM < "$new_po" > "$cksum_file"
|
||||
fi
|
||||
done
|
||||
sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
|
||||
sort -k 1,1 -k 2,2n -k2,2 -k3,3n -k3,3 -k4,4n -k4,4 -k5,5n -k5.5 |
|
||||
awk -F. '
|
||||
{ if (lang && $1 != lang) print lang, ver }
|
||||
{ lang = $1; ver = substr($0, index($0, ".") + 1) }
|
||||
END { if (lang) print lang, ver }
|
||||
' | awk -v domain="$domain" -v subdir="$subdir" '
|
||||
{
|
||||
lang = $1
|
||||
ver = $2
|
||||
urlfmt = ""
|
||||
printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang
|
||||
printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
|
||||
printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
|
||||
printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
|
||||
}
|
||||
END { print ":" }
|
||||
' | WGET_COMMAND="$WGET_COMMAND" sh;;
|
||||
esac &&
|
||||
ls "$subdir"/*.po 2>/dev/null |
|
||||
sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
|
||||
rm -f "$subdir/$domain.html"
|
||||
}
|
||||
|
||||
case $SKIP_PO in
|
||||
'')
|
||||
case `wget --help` in
|
||||
*'--no-cache'*)
|
||||
WGET_COMMAND='wget -nv --no-cache';;
|
||||
*'--cache=on/off'*)
|
||||
WGET_COMMAND='wget -nv --cache=off';;
|
||||
*'--non-verbose'*)
|
||||
WGET_COMMAND='wget -nv';;
|
||||
*)
|
||||
WGET_COMMAND='';;
|
||||
esac
|
||||
|
||||
if test -d po; then
|
||||
update_po_files po $package || exit
|
||||
get_translations po $package || exit
|
||||
fi
|
||||
|
||||
if test -d runtime-po; then
|
||||
update_po_files runtime-po $package-runtime || exit
|
||||
get_translations runtime-po $package-runtime || exit
|
||||
fi;;
|
||||
esac
|
||||
|
||||
symlink_to_dir()
|
||||
symlink_to_gnulib()
|
||||
{
|
||||
src=$1/$2
|
||||
dst=${3-$2}
|
||||
src=$GNULIB_SRCDIR/$1
|
||||
dst=${2-$1}
|
||||
|
||||
test -f "$src" && {
|
||||
|
||||
# If the destination directory doesn't exist, create it.
|
||||
# This is required at least for "lib/uniwidth/cjk.h".
|
||||
dst_dir=`dirname "$dst"`
|
||||
if ! test -d "$dst_dir"; then
|
||||
mkdir -p "$dst_dir"
|
||||
|
||||
# If we've just created a directory like lib/uniwidth,
|
||||
# tell version control system(s) it's ignorable.
|
||||
# FIXME: for now, this does only one level
|
||||
parent=`dirname "$dst_dir"`
|
||||
for dot_ig in x $vc_ignore; do
|
||||
test $dot_ig = x && continue
|
||||
ig=$parent/$dot_ig
|
||||
insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'`
|
||||
done
|
||||
fi
|
||||
|
||||
if $copy; then
|
||||
{
|
||||
test ! -h "$dst" || {
|
||||
echo "$0: rm -f $dst" &&
|
||||
rm -f "$dst"
|
||||
}
|
||||
test ! -h "$dst" || {
|
||||
echo "$0: rm -f $dst" &&
|
||||
rm -f "$dst"
|
||||
}
|
||||
} &&
|
||||
test -f "$dst" &&
|
||||
cmp -s "$src" "$dst" || {
|
||||
echo "$0: cp -fp $src $dst" &&
|
||||
cp -fp "$src" "$dst"
|
||||
echo "$0: cp -fp $src $dst" &&
|
||||
cp -fp "$src" "$dst"
|
||||
}
|
||||
else
|
||||
test -h "$dst" &&
|
||||
src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
|
||||
dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
|
||||
test "$src_i" = "$dst_i" || {
|
||||
dot_dots=
|
||||
case $src in
|
||||
/*) ;;
|
||||
*)
|
||||
case /$dst/ in
|
||||
*//* | */../* | */./* | /*/*/*/*/*/)
|
||||
echo >&2 "$0: invalid symlink calculation: $src -> $dst"
|
||||
exit 1;;
|
||||
/*/*/*/*/) dot_dots=../../../;;
|
||||
/*/*/*/) dot_dots=../../;;
|
||||
/*/*/) dot_dots=../;;
|
||||
esac;;
|
||||
esac
|
||||
dot_dots=
|
||||
case $src in
|
||||
/*) ;;
|
||||
*)
|
||||
case /$dst/ in
|
||||
*//* | */../* | */./* | /*/*/*/*/*/)
|
||||
echo >&2 "$0: invalid symlink calculation: $src -> $dst"
|
||||
exit 1;;
|
||||
/*/*/*/*/) dot_dots=../../../;;
|
||||
/*/*/*/) dot_dots=../../;;
|
||||
/*/*/) dot_dots=../;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
echo "$0: ln -fs $dot_dots$src $dst" &&
|
||||
ln -fs "$dot_dots$src" "$dst"
|
||||
echo "$0: ln -fs $dot_dots$src $dst" &&
|
||||
ln -fs "$dot_dots$src" "$dst"
|
||||
}
|
||||
fi
|
||||
}
|
||||
@@ -550,9 +341,7 @@ cp_mark_as_generated()
|
||||
cp_dst=$2
|
||||
|
||||
if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
|
||||
symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
|
||||
elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
|
||||
symlink_to_dir $local_gl_dir "$cp_dst"
|
||||
symlink_to_gnulib "$cp_dst"
|
||||
else
|
||||
case $cp_dst in
|
||||
*.[ch]) c1='/* '; c2=' */';;
|
||||
@@ -561,36 +350,26 @@ cp_mark_as_generated()
|
||||
*) c1= ; c2= ;;
|
||||
esac
|
||||
|
||||
# If the destination directory doesn't exist, create it.
|
||||
# This is required at least for "lib/uniwidth/cjk.h".
|
||||
dst_dir=`dirname "$cp_dst"`
|
||||
test -d "$dst_dir" || mkdir -p "$dst_dir"
|
||||
|
||||
if test -z "$c1"; then
|
||||
cmp -s "$cp_src" "$cp_dst" || {
|
||||
# Copy the file first to get proper permissions if it
|
||||
# doesn't already exist. Then overwrite the copy.
|
||||
echo "$0: cp -f $cp_src $cp_dst" &&
|
||||
rm -f "$cp_dst" &&
|
||||
cp "$cp_src" "$cp_dst-t" &&
|
||||
sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
|
||||
mv -f "$cp_dst-t" "$cp_dst"
|
||||
echo "$0: cp -f $cp_src $cp_dst" &&
|
||||
rm -f "$cp_dst" &&
|
||||
sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst"
|
||||
}
|
||||
else
|
||||
# Copy the file first to get proper permissions if it
|
||||
# doesn't already exist. Then overwrite the copy.
|
||||
cp "$cp_src" "$cp_dst-t" &&
|
||||
(
|
||||
echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
|
||||
echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
|
||||
echo '#line 1' &&
|
||||
sed "s!$bt_regex/!!g" "$cp_src"
|
||||
echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
|
||||
echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
|
||||
sed "s!$bt_regex/!!g" "$cp_src"
|
||||
) > $cp_dst-t &&
|
||||
if cmp -s "$cp_dst-t" "$cp_dst"; then
|
||||
rm -f "$cp_dst-t"
|
||||
rm -f "$cp_dst-t"
|
||||
else
|
||||
echo "$0: cp $cp_src $cp_dst # with edits" &&
|
||||
mv -f "$cp_dst-t" "$cp_dst"
|
||||
echo "$0: cp $cp_src $cp_dst # with edits" &&
|
||||
mv -f "$cp_dst-t" "$cp_dst"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -602,11 +381,9 @@ version_controlled_file() {
|
||||
found=no
|
||||
if test -d CVS; then
|
||||
grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
|
||||
grep '^/[^/]*/[0-9]' > /dev/null && found=yes
|
||||
grep '^/[^/]*/[0-9]' > /dev/null && found=yes
|
||||
elif test -d .git; then
|
||||
git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
|
||||
elif test -d .svn; then
|
||||
svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
|
||||
git-rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
|
||||
else
|
||||
echo "$0: no version control for $dir/$file?" >&2
|
||||
fi
|
||||
@@ -617,61 +394,50 @@ slurp() {
|
||||
for dir in . `(cd $1 && find * -type d -print)`; do
|
||||
copied=
|
||||
sep=
|
||||
for file in `ls -a $1/$dir`; do
|
||||
case $file in
|
||||
.|..) continue;;
|
||||
.*) continue;; # FIXME: should all file names starting with "." be ignored?
|
||||
esac
|
||||
for file in `ls $1/$dir`; do
|
||||
test -d $1/$dir/$file && continue
|
||||
for excluded_file in $excluded_files; do
|
||||
test "$dir/$file" = "$excluded_file" && continue 2
|
||||
test "$dir/$file" = "$excluded_file" && continue 2
|
||||
done
|
||||
if test $file = Makefile.am; then
|
||||
copied=$copied${sep}$gnulib_mk; sep=$nl
|
||||
remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
|
||||
sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || {
|
||||
echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
|
||||
rm -f $dir/$gnulib_mk &&
|
||||
sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
|
||||
}
|
||||
copied=$copied${sep}gnulib.mk; sep=$nl
|
||||
remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
|
||||
sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/gnulib.mk || {
|
||||
echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
|
||||
rm -f $dir/gnulib.mk &&
|
||||
sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
|
||||
}
|
||||
elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
|
||||
version_controlled_file $dir $file; then
|
||||
echo "$0: $dir/$file overrides $1/$dir/$file"
|
||||
version_controlled_file $dir $file; then
|
||||
echo "$0: $dir/$file overrides $1/$dir/$file"
|
||||
else
|
||||
copied=$copied$sep$file; sep=$nl
|
||||
if test $file = gettext.m4; then
|
||||
echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
|
||||
rm -f $dir/$file
|
||||
sed '
|
||||
/^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
|
||||
AC_DEFUN([AM_INTL_SUBDIR], [
|
||||
/^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
|
||||
AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
|
||||
$a\
|
||||
AC_DEFUN([gl_LOCK_EARLY], [])
|
||||
' $1/$dir/$file >$dir/$file
|
||||
else
|
||||
cp_mark_as_generated $1/$dir/$file $dir/$file
|
||||
fi
|
||||
copied=$copied$sep$file; sep=$nl
|
||||
if test $file = gettext.m4; then
|
||||
echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
|
||||
rm -f $dir/$file
|
||||
sed '
|
||||
/^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
|
||||
AC_DEFUN([AM_INTL_SUBDIR], [
|
||||
/^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
|
||||
AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
|
||||
$a\
|
||||
AC_DEFUN([gl_LOCK_EARLY], [])
|
||||
' $1/$dir/$file >$dir/$file
|
||||
else
|
||||
cp_mark_as_generated $1/$dir/$file $dir/$file
|
||||
fi
|
||||
fi || exit
|
||||
done
|
||||
|
||||
for dot_ig in x $vc_ignore; do
|
||||
test $dot_ig = x && continue
|
||||
for dot_ig in .cvsignore .gitignore; do
|
||||
ig=$dir/$dot_ig
|
||||
if test -n "$copied"; then
|
||||
insert_sorted_if_absent $ig "$copied"
|
||||
# If an ignored file name ends with .in.h, then also add
|
||||
# the name with just ".h". Many gnulib headers are generated,
|
||||
# e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
|
||||
# Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
|
||||
f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
|
||||
insert_sorted_if_absent $ig "$f"
|
||||
|
||||
# For files like sys_stat.in.h and sys_time.in.h, record as
|
||||
# ignorable the directory we might eventually create: sys/.
|
||||
f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
|
||||
insert_sorted_if_absent $ig "$f"
|
||||
if test -n "$copied" && test -f $ig; then
|
||||
insert_sorted_if_absent $ig "$copied"
|
||||
# If an ignored file name ends with _.h, then also add
|
||||
# the name with just ".h". Many gnulib headers are generated,
|
||||
# e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc.
|
||||
f=`echo "$copied"|sed 's/_\.h$/.h/'`
|
||||
insert_sorted_if_absent $ig "$f"
|
||||
fi
|
||||
done
|
||||
done
|
||||
@@ -688,20 +454,19 @@ gnulib_tool_options="\
|
||||
--import\
|
||||
--no-changelog\
|
||||
--aux-dir $bt/$build_aux\
|
||||
--doc-base $bt/$doc_base\
|
||||
--doc-base $bt/doc\
|
||||
--lib $gnulib_name\
|
||||
--m4-base $bt/$m4_base/\
|
||||
--source-base $bt/$source_base/\
|
||||
--tests-base $bt/$tests_base\
|
||||
--local-dir $local_gl_dir\
|
||||
$gnulib_tool_option_extras\
|
||||
--m4-base $bt/m4/\
|
||||
--source-base $bt/lib/\
|
||||
--tests-base $bt/tests\
|
||||
--local-dir gl\
|
||||
"
|
||||
echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
|
||||
$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
|
||||
slurp $bt || exit
|
||||
|
||||
for file in $gnulib_files; do
|
||||
symlink_to_dir "$GNULIB_SRCDIR" $file || exit
|
||||
symlink_to_gnulib $file || exit
|
||||
done
|
||||
|
||||
|
||||
@@ -711,50 +476,28 @@ grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
|
||||
with_gettext=no
|
||||
|
||||
if test $with_gettext = yes; then
|
||||
echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
|
||||
echo "$0: (cd $bt2; autopoint) ..."
|
||||
cp configure.ac $bt2 &&
|
||||
(cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) &&
|
||||
(cd $bt2 && autopoint && rm configure.ac) &&
|
||||
slurp $bt2 $bt || exit
|
||||
fi
|
||||
rm -fr $bt $bt2 || exit
|
||||
|
||||
# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
|
||||
# gnulib-populated directories. Such .m4 files would cause aclocal to fail.
|
||||
# The following requires GNU find 4.2.3 or newer. Considering the usual
|
||||
# portability constraints of this script, that may seem a very demanding
|
||||
# requirement, but it should be ok. Ignore any failure, which is fine,
|
||||
# since this is only a convenience to help developers avoid the relatively
|
||||
# unusual case in which a symlinked-to .m4 file is git-removed from gnulib
|
||||
# between successive runs of this script.
|
||||
find "$m4_base" "$source_base" \
|
||||
-depth \( -name '*.m4' -o -name '*.[ch]' \) \
|
||||
-type l -xtype l -delete > /dev/null 2>&1
|
||||
rm -fr $bt $bt2 || exit
|
||||
fi
|
||||
|
||||
|
||||
# Reconfigure, getting other files.
|
||||
|
||||
# Skip autoheader if it's not needed.
|
||||
grep '^[ ]*AC_CONFIG_HEADERS\>' configure.ac >/dev/null ||
|
||||
AUTOHEADER=true
|
||||
|
||||
for command in \
|
||||
libtool \
|
||||
"${ACLOCAL-aclocal} --force -I m4" \
|
||||
"${AUTOCONF-autoconf} --force" \
|
||||
"${AUTOHEADER-autoheader} --force" \
|
||||
"${AUTOMAKE-automake} --add-missing --copy --force-missing"
|
||||
'aclocal --force -I m4' \
|
||||
'autoconf --force' \
|
||||
'autoheader --force' \
|
||||
'automake --add-missing --copy --force-missing';
|
||||
do
|
||||
if test "$command" = libtool; then
|
||||
use_libtool=0
|
||||
# We'd like to use grep -E, to see if any of LT_INIT,
|
||||
# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
|
||||
# but that's not portable enough (e.g., for Solaris).
|
||||
grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
|
||||
&& use_libtool=1
|
||||
grep '^[ ]*LT_INIT' configure.ac >/dev/null \
|
||||
&& use_libtool=1
|
||||
test $use_libtool = 0 \
|
||||
&& continue
|
||||
command="${LIBTOOLIZE-libtoolize} -c -f"
|
||||
grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac >/dev/null ||
|
||||
continue
|
||||
command='libtoolize -c -f'
|
||||
fi
|
||||
echo "$0: $command ..."
|
||||
$command || exit
|
||||
@@ -762,13 +505,13 @@ done
|
||||
|
||||
|
||||
# Get some extra files from gnulib, overriding existing files.
|
||||
|
||||
for file in $gnulib_extra_files; do
|
||||
case $file in
|
||||
*/INSTALL) dst=INSTALL;;
|
||||
build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
|
||||
*) dst=$file;;
|
||||
esac
|
||||
symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
|
||||
symlink_to_gnulib $file $dst || exit
|
||||
done
|
||||
|
||||
if test $with_gettext = yes; then
|
||||
@@ -777,11 +520,11 @@ if test $with_gettext = yes; then
|
||||
rm -f po/Makevars
|
||||
sed '
|
||||
/^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
|
||||
/^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
|
||||
/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
|
||||
/^XGETTEXT_OPTIONS *=/{
|
||||
s/$/ \\/
|
||||
a\
|
||||
'"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
|
||||
'"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
|
||||
}
|
||||
' po/Makevars.template >po/Makevars
|
||||
|
||||
@@ -793,9 +536,9 @@ if test $with_gettext = yes; then
|
||||
/^subdir *=.*/s/=.*/= runtime-po/
|
||||
/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
|
||||
/^XGETTEXT_OPTIONS *=/{
|
||||
s/$/ \\/
|
||||
a\
|
||||
'"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
|
||||
s/$/ \\/
|
||||
a\
|
||||
'"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
|
||||
}
|
||||
' <po/Makevars.template >runtime-po/Makevars
|
||||
|
||||
@@ -804,6 +547,4 @@ if test $with_gettext = yes; then
|
||||
fi
|
||||
fi
|
||||
|
||||
bootstrap_epilogue
|
||||
|
||||
echo "$0: done. Now you can run './configure'."
|
||||
|
||||
330
bootstrap.conf
330
bootstrap.conf
@@ -1,11 +1,11 @@
|
||||
# Bootstrap configuration.
|
||||
|
||||
# Copyright (C) 2006-2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
# 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
|
||||
@@ -13,239 +13,63 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
|
||||
# We don't need these modules.
|
||||
# We don't need these modules, even though gnulib-tool mistakenly
|
||||
# includes them because of gettext and fchdir dependencies.
|
||||
avoided_gnulib_modules='
|
||||
--avoid=canonicalize-lgpl
|
||||
--avoid=dummy
|
||||
--avoid=lock
|
||||
--avoid=size_max
|
||||
--avoid=xsize
|
||||
--avoid=canonicalize-lgpl
|
||||
'
|
||||
|
||||
# These modules are obsolete and can probably be removed soon,
|
||||
# but leave them in for now to minimize changes.
|
||||
obsolete_gnulib_modules='
|
||||
atexit
|
||||
memcmp
|
||||
memcpy
|
||||
memmove
|
||||
memset
|
||||
strcspn
|
||||
strtod
|
||||
strtol
|
||||
atexit free memchr memcmp memcpy memmove memset rename
|
||||
strcspn strtod strtol utime
|
||||
'
|
||||
|
||||
# gnulib modules used by this package.
|
||||
gnulib_modules="
|
||||
$avoided_gnulib_modules
|
||||
$obsolete_gnulib_modules
|
||||
acl
|
||||
alloca
|
||||
announce-gen
|
||||
areadlink-with-size
|
||||
argmatch
|
||||
argv-iter
|
||||
assert
|
||||
autobuild
|
||||
backupfile
|
||||
base64
|
||||
c-strcase
|
||||
c-strtod
|
||||
c-strtold
|
||||
calloc
|
||||
canon-host
|
||||
canonicalize
|
||||
chown
|
||||
cloexec
|
||||
closein
|
||||
closeout
|
||||
config-h
|
||||
configmake
|
||||
crypto/md5
|
||||
crypto/sha1
|
||||
crypto/sha256
|
||||
crypto/sha512
|
||||
cycle-check
|
||||
d-ino
|
||||
d-type
|
||||
diacrit
|
||||
dirfd
|
||||
dirname
|
||||
dup2
|
||||
error
|
||||
euidaccess
|
||||
exclude
|
||||
exitfail
|
||||
faccessat
|
||||
fchdir
|
||||
fcntl
|
||||
fcntl-safer
|
||||
fdl
|
||||
file-type
|
||||
fileblocks
|
||||
filemode
|
||||
filenamecat
|
||||
filevercmp
|
||||
fnmatch-gnu
|
||||
fopen-safer
|
||||
fprintftime
|
||||
freopen
|
||||
fseeko
|
||||
fsusage
|
||||
fsync
|
||||
ftello
|
||||
ftruncate
|
||||
fts
|
||||
getdate
|
||||
getgroups
|
||||
gethrxtime
|
||||
getline
|
||||
getloadavg
|
||||
getndelim2
|
||||
getopt-gnu
|
||||
getpagesize
|
||||
getpass-gnu
|
||||
gettext
|
||||
gettime
|
||||
gettimeofday
|
||||
getugroups
|
||||
getusershell
|
||||
git-version-gen
|
||||
gitlog-to-changelog
|
||||
gnu-make
|
||||
gnu-web-doc-update
|
||||
gnumakefile
|
||||
gnupload
|
||||
group-member
|
||||
hard-locale
|
||||
hash
|
||||
hash-pjw
|
||||
host-os
|
||||
human
|
||||
idcache
|
||||
ignore-value
|
||||
inttostr
|
||||
inttypes
|
||||
isapipe
|
||||
lchmod
|
||||
lchown
|
||||
lib-ignore
|
||||
linebuffer
|
||||
link
|
||||
link-follow
|
||||
linkat
|
||||
long-options
|
||||
lstat
|
||||
maintainer-makefile
|
||||
malloc
|
||||
manywarnings
|
||||
mbrtowc
|
||||
mbsalign
|
||||
mbswidth
|
||||
memcasecmp
|
||||
memchr
|
||||
memcmp2
|
||||
mempcpy
|
||||
memrchr
|
||||
mgetgroups
|
||||
mkancesdirs
|
||||
mkdir
|
||||
mkdir-p
|
||||
mkstemp
|
||||
mktime
|
||||
modechange
|
||||
mountlist
|
||||
mpsort
|
||||
obstack
|
||||
pathmax
|
||||
perl
|
||||
physmem
|
||||
posix-shell
|
||||
posixtm
|
||||
posixver
|
||||
priv-set
|
||||
progname
|
||||
propername
|
||||
putenv
|
||||
quote
|
||||
quotearg
|
||||
raise
|
||||
randint
|
||||
randperm
|
||||
readlink
|
||||
readtokens
|
||||
readtokens0
|
||||
readutmp
|
||||
realloc
|
||||
regex
|
||||
rename
|
||||
rename-dest-slash
|
||||
rmdir
|
||||
root-dev-ino
|
||||
rpmatch
|
||||
safe-read
|
||||
same
|
||||
save-cwd
|
||||
savedir
|
||||
savewd
|
||||
selinux-at
|
||||
settime
|
||||
sig2str
|
||||
sigaction
|
||||
ssize_t
|
||||
stat-macros
|
||||
stat-time
|
||||
stdbool
|
||||
stdlib-safer
|
||||
stpcpy
|
||||
stpncpy
|
||||
strdup-posix
|
||||
strftime
|
||||
strpbrk
|
||||
strsignal
|
||||
strtoimax
|
||||
strtoumax
|
||||
strverscmp
|
||||
symlink
|
||||
sys_stat
|
||||
timespec
|
||||
tzset
|
||||
uname
|
||||
unicodeio
|
||||
unistd-safer
|
||||
unlink-busy
|
||||
unlocked-io
|
||||
update-copyright
|
||||
uptime
|
||||
useless-if-before-free
|
||||
userspec
|
||||
utimecmp
|
||||
utimens
|
||||
vasprintf-posix
|
||||
vc-list-files
|
||||
verify
|
||||
verror
|
||||
version-etc-fsf
|
||||
warnings
|
||||
wcwidth
|
||||
winsz-ioctl
|
||||
winsz-termios
|
||||
write-any-file
|
||||
xalloc
|
||||
xfreopen
|
||||
xgetcwd
|
||||
xgethostname
|
||||
xmemcoll
|
||||
xnanosleep
|
||||
xprintf
|
||||
xprintf-posix
|
||||
xreadlink
|
||||
xstrtod
|
||||
xstrtoimax
|
||||
xstrtol
|
||||
xstrtold
|
||||
xstrtoumax
|
||||
yesno
|
||||
$avoided_gnulib_modules
|
||||
$obsolete_gnulib_modules
|
||||
acl alloca announce-gen argmatch assert backupfile base64
|
||||
c-strcase c-strtod
|
||||
c-strtold calloc canon-host canonicalize chown cloexec
|
||||
config-h configmake
|
||||
closeout cycle-check d-ino d-type diacrit dirfd dirname dup2
|
||||
error euidaccess exclude exitfail fchdir fcntl fcntl-safer fdl
|
||||
file-type fileblocks filemode filenamecat fnmatch-gnu
|
||||
fopen-safer
|
||||
fprintftime fsusage ftruncate fts getdate getgroups gethrxtime
|
||||
getline getloadavg getndelim2 getopt getpagesize getpass-gnu
|
||||
gettext gettime gettimeofday getugroups getusershell gnupload
|
||||
group-member hard-locale hash hash-pjw host-os human idcache
|
||||
inttostr inttypes isapipe
|
||||
lchmod lchown lib-ignore linebuffer link-follow
|
||||
long-options lstat malloc mbswidth md5 memcasecmp mempcpy
|
||||
memrchr mkancesdirs mkdir mkdir-p mkstemp mktime modechange
|
||||
mountlist mpsort obstack pathmax perl physmem posixtm posixver putenv
|
||||
quote quotearg raise readlink readtokens readtokens0 readutmp
|
||||
realloc regex rename-dest-slash rmdir rmdir-errno
|
||||
root-dev-ino
|
||||
rpmatch
|
||||
safe-read same
|
||||
save-cwd savedir savewd
|
||||
selinux-at
|
||||
settime sha1 sig2str ssize_t stat-macros
|
||||
stat-time stdbool stdlib-safer stpcpy strftime
|
||||
strpbrk strtoimax strtoumax strverscmp sys_stat timespec tzset
|
||||
unicodeio unistd-safer unlink-busy unlinkdir unlocked-io
|
||||
uptime userspec utimecmp utimens vasprintf verify version-etc-fsf
|
||||
wcwidth winsz-ioctl winsz-termios xalloc xgetcwd xgethostname
|
||||
xmemcoll xnanosleep xreadlink xreadlink-with-size xstrtod xstrtoimax
|
||||
xstrtol xstrtold xstrtoumax yesno
|
||||
"
|
||||
|
||||
# Other locale categories that need message catalogs.
|
||||
@@ -253,27 +77,10 @@ EXTRA_LOCALE_CATEGORIES=LC_TIME
|
||||
|
||||
# Additional xgettext options to use. Use "\\\newline" to break lines.
|
||||
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
|
||||
--flag=asnprintf:3:c-format\\\
|
||||
--flag=asprintf:2:c-format\\\
|
||||
--flag=error:3:c-format\\\
|
||||
--flag=error_at_line:5:c-format\\\
|
||||
--flag=vasnprintf:3:c-format\\\
|
||||
--flag=vasprintf:2:c-format\\\
|
||||
--flag=verror:3:c-format\\\
|
||||
--flag=verror_at_line:5:c-format\\\
|
||||
--flag=wrapf:1:c-format\\\
|
||||
--flag=xasprintf:1:c-format\\\
|
||||
--flag=xfprintf:2:c-format\\\
|
||||
--flag=xprintf:1:c-format\\\
|
||||
--from-code=UTF-8\\\
|
||||
'
|
||||
|
||||
# Append these, since we use the propername module.
|
||||
see_manual='"This is a proper name. See the gettext manual, section Names."'
|
||||
see_manual=\'"$see_manual"\'
|
||||
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
|
||||
--keyword=proper_name:1,'"$see_manual"'\\\
|
||||
--keyword=proper_name_utf8:1,'"$see_manual"'\\\
|
||||
--flag=asprintf:2:c-format --flag=vasprintf:2:c-format\\\
|
||||
--flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\
|
||||
--flag=wrapf:1:c-format\\\
|
||||
'
|
||||
|
||||
# If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]"
|
||||
@@ -296,37 +103,12 @@ if test $gettext_external = 1; then
|
||||
m4/glibc2.m4
|
||||
m4/intdiv0.m4
|
||||
m4/lcmessage.m4
|
||||
m4/lock.m4
|
||||
m4/printf-posix.m4
|
||||
m4/size_max.m4
|
||||
m4/uintmax_t.m4
|
||||
m4/ulonglong.m4
|
||||
m4/visibility.m4
|
||||
m4/xsize.m4
|
||||
'
|
||||
fi
|
||||
|
||||
gnulib_tool_option_extras="--tests-base=$bt/gnulib-tests --with-tests"
|
||||
|
||||
# Build prerequisites
|
||||
buildreq="\
|
||||
autoconf 2.61
|
||||
automake 1.11
|
||||
autopoint -
|
||||
bison -
|
||||
gettext -
|
||||
git 1.4.4
|
||||
gperf -
|
||||
gzip -
|
||||
makeinfo -
|
||||
perl 5.5
|
||||
rsync -
|
||||
tar -
|
||||
"
|
||||
|
||||
# Automake requires that ChangeLog exist.
|
||||
touch ChangeLog || exit 1
|
||||
|
||||
bootstrap_epilogue()
|
||||
{
|
||||
# Change paths in gnulib-tests/gnulib.mk from "../.." to "..".
|
||||
m=gnulib-tests/gnulib.mk
|
||||
sed 's,\.\./\.\.,..,g' $m > $m-t
|
||||
mv -f $m-t $m
|
||||
}
|
||||
|
||||
14
build-aux/.cvsignore
Normal file
14
build-aux/.cvsignore
Normal file
@@ -0,0 +1,14 @@
|
||||
announce-gen
|
||||
compile
|
||||
config.guess
|
||||
config.rpath
|
||||
config.sub
|
||||
depcomp
|
||||
gnupload
|
||||
install-sh
|
||||
link-warning.h
|
||||
mdate-sh
|
||||
missing
|
||||
mkinstalldirs
|
||||
texinfo.tex
|
||||
ylwrap
|
||||
13
build-aux/.gitignore
vendored
Normal file
13
build-aux/.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
announce-gen
|
||||
compile
|
||||
config.guess
|
||||
config.rpath
|
||||
config.sub
|
||||
depcomp
|
||||
gnupload
|
||||
install-sh
|
||||
link-warning.h
|
||||
mdate-sh
|
||||
missing
|
||||
texinfo.tex
|
||||
ylwrap
|
||||
@@ -1,13 +1,3 @@
|
||||
2007-09-29 Eric Blake <ebb9@byu.net>
|
||||
|
||||
* check.mk (%.log): Also allow suffix-less tests, on platforms
|
||||
where $(EXEEXT) is not empty.
|
||||
|
||||
2007-09-15 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* vc-list-files: Remove mercurial support.
|
||||
Check for CVS first. Adjust comments.
|
||||
|
||||
2007-01-30 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* vc-list-files: Select column 2, not 3 (hg-0.9.3's manifest format
|
||||
@@ -234,7 +224,8 @@
|
||||
|
||||
-----
|
||||
|
||||
Copyright (C) 2002-2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without
|
||||
modification, are permitted provided the copyright notice
|
||||
456
build-aux/cvsu
456
build-aux/cvsu
@@ -6,18 +6,20 @@
|
||||
# Initially written by Tom Tromey <tromey@cygnus.com>
|
||||
# Completely rewritten by Pavel Roskin <proski@gnu.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
|
||||
require 5.004;
|
||||
@@ -27,20 +29,20 @@ use Time::Local;
|
||||
use strict;
|
||||
|
||||
use vars qw($list_types %messages %options @batch_list $batch_cmd
|
||||
$no_recurse $explain_type $find_mode $short_print
|
||||
$no_cvsignore $nolinks $file $single_filename $curr_dir
|
||||
@common_ignores $ignore_rx %entries %subdirs %removed);
|
||||
$no_recurse $explain_type $find_mode $short_print
|
||||
$no_cvsignore $nolinks $file $single_filename $curr_dir
|
||||
@common_ignores $ignore_rx %entries %subdirs %removed);
|
||||
|
||||
use constant SUBDIR_FOUND => 1;
|
||||
use constant SUBDIR_CVS => 2;
|
||||
|
||||
# This list comes from the CVS manual.
|
||||
use constant STANDARD_IGNORES =>
|
||||
('RCS', 'SCCS', 'CVS', 'CVS.adm', 'RCSLOG', 'cvslog.*', 'tags',
|
||||
'TAGS', '.make.state', '.nse_depinfo', '*~', '#*', '.#*', ',*',
|
||||
"_\$*", "*\$", '*.old', '*.bak', '*.BAK', '*.orig', '*.rej',
|
||||
'.del-*', '*.a', '*.olb', '*.o', '*.obj', '*.so', '*.exe',
|
||||
'*.Z', '*.elc', '*.ln', 'core');
|
||||
('RCS', 'SCCS', 'CVS', 'CVS.adm', 'RCSLOG', 'cvslog.*', 'tags',
|
||||
'TAGS', '.make.state', '.nse_depinfo', '*~', '#*', '.#*', ',*',
|
||||
"_\$*", "*\$", '*.old', '*.bak', '*.BAK', '*.orig', '*.rej',
|
||||
'.del-*', '*.a', '*.olb', '*.o', '*.obj', '*.so', '*.exe',
|
||||
'*.Z', '*.elc', '*.ln', 'core');
|
||||
|
||||
# 3-letter month names in POSIX locale, for fast date decoding
|
||||
my %months = (
|
||||
@@ -62,20 +64,20 @@ my %months = (
|
||||
sub usage ()
|
||||
{
|
||||
print "Usage:\n" .
|
||||
" cvsu [OPTIONS] [FILE] ...\n" .
|
||||
"Options:\n" .
|
||||
" --local Disable recursion\n" .
|
||||
" --explain Verbosely print status of files\n" .
|
||||
" --find Emulate find - filenames only\n" .
|
||||
" --short Don't print paths\n" .
|
||||
" --ignore Don't read .cvsignore\n" .
|
||||
" --messages List known file types and long messages\n" .
|
||||
" --nolinks Disable recognizing hard and soft links\n" .
|
||||
" --types=[^]LIST Print only file types [not] from LIST\n" .
|
||||
" --batch=COMMAND Execute this command on files\n" .
|
||||
" --help Print this usage information\n" .
|
||||
" --version Print version number\n" .
|
||||
"Abbreviations and short options are supported\n";
|
||||
" cvsu [OPTIONS] [FILE] ...\n" .
|
||||
"Options:\n" .
|
||||
" --local Disable recursion\n" .
|
||||
" --explain Verbosely print status of files\n" .
|
||||
" --find Emulate find - filenames only\n" .
|
||||
" --short Don't print paths\n" .
|
||||
" --ignore Don't read .cvsignore\n" .
|
||||
" --messages List known file types and long messages\n" .
|
||||
" --nolinks Disable recognizing hard and soft links\n" .
|
||||
" --types=[^]LIST Print only file types [not] from LIST\n" .
|
||||
" --batch=COMMAND Execute this command on files\n" .
|
||||
" --help Print this usage information\n" .
|
||||
" --version Print version number\n" .
|
||||
"Abbreviations and short options are supported\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
@@ -90,11 +92,11 @@ sub version ()
|
||||
sub adjust_types ()
|
||||
{
|
||||
if ($list_types =~ m{^\^(.*)$}) {
|
||||
$list_types = "";
|
||||
foreach (keys %messages) {
|
||||
$list_types .= $_
|
||||
if (index ($1, $_) < 0);
|
||||
}
|
||||
$list_types = "";
|
||||
foreach (keys %messages) {
|
||||
$list_types .= $_
|
||||
if (index ($1, $_) < 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,12 +106,12 @@ sub list_messages ()
|
||||
my $default_mark;
|
||||
print "Recognizable file types are:\n";
|
||||
foreach (sort keys %messages) {
|
||||
if (index($list_types, $_) >= 0) {
|
||||
$default_mark = "*";
|
||||
} else {
|
||||
$default_mark = " ";
|
||||
}
|
||||
print " $default_mark $_ $messages{$_}\n";
|
||||
if (index($list_types, $_) >= 0) {
|
||||
$default_mark = "*";
|
||||
} else {
|
||||
$default_mark = " ";
|
||||
}
|
||||
print " $default_mark $_ $messages{$_}\n";
|
||||
}
|
||||
print "* indicates file types listed by default\n";
|
||||
exit 0;
|
||||
@@ -124,28 +126,28 @@ sub init_ignores ()
|
||||
push @common_ignores, STANDARD_IGNORES;
|
||||
|
||||
unless (defined($HOME)) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
my $home_cvsignore = "${HOME}/.cvsignore";
|
||||
|
||||
if (-f "$home_cvsignore") {
|
||||
|
||||
unless (open (CVSIGNORE, "< $home_cvsignore")) {
|
||||
error ("couldn't open $home_cvsignore: $!");
|
||||
}
|
||||
unless (open (CVSIGNORE, "< $home_cvsignore")) {
|
||||
error ("couldn't open $home_cvsignore: $!");
|
||||
}
|
||||
|
||||
while (<CVSIGNORE>) {
|
||||
push (@common_ignores, split);
|
||||
}
|
||||
while (<CVSIGNORE>) {
|
||||
push (@common_ignores, split);
|
||||
}
|
||||
|
||||
close (CVSIGNORE);
|
||||
close (CVSIGNORE);
|
||||
}
|
||||
|
||||
my $CVSIGNOREENV = $ENV{"CVSIGNORE"};
|
||||
|
||||
unless (defined($CVSIGNOREENV)) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
my @ignores_var = split (/ /, $CVSIGNOREENV);
|
||||
@@ -157,15 +159,15 @@ sub init_ignores ()
|
||||
# Newline is added at the end.
|
||||
sub error ($)
|
||||
{
|
||||
print STDERR "cvsu: ERROR: " . shift(@_) . "\n";
|
||||
exit 1;
|
||||
print STDERR "cvsu: ERROR: " . shift(@_) . "\n";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
# execute commands from @exec_list with $exec_cmd
|
||||
sub do_batch ()
|
||||
{
|
||||
my @cmd_list = split (' ', $batch_cmd);
|
||||
system (@cmd_list, @batch_list);
|
||||
my @cmd_list = split (' ', $batch_cmd);
|
||||
system (@cmd_list, @batch_list);
|
||||
}
|
||||
|
||||
# print files status
|
||||
@@ -177,34 +179,34 @@ sub file_status ($)
|
||||
my $pathfile;
|
||||
|
||||
return
|
||||
if $ignore_rx ne '' && $type =~ /[?SLD]/ && $file =~ /$ignore_rx/;
|
||||
if $ignore_rx ne '' && $type =~ /[?SLD]/ && $file =~ /$ignore_rx/;
|
||||
|
||||
return
|
||||
if (index($list_types, $type) < 0);
|
||||
if (index($list_types, $type) < 0);
|
||||
|
||||
$pathfile = $curr_dir . $file;
|
||||
|
||||
if (defined($batch_cmd)) {
|
||||
push (@batch_list, $pathfile);
|
||||
# 1000 items in the command line might be too much for HP-UX
|
||||
if ($#batch_list > 1000) {
|
||||
do_batch();
|
||||
undef @batch_list;
|
||||
}
|
||||
push (@batch_list, $pathfile);
|
||||
# 1000 items in the command line might be too much for HP-UX
|
||||
if ($#batch_list > 1000) {
|
||||
do_batch();
|
||||
undef @batch_list;
|
||||
}
|
||||
}
|
||||
|
||||
if ($short_print) {
|
||||
$item = $file;
|
||||
$item = $file;
|
||||
} else {
|
||||
$item = $pathfile;
|
||||
$item = $pathfile;
|
||||
}
|
||||
|
||||
if ($find_mode) {
|
||||
print "$item\n";
|
||||
print "$item\n";
|
||||
} else {
|
||||
$type = $messages{$type}
|
||||
if ($explain_type);
|
||||
print "$type $item\n";
|
||||
$type = $messages{$type}
|
||||
if ($explain_type);
|
||||
print "$type $item\n";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,28 +221,28 @@ sub load_entries ($)
|
||||
my %ent = ();
|
||||
|
||||
unless (open (ENTRIES, "< $entries_file")) {
|
||||
error ("couldn't open $entries_file: $!");
|
||||
error ("couldn't open $entries_file: $!");
|
||||
}
|
||||
while (<ENTRIES>) {
|
||||
chomp;
|
||||
$ent{$_} = 1;
|
||||
chomp;
|
||||
$ent{$_} = 1;
|
||||
}
|
||||
close (ENTRIES);
|
||||
|
||||
if (open (ENTRIES, "< $entries_log_file")) {
|
||||
while (<ENTRIES>) {
|
||||
chomp;
|
||||
if ( m{^A (.+)} ) {
|
||||
$ent{$1} = 1;
|
||||
} elsif ( m{^R (.+)} ) {
|
||||
delete $ent{$1};
|
||||
} else {
|
||||
# Note: "cvs commit" helps even when you are offline
|
||||
error ("$entries_log_file:$.: unrecognizable line, " .
|
||||
"try \"cvs commit\"");
|
||||
}
|
||||
}
|
||||
close (ENTRIES);
|
||||
while (<ENTRIES>) {
|
||||
chomp;
|
||||
if ( m{^A (.+)} ) {
|
||||
$ent{$1} = 1;
|
||||
} elsif ( m{^R (.+)} ) {
|
||||
delete $ent{$1};
|
||||
} else {
|
||||
# Note: "cvs commit" helps even when you are offline
|
||||
error ("$entries_log_file:$.: unrecognizable line, " .
|
||||
"try \"cvs commit\"");
|
||||
}
|
||||
}
|
||||
close (ENTRIES);
|
||||
}
|
||||
|
||||
return keys %ent;
|
||||
@@ -260,28 +262,28 @@ sub process_arg ($)
|
||||
local $single_filename = 0;
|
||||
|
||||
if ( $arg eq "" or -d $arg ) {
|
||||
$curr_dir = $arg;
|
||||
my $real_curr_dir = $curr_dir eq "" ? "." : $curr_dir;
|
||||
$curr_dir = $arg;
|
||||
my $real_curr_dir = $curr_dir eq "" ? "." : $curr_dir;
|
||||
|
||||
error ("$real_curr_dir is not a directory")
|
||||
unless ( -d $real_curr_dir );
|
||||
error ("$real_curr_dir is not a directory")
|
||||
unless ( -d $real_curr_dir );
|
||||
|
||||
# Scan present files.
|
||||
file_status (".");
|
||||
opendir (DIR, $real_curr_dir) ||
|
||||
error ("couldn't open directory $real_curr_dir: $!");
|
||||
foreach (readdir (DIR)) {
|
||||
$found_files {$_} = 1;
|
||||
}
|
||||
closedir (DIR);
|
||||
# Scan present files.
|
||||
file_status (".");
|
||||
opendir (DIR, $real_curr_dir) ||
|
||||
error ("couldn't open directory $real_curr_dir: $!");
|
||||
foreach (readdir (DIR)) {
|
||||
$found_files {$_} = 1;
|
||||
}
|
||||
closedir (DIR);
|
||||
} else {
|
||||
$single_filename = basename $arg;
|
||||
$curr_dir = dirname $arg;
|
||||
$found_files{$single_filename} = 1 if lstat $arg;
|
||||
$single_filename = basename $arg;
|
||||
$curr_dir = dirname $arg;
|
||||
$found_files{$single_filename} = 1 if lstat $arg;
|
||||
}
|
||||
|
||||
$curr_dir .= "/"
|
||||
unless ( $curr_dir eq "" || $curr_dir =~ m{/$} );
|
||||
unless ( $curr_dir eq "" || $curr_dir =~ m{/$} );
|
||||
|
||||
# Scan CVS/Entries.
|
||||
my %entries = ();
|
||||
@@ -289,118 +291,118 @@ sub process_arg ($)
|
||||
my %removed = ();
|
||||
|
||||
foreach ( load_entries ("${curr_dir}CVS/Entries") ) {
|
||||
if ( m{^D/([^/]+)/} ) {
|
||||
$subdirs{$1} = SUBDIR_FOUND if !$single_filename;
|
||||
} elsif ( m{^/([^/]+)/([^/])[^/]*/([^/]*)/} ) {
|
||||
if ( !$single_filename or $single_filename eq $1 ) {
|
||||
$entries{$1} = $3;
|
||||
$removed{$1} = 1
|
||||
if $2 eq '-';
|
||||
}
|
||||
} elsif ( m{^D$} ) {
|
||||
next;
|
||||
} else {
|
||||
error ("${curr_dir}CVS/Entries: unrecognizable line");
|
||||
}
|
||||
if ( m{^D/([^/]+)/} ) {
|
||||
$subdirs{$1} = SUBDIR_FOUND if !$single_filename;
|
||||
} elsif ( m{^/([^/]+)/([^/])[^/]*/([^/]*)/} ) {
|
||||
if ( !$single_filename or $single_filename eq $1 ) {
|
||||
$entries{$1} = $3;
|
||||
$removed{$1} = 1
|
||||
if $2 eq '-';
|
||||
}
|
||||
} elsif ( m{^D$} ) {
|
||||
next;
|
||||
} else {
|
||||
error ("${curr_dir}CVS/Entries: unrecognizable line");
|
||||
}
|
||||
}
|
||||
|
||||
if ( $single_filename && !$entries{$single_filename} &&
|
||||
!$found_files{$single_filename} ) {
|
||||
error ("nothing known about $arg");
|
||||
!$found_files{$single_filename} ) {
|
||||
error ("nothing known about $arg");
|
||||
}
|
||||
|
||||
# Scan .cvsignore if any
|
||||
unless ($no_cvsignore) {
|
||||
my (@ignore_list) = ();
|
||||
my (@ignore_list) = ();
|
||||
|
||||
if (-f "${curr_dir}.cvsignore") {
|
||||
open (CVSIGNORE, "< ${curr_dir}.cvsignore")
|
||||
|| error ("couldn't open ${curr_dir}.cvsignore: $!");
|
||||
while (<CVSIGNORE>) {
|
||||
push (@ignore_list, split);
|
||||
}
|
||||
close (CVSIGNORE);
|
||||
}
|
||||
if (-f "${curr_dir}.cvsignore") {
|
||||
open (CVSIGNORE, "< ${curr_dir}.cvsignore")
|
||||
|| error ("couldn't open ${curr_dir}.cvsignore: $!");
|
||||
while (<CVSIGNORE>) {
|
||||
push (@ignore_list, split);
|
||||
}
|
||||
close (CVSIGNORE);
|
||||
}
|
||||
|
||||
my ($iter);
|
||||
foreach $iter (@ignore_list, @common_ignores) {
|
||||
if ($iter eq '!') {
|
||||
$ignore_rx = ''
|
||||
} else {
|
||||
if ($ignore_rx eq '') {
|
||||
$ignore_rx = '^(';
|
||||
} else {
|
||||
$ignore_rx .= '|';
|
||||
}
|
||||
$ignore_rx .= glob_to_rx ($iter);
|
||||
}
|
||||
}
|
||||
$ignore_rx .= ')$'
|
||||
if $ignore_rx ne '';
|
||||
my ($iter);
|
||||
foreach $iter (@ignore_list, @common_ignores) {
|
||||
if ($iter eq '!') {
|
||||
$ignore_rx = ''
|
||||
} else {
|
||||
if ($ignore_rx eq '') {
|
||||
$ignore_rx = '^(';
|
||||
} else {
|
||||
$ignore_rx .= '|';
|
||||
}
|
||||
$ignore_rx .= glob_to_rx ($iter);
|
||||
}
|
||||
}
|
||||
$ignore_rx .= ')$'
|
||||
if $ignore_rx ne '';
|
||||
}
|
||||
|
||||
# File is missing
|
||||
foreach $file (sort keys %entries) {
|
||||
unless ($found_files{$file}) {
|
||||
if ($removed{$file}) {
|
||||
file_status("R");
|
||||
} else {
|
||||
file_status("U");
|
||||
}
|
||||
}
|
||||
unless ($found_files{$file}) {
|
||||
if ($removed{$file}) {
|
||||
file_status("R");
|
||||
} else {
|
||||
file_status("U");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach $file (sort keys %found_files) {
|
||||
next if ($file eq '.' || $file eq '..');
|
||||
lstat ($curr_dir . $file) ||
|
||||
error ("lstat() failed on $curr_dir . $file");
|
||||
if (! $nolinks && -l _) {
|
||||
file_status ("L");
|
||||
} elsif (-d _) {
|
||||
if ($file eq 'CVS') {
|
||||
file_status ("C");
|
||||
} elsif ($subdirs{$file}) {
|
||||
$subdirs{$file} = SUBDIR_CVS;
|
||||
} else {
|
||||
file_status ("D"); # Unknown directory
|
||||
}
|
||||
} elsif (! (-f _) && ! (-l _)) {
|
||||
file_status ("S"); # This must be something very special
|
||||
} elsif (! $nolinks && (stat _) [3] > 1 ) {
|
||||
file_status ("H"); # Hard link
|
||||
} elsif (! $entries{$file}) {
|
||||
file_status ("?");
|
||||
} elsif ($entries{$file} =~ /^Initial |^dummy /) {
|
||||
file_status ("A");
|
||||
} elsif ($entries{$file} =~ /^Result of merge/) {
|
||||
file_status ("G");
|
||||
} elsif ($entries{$file} !~
|
||||
/^(...) (...) (..) (..):(..):(..) (....)$/) {
|
||||
error ("Invalid timestamp for $curr_dir$file: $entries{$file}");
|
||||
} else {
|
||||
my $cvtime = timegm($6, $5, $4, $3, $months{$2}, $7 - 1900);
|
||||
my $mtime = (stat _) [9];
|
||||
if ($cvtime == $mtime) {
|
||||
file_status ("F");
|
||||
} elsif ($cvtime < $mtime) {
|
||||
file_status ("M");
|
||||
} else {
|
||||
file_status ("O");
|
||||
}
|
||||
}
|
||||
next if ($file eq '.' || $file eq '..');
|
||||
lstat ($curr_dir . $file) ||
|
||||
error ("lstat() failed on $curr_dir . $file");
|
||||
if (! $nolinks && -l _) {
|
||||
file_status ("L");
|
||||
} elsif (-d _) {
|
||||
if ($file eq 'CVS') {
|
||||
file_status ("C");
|
||||
} elsif ($subdirs{$file}) {
|
||||
$subdirs{$file} = SUBDIR_CVS;
|
||||
} else {
|
||||
file_status ("D"); # Unknown directory
|
||||
}
|
||||
} elsif (! (-f _) && ! (-l _)) {
|
||||
file_status ("S"); # This must be something very special
|
||||
} elsif (! $nolinks && (stat _) [3] > 1 ) {
|
||||
file_status ("H"); # Hard link
|
||||
} elsif (! $entries{$file}) {
|
||||
file_status ("?");
|
||||
} elsif ($entries{$file} =~ /^Initial |^dummy /) {
|
||||
file_status ("A");
|
||||
} elsif ($entries{$file} =~ /^Result of merge/) {
|
||||
file_status ("G");
|
||||
} elsif ($entries{$file} !~
|
||||
/^(...) (...) (..) (..):(..):(..) (....)$/) {
|
||||
error ("Invalid timestamp for $curr_dir$file: $entries{$file}");
|
||||
} else {
|
||||
my $cvtime = timegm($6, $5, $4, $3, $months{$2}, $7 - 1900);
|
||||
my $mtime = (stat _) [9];
|
||||
if ($cvtime == $mtime) {
|
||||
file_status ("F");
|
||||
} elsif ($cvtime < $mtime) {
|
||||
file_status ("M");
|
||||
} else {
|
||||
file_status ("O");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Now do directories.
|
||||
unless ($no_recurse) {
|
||||
my $save_curr_dir = $curr_dir;
|
||||
foreach $file (sort keys %subdirs) {
|
||||
if ($subdirs{$file} == SUBDIR_FOUND) {
|
||||
$curr_dir = $save_curr_dir;
|
||||
file_status ("X");
|
||||
} elsif ($subdirs{$file} == SUBDIR_CVS) {
|
||||
process_arg ($save_curr_dir . $file)
|
||||
}
|
||||
}
|
||||
my $save_curr_dir = $curr_dir;
|
||||
foreach $file (sort keys %subdirs) {
|
||||
if ($subdirs{$file} == SUBDIR_FOUND) {
|
||||
$curr_dir = $save_curr_dir;
|
||||
file_status ("X");
|
||||
} elsif ($subdirs{$file} == SUBDIR_CVS) {
|
||||
process_arg ($save_curr_dir . $file)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -423,13 +425,13 @@ sub glob_to_rx ($)
|
||||
# Find parts in square brackets and copy them literally
|
||||
# Text outside brackets is processed by glob_to_rx_simple()
|
||||
while ($expr ne '') {
|
||||
if ($expr =~ /^(.*?)(\[.*?\])(.*)/) {
|
||||
$expr = $3;
|
||||
$result .= glob_to_rx_simple ($1) . $2;
|
||||
} else {
|
||||
$result .= glob_to_rx_simple ($expr);
|
||||
last;
|
||||
}
|
||||
if ($expr =~ /^(.*?)(\[.*?\])(.*)/) {
|
||||
$expr = $3;
|
||||
$result .= glob_to_rx_simple ($1) . $2;
|
||||
} else {
|
||||
$result .= glob_to_rx_simple ($expr);
|
||||
last;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
@@ -441,21 +443,21 @@ sub Main ()
|
||||
|
||||
# long status messages
|
||||
%messages = (
|
||||
"?" => "Unlisted file",
|
||||
"." => "Known directory",
|
||||
"F" => "Up-to-date file",
|
||||
"C" => "CVS admin directory",
|
||||
"M" => "Modified file",
|
||||
"S" => "Special file",
|
||||
"D" => "Unlisted directory",
|
||||
"L" => "Symbolic link",
|
||||
"H" => "Hard link",
|
||||
"U" => "Lost file",
|
||||
"X" => "Lost directory",
|
||||
"A" => "Newly added",
|
||||
"O" => "Older copy",
|
||||
"G" => "Result of merge",
|
||||
"R" => "Removed file"
|
||||
"?" => "Unlisted file",
|
||||
"." => "Known directory",
|
||||
"F" => "Up-to-date file",
|
||||
"C" => "CVS admin directory",
|
||||
"M" => "Modified file",
|
||||
"S" => "Special file",
|
||||
"D" => "Unlisted directory",
|
||||
"L" => "Symbolic link",
|
||||
"H" => "Hard link",
|
||||
"U" => "Lost file",
|
||||
"X" => "Lost directory",
|
||||
"A" => "Newly added",
|
||||
"O" => "Older copy",
|
||||
"G" => "Result of merge",
|
||||
"R" => "Removed file"
|
||||
);
|
||||
|
||||
undef @batch_list; # List of files for batch processing
|
||||
@@ -471,17 +473,17 @@ sub Main ()
|
||||
my $want_ver = 0; # Print version and exit
|
||||
|
||||
my %options = (
|
||||
"types=s" => \$list_types,
|
||||
"batch=s" => \$batch_cmd,
|
||||
"local" => \$no_recurse,
|
||||
"explain" => \$explain_type,
|
||||
"find" => \$find_mode,
|
||||
"short" => \$short_print,
|
||||
"ignore" => \$no_cvsignore,
|
||||
"messages" => \$want_msg,
|
||||
"nolinks" => \$nolinks,
|
||||
"help" => \$want_help,
|
||||
"version" => \$want_ver
|
||||
"types=s" => \$list_types,
|
||||
"batch=s" => \$batch_cmd,
|
||||
"local" => \$no_recurse,
|
||||
"explain" => \$explain_type,
|
||||
"find" => \$find_mode,
|
||||
"short" => \$short_print,
|
||||
"ignore" => \$no_cvsignore,
|
||||
"messages" => \$want_msg,
|
||||
"nolinks" => \$nolinks,
|
||||
"help" => \$want_help,
|
||||
"version" => \$want_ver
|
||||
);
|
||||
|
||||
GetOptions(%options);
|
||||
@@ -493,19 +495,19 @@ sub Main ()
|
||||
version() if $want_ver;
|
||||
|
||||
unless ($no_cvsignore) {
|
||||
init_ignores();
|
||||
init_ignores();
|
||||
}
|
||||
|
||||
if ($#ARGV < 0) {
|
||||
@ARGV = ("");
|
||||
@ARGV = ("");
|
||||
}
|
||||
|
||||
foreach (@ARGV) {
|
||||
process_arg ($_);
|
||||
process_arg ($_);
|
||||
}
|
||||
|
||||
if ($#batch_list >= 0) {
|
||||
do_batch();
|
||||
do_batch();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
60
build-aux/vc-list-files
Executable file
60
build-aux/vc-list-files
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/bin/sh
|
||||
# List the specified version-controlled files.
|
||||
|
||||
# Copyright (C) 2006, 2007 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
|
||||
# List the specified version-controlled files.
|
||||
# With no argument, list them all.
|
||||
# This script must be run solely from the top of a $srcdir build directory.
|
||||
|
||||
# If there's an argument, it must be a single, "."-relative directory name,
|
||||
# with no trailing slashes. In mercurial mode, it's used as part of a
|
||||
# "grep" pattern (prepend "^", append "/"), and in cvs mode, it's simply
|
||||
# used as an argument to the cvsu script.
|
||||
# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/
|
||||
|
||||
include_prefix=
|
||||
case $# in
|
||||
0) ;;
|
||||
1) include_prefix=$1 ;;
|
||||
*) echo "$0: too many arguments" 1>&2; exit 1 ;;
|
||||
esac
|
||||
|
||||
if test -d .git; then
|
||||
if test "x$include_prefix" = x; then
|
||||
git-ls-files
|
||||
else
|
||||
git-ls-files | grep "^$include_prefix/"
|
||||
fi
|
||||
elif test -d .hg; then
|
||||
if test "x$include_prefix" = x; then
|
||||
hg manifest | cut -d ' ' -f 2
|
||||
else
|
||||
hg manifest | cut -d ' ' -f 2 | grep "^$include_prefix/"
|
||||
fi
|
||||
elif test -x build-aux/cvsu; then
|
||||
build-aux/cvsu --find --types=AFGM $include_prefix
|
||||
else
|
||||
awk -F/ '{ \
|
||||
if (!$1 && $3 !~ /^-/) { \
|
||||
f=FILENAME; \
|
||||
sub(/CVS\/Entries/, "", f); \
|
||||
print f $2; \
|
||||
}}' \
|
||||
$(find ${*-*} -name Entries -print) /dev/null;
|
||||
fi
|
||||
221
cfg.mk
221
cfg.mk
@@ -1,221 +0,0 @@
|
||||
# Customize maint.mk -*- makefile -*-
|
||||
# Copyright (C) 2003-2009 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Use alpha.gnu.org for alpha and beta releases.
|
||||
# Use ftp.gnu.org for major releases.
|
||||
gnu_ftp_host-alpha = alpha.gnu.org
|
||||
gnu_ftp_host-beta = alpha.gnu.org
|
||||
gnu_ftp_host-major = ftp.gnu.org
|
||||
gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))
|
||||
|
||||
# Used in maint.mk's web-manual rule
|
||||
manual_title = Core GNU utilities
|
||||
|
||||
url_dir_list = \
|
||||
ftp://$(gnu_rel_host)/gnu/$(PACKAGE)
|
||||
|
||||
# The GnuPG ID of the key used to sign the tarballs.
|
||||
gpg_key_ID = B9AB9A16
|
||||
|
||||
# Tests not to run as part of "make distcheck".
|
||||
local-checks-to-skip =
|
||||
|
||||
# Tools used to bootstrap this package, used for "announcement".
|
||||
bootstrap-tools = autoconf,automake,gnulib,bison
|
||||
|
||||
# Now that we have better tests, make this the default.
|
||||
export VERBOSE = yes
|
||||
|
||||
old_NEWS_hash = 785e51bc9af87e7eb004f9ba24a0ca27
|
||||
|
||||
# Ensure that the list of O_ symbols used to compute O_FULLBLOCK is complete.
|
||||
dd = $(srcdir)/src/dd.c
|
||||
sc_dd_O_FLAGS:
|
||||
@rm -f $@.1 $@.2
|
||||
@{ echo O_FULLBLOCK; perl -nle '/^ +\| (O_\w*)$$/ and print $$1' \
|
||||
$(dd); } | sort > $@.1
|
||||
@{ echo O_NOFOLLOW; perl -nle '/{"[a-z]+",\s*(O_\w+)},/ and print $$1' \
|
||||
$(dd); } | sort > $@.2
|
||||
@diff -u $@.1 $@.2 || diff=1 || diff=; \
|
||||
rm -f $@.1 $@.2; \
|
||||
test "$$diff" \
|
||||
&& { echo '$(ME): $(dd) has inconsistent O_ flag lists'>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# Ensure that dd's definition of LONGEST_SYMBOL stays in sync
|
||||
# with the strings from the two affected variables.
|
||||
dd_c = $(srcdir)/src/dd.c
|
||||
sc_dd_max_sym_length:
|
||||
ifneq ($(wildcard $(dd_c)),)
|
||||
@len=$$( (sed -n '/conversions\[\] =$$/,/^};/p' $(dd_c);\
|
||||
sed -n '/flags\[\] =$$/,/^};/p' $(dd_c) ) \
|
||||
|sed -n '/"/s/^[^"]*"\([^"]*\)".*/\1/p' \
|
||||
| wc --max-line-length); \
|
||||
max=$$(sed -n '/^#define LONGEST_SYMBOL /s///p' $(dd_c) \
|
||||
|tr -d '"' | wc --max-line-length); \
|
||||
if test "$$len" = "$$max"; then :; else \
|
||||
echo 'dd.c: LONGEST_SYMBOL is not longest' 1>&2; \
|
||||
exit 1; \
|
||||
fi
|
||||
endif
|
||||
|
||||
# Many m4 macros names once began with `jm_'.
|
||||
# On 2004-04-13, they were all changed to start with gl_ instead.
|
||||
# Make sure that none are inadvertently reintroduced.
|
||||
sc_prohibit_jm_in_m4:
|
||||
@grep -nE 'jm_[A-Z]' \
|
||||
$$($(VC_LIST) m4 |grep '\.m4$$'; echo /dev/null) && \
|
||||
{ echo '$(ME): do not use jm_ in m4 macro names' \
|
||||
1>&2; exit 1; } || :
|
||||
|
||||
# Ensure that each root-requiring test is run via the "check-root" rule.
|
||||
sc_root_tests:
|
||||
@if test -d tests \
|
||||
&& grep check-root tests/Makefile.am>/dev/null 2>&1; then \
|
||||
t1=sc-root.expected; t2=sc-root.actual; \
|
||||
grep -nl '^require_root_$$' \
|
||||
$$($(VC_LIST) tests) |sed s,tests/,, |sort > $$t1; \
|
||||
sed -n '/^root_tests =[ ]*\\$$/,/[^\]$$/p' \
|
||||
$(srcdir)/tests/Makefile.am \
|
||||
| sed 's/^ *//;/^root_tests =/d' \
|
||||
| tr -s '\012\\' ' ' | fmt -1 | sort > $$t2; \
|
||||
diff -u $$t1 $$t2 || diff=1 || diff=; \
|
||||
rm -f $$t1 $$t2; \
|
||||
test "$$diff" \
|
||||
&& { echo 'tests/Makefile.am: missing check-root action'>&2; \
|
||||
exit 1; } || :; \
|
||||
fi
|
||||
|
||||
# Ensure that the syntax_check_exceptions file list in Makefile.am
|
||||
# stays in sync with corresponding files in the repository.
|
||||
sce = syntax_check_exceptions
|
||||
sc_x_sc_dist_check:
|
||||
@test "$$( ($(VC_LIST) | sed -n '/^.x-sc_/p'; \
|
||||
sed -n '/^$(sce) =[ ]*\\$$/,/[^\]$$/p' \
|
||||
$(srcdir)/Makefile.am \
|
||||
| sed 's/^ *//;/^$(sce) =/d' \
|
||||
| tr -s '\012\\' ' ' | fmt -1 \
|
||||
) | sort | uniq -u)" \
|
||||
&& { echo 'Makefile.am: $(sce) mismatch' >&2; exit 1; } || :;
|
||||
|
||||
headers_with_interesting_macro_defs = \
|
||||
exit.h \
|
||||
fcntl_.h \
|
||||
fnmatch_.h \
|
||||
intprops.h \
|
||||
inttypes_.h \
|
||||
lchown.h \
|
||||
openat.h \
|
||||
stat-macros.h \
|
||||
stdint_.h
|
||||
|
||||
# Create a list of regular expressions matching the names
|
||||
# of macros that are guaranteed by parts of gnulib to be defined.
|
||||
.re-defmac:
|
||||
@(cd $(srcdir)/lib; \
|
||||
for f in $(headers_with_interesting_macro_defs); do \
|
||||
test -f $$f && \
|
||||
sed -n '/^# *define \([^_ (][^ (]*\)[ (].*/s//\1/p' $$f; \
|
||||
done; \
|
||||
) | sort -u \
|
||||
| grep -Ev 'ATTRIBUTE_NORETURN|SIZE_MAX' \
|
||||
| sed 's/^/^# *define /' \
|
||||
> $@-t
|
||||
@mv $@-t $@
|
||||
|
||||
# Don't define macros that we already get from gnulib header files.
|
||||
sc_always_defined_macros: .re-defmac
|
||||
@if test -f $(srcdir)/src/system.h; then \
|
||||
trap 'rc=$$?; rm -f .re-defmac; exit $$rc' 0 1 2 3 15; \
|
||||
grep -f .re-defmac $$($(VC_LIST)) \
|
||||
&& { echo '$(ME): define the above via some gnulib .h file' \
|
||||
1>&2; exit 1; } || :; \
|
||||
fi
|
||||
|
||||
# Create a list of regular expressions matching the names
|
||||
# of files included from system.h. Exclude a couple.
|
||||
.re-list:
|
||||
@sed -n '/^# *include /s///p' $(srcdir)/src/system.h \
|
||||
| grep -Ev 'sys/(param|file)\.h' \
|
||||
| sed 's/ .*//;;s/^["<]/^# *include [<"]/;s/\.h[">]$$/\\.h[">]/' \
|
||||
> $@-t
|
||||
@mv $@-t $@
|
||||
|
||||
# Files in src/ should not include directly any of
|
||||
# the headers already included via system.h.
|
||||
sc_system_h_headers: .re-list
|
||||
@if test -f $(srcdir)/src/system.h; then \
|
||||
trap 'rc=$$?; rm -f .re-list; exit $$rc' 0 1 2 3 15; \
|
||||
grep -nE -f .re-list \
|
||||
$$($(VC_LIST_EXCEPT) | grep '^src/') \
|
||||
&& { echo '$(ME): the above are already included via system.h'\
|
||||
1>&2; exit 1; } || :; \
|
||||
fi
|
||||
|
||||
sc_sun_os_names:
|
||||
@grep -nEi \
|
||||
'solaris[^[:alnum:]]*2\.(7|8|9|[1-9][0-9])|sunos[^[:alnum:]][6-9]' \
|
||||
$$($(VC_LIST_EXCEPT)) && \
|
||||
{ echo '$(ME): found misuse of Sun OS version numbers' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
ALL_RECURSIVE_TARGETS += sc_tight_scope
|
||||
sc_tight_scope:
|
||||
@$(MAKE) -C src $@
|
||||
|
||||
ALL_RECURSIVE_TARGETS += sc_check-AUTHORS
|
||||
sc_check-AUTHORS:
|
||||
@$(MAKE) -C src $@
|
||||
|
||||
# Perl-based tests used to exec perl from a #!/bin/sh script.
|
||||
# Now they all start with #!/usr/bin/perl and the portability
|
||||
# infrastructure is in tests/Makefile.am. Make sure no old-style
|
||||
# script sneaks back in.
|
||||
sc_no_exec_perl_coreutils:
|
||||
@if test -f $(srcdir)/tests/Coreutils.pm; then \
|
||||
grep '^exec *\$$PERL.*MCoreutils' $$($(VC_LIST) tests) && \
|
||||
{ echo 1>&2 '$(ME): found anachronistic Perl-based tests'; \
|
||||
exit 1; } || :; \
|
||||
fi
|
||||
|
||||
# Ensure that date's --help output stays in sync with the info
|
||||
# documentation for GNU strftime. The only exception is %N,
|
||||
# which date accepts but GNU strftime does not.
|
||||
extract_char = sed 's/^[^%][^%]*%\(.\).*/\1/'
|
||||
sc_strftime_check:
|
||||
@if test -f $(srcdir)/src/date.c; then \
|
||||
grep '^ %. ' $(srcdir)/src/date.c | sort \
|
||||
| $(extract_char) > $@-src; \
|
||||
{ echo N; \
|
||||
info libc date calendar format | grep '^ `%.'\' \
|
||||
| $(extract_char); } | sort > $@-info; \
|
||||
diff -u $@-src $@-info || exit 1; \
|
||||
rm -f $@-src $@-info; \
|
||||
fi
|
||||
|
||||
# Indent only with spaces.
|
||||
sc_prohibit_tab_based_indentation:
|
||||
@re='^ * ' \
|
||||
msg='TAB in indentation; use only spaces' \
|
||||
$(_prohibit_regexp)
|
||||
|
||||
# Don't use "indent-tabs-mode: nil" anymore. No longer needed.
|
||||
sc_prohibit_emacs__indent_tabs_mode__setting:
|
||||
@re='^( *[*#] *)?indent-tabs-mode:' \
|
||||
msg='use of emacs indent-tabs-mode: setting' \
|
||||
$(_prohibit_regexp)
|
||||
|
||||
include $(srcdir)/dist-check.mk
|
||||
358
configure.ac
358
configure.ac
@@ -1,12 +1,12 @@
|
||||
# -*- autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
# Copyright (C) 1991, 1993-2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991, 1993-2007 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
# 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
|
||||
@@ -14,26 +14,20 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
dnl Written by Jim Meyering.
|
||||
|
||||
AC_PREREQ([2.61])
|
||||
AC_PREREQ(2.61)
|
||||
AC_INIT([GNU coreutils],[6.8+],[bug-coreutils@gnu.org])
|
||||
AC_CONFIG_SRCDIR(src/ls.c)
|
||||
|
||||
# Make inter-release version strings look like, e.g., v6.9-219-g58ddd, which
|
||||
# indicates that it is built from the 219th delta (in _some_ repository)
|
||||
# following the v6.9 tag, and that 58ddd is a prefix of the commit SHA1.
|
||||
AC_INIT([GNU coreutils],
|
||||
m4_esyscmd([build-aux/git-version-gen .tarball-version]),
|
||||
[bug-coreutils@gnu.org])
|
||||
|
||||
AC_CONFIG_SRCDIR([src/ls.c])
|
||||
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_AUX_DIR(build-aux)
|
||||
AC_CONFIG_HEADERS([lib/config.h:lib/config.hin])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.11 dist-xz color-tests parallel-tests])
|
||||
AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
|
||||
AB_INIT()
|
||||
AM_INIT_AUTOMAKE([1.10 dist-bzip2])
|
||||
|
||||
AC_PROG_CC_STDC
|
||||
AM_PROG_CC_C_O
|
||||
@@ -45,88 +39,22 @@ gl_EARLY
|
||||
gl_INIT
|
||||
coreutils_MACROS
|
||||
|
||||
AC_ARG_ENABLE([gcc-warnings],
|
||||
[AS_HELP_STRING([--enable-gcc-warnings],
|
||||
[turn on lots of GCC warnings (for developers)])],
|
||||
[case $enableval in
|
||||
yes|no) ;;
|
||||
*) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
|
||||
esac
|
||||
gl_gcc_warnings=$enableval],
|
||||
[gl_gcc_warnings=no]
|
||||
)
|
||||
|
||||
if test "$gl_gcc_warnings" = yes; then
|
||||
gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
|
||||
AC_SUBST([WERROR_CFLAGS])
|
||||
|
||||
nw=
|
||||
# This, $nw, is the list of warnings we disable.
|
||||
nw="$nw -Wdeclaration-after-statement" # too useful to forbid
|
||||
nw="$nw -Waggregate-return" # anachronistic
|
||||
nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h)
|
||||
nw="$nw -Wc++-compat" # We don't care about C++ compilers
|
||||
nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib
|
||||
nw="$nw -Wtraditional" # Warns on #elif which we use often
|
||||
nw="$nw -Wcast-qual" # Too many warnings for now
|
||||
nw="$nw -Wconversion" # Too many warnings for now
|
||||
nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
|
||||
nw="$nw -Wsign-conversion" # Too many warnings for now
|
||||
nw="$nw -Wtraditional-conversion" # Too many warnings for now
|
||||
nw="$nw -Wunreachable-code" # Too many warnings for now
|
||||
nw="$nw -Wpadded" # Our structs are not padded
|
||||
nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat
|
||||
nw="$nw -Wlogical-op" # any use of fwrite provokes this
|
||||
nw="$nw -Wformat-nonliteral" # who.c and pinky.c strftime uses
|
||||
nw="$nw -Wvla" # warnings in gettext.h
|
||||
nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__
|
||||
nw="$nw -Wswitch-enum" # Too many warnings for now
|
||||
nw="$nw -Wswitch-default" # Too many warnings for now
|
||||
nw="$nw -Wstack-protector" # not worth working around
|
||||
# things I might fix soon:
|
||||
nw="$nw -Wfloat-equal" # sort.c, seq.c
|
||||
nw="$nw -Wmissing-format-attribute" # copy.c
|
||||
nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c
|
||||
nw="$nw -Winline" # system.h's readdir_ignoring_dot_and_dotdot
|
||||
nw="$nw -Wstrict-overflow" # expr.c, pr.c, tr.c, factor.c
|
||||
# ?? -Wstrict-overflow
|
||||
|
||||
gl_MANYWARN_ALL_GCC([ws])
|
||||
gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
|
||||
for w in $ws; do
|
||||
gl_WARN_ADD([$w])
|
||||
done
|
||||
gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one
|
||||
gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now
|
||||
gl_WARN_ADD([-Wno-pointer-sign]) # Too many warnings for now
|
||||
gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
|
||||
|
||||
# In spite of excluding -Wlogical-op above, it is enabled, as of
|
||||
# gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
|
||||
gl_WARN_ADD([-Wno-logical-op])
|
||||
|
||||
gl_WARN_ADD([-fdiagnostics-show-option])
|
||||
|
||||
AC_SUBST([WARN_CFLAGS])
|
||||
|
||||
AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
|
||||
AC_DEFINE([_FORTIFY_SOURCE], [2],
|
||||
[enable compile-time and run-time bounds-checking, and some warnings])
|
||||
AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
|
||||
fi
|
||||
|
||||
AC_FUNC_FORK
|
||||
|
||||
optional_bin_progs=
|
||||
AC_CHECK_FUNCS([chroot],
|
||||
gl_ADD_PROG([optional_bin_progs], [chroot]))
|
||||
AC_CHECK_FUNCS([gethostid],
|
||||
gl_ADD_PROG([optional_bin_progs], [hostid]))
|
||||
AC_CHECK_FUNCS(uname,
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uname\$(EXEEXT)"
|
||||
MAN="$MAN uname.1")
|
||||
AC_CHECK_FUNCS(chroot,
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS chroot\$(EXEEXT)"
|
||||
MAN="$MAN chroot.1")
|
||||
AC_CHECK_FUNCS(gethostid,
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS hostid\$(EXEEXT)"
|
||||
MAN="$MAN hostid.1")
|
||||
|
||||
gl_WINSIZE_IN_PTEM
|
||||
|
||||
AC_MSG_CHECKING([whether localtime caches TZ])
|
||||
AC_CACHE_VAL([utils_cv_localtime_cache],
|
||||
AC_MSG_CHECKING(whether localtime caches TZ)
|
||||
AC_CACHE_VAL(utils_cv_localtime_cache,
|
||||
[if test x$ac_cv_func_tzset = xyes; then
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <time.h>
|
||||
#if STDC_HEADERS
|
||||
@@ -163,26 +91,26 @@ int main()
|
||||
[# If we have tzset, assume the worst when cross-compiling.
|
||||
utils_cv_localtime_cache=yes])
|
||||
else
|
||||
# If we lack tzset, report that localtime does not cache TZ,
|
||||
# since we can't invalidate the cache if we don't have tzset.
|
||||
utils_cv_localtime_cache=no
|
||||
# If we lack tzset, report that localtime does not cache TZ,
|
||||
# since we can't invalidate the cache if we don't have tzset.
|
||||
utils_cv_localtime_cache=no
|
||||
fi])dnl
|
||||
AC_MSG_RESULT([$utils_cv_localtime_cache])
|
||||
AC_MSG_RESULT($utils_cv_localtime_cache)
|
||||
if test $utils_cv_localtime_cache = yes; then
|
||||
AC_DEFINE([LOCALTIME_CACHE], [1], [FIXME])
|
||||
AC_DEFINE(LOCALTIME_CACHE, 1, [FIXME])
|
||||
fi
|
||||
|
||||
# SCO-ODT-3.0 is reported to need -los to link programs using initgroups
|
||||
AC_CHECK_FUNCS([initgroups])
|
||||
AC_CHECK_FUNCS(initgroups)
|
||||
if test $ac_cv_func_initgroups = no; then
|
||||
AC_CHECK_LIB([os], [initgroups])
|
||||
AC_CHECK_LIB(os, initgroups)
|
||||
fi
|
||||
|
||||
AC_CHECK_FUNCS([syslog])
|
||||
AC_CHECK_FUNCS(syslog)
|
||||
if test $ac_cv_func_syslog = no; then
|
||||
# syslog is not in the default libraries. See if it's in some other.
|
||||
for lib in bsd socket inet; do
|
||||
AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG], [1], [FIXME])
|
||||
AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG, 1, [FIXME])
|
||||
LIBS="$LIBS -l$lib"; break])
|
||||
done
|
||||
fi
|
||||
@@ -192,7 +120,7 @@ AC_CACHE_CHECK([for 3-argument setpriority function],
|
||||
[AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/resource.h>
|
||||
]],
|
||||
[[setpriority (0, 0, 0);]])],
|
||||
[utils_cv_func_setpriority=yes],
|
||||
@@ -202,72 +130,76 @@ if test $utils_cv_func_setpriority = no; then
|
||||
fi
|
||||
case $utils_cv_func_setpriority,$ac_cv_func_nice in
|
||||
*yes*)
|
||||
gl_ADD_PROG([optional_bin_progs], [nice])
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS nice\$(EXEEXT)"
|
||||
MAN="$MAN nice.1";;
|
||||
esac
|
||||
|
||||
AC_DEFUN([coreutils_DUMMY_1],
|
||||
[
|
||||
AC_REQUIRE([gl_READUTMP])
|
||||
if test $ac_cv_header_utmp_h = yes || test $ac_cv_header_utmpx_h = yes; then
|
||||
gl_ADD_PROG([optional_bin_progs], [who])
|
||||
gl_ADD_PROG([optional_bin_progs], [users])
|
||||
gl_ADD_PROG([optional_bin_progs], [pinky])
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS pinky\$(EXEEXT)"
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS users\$(EXEEXT)"
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS who\$(EXEEXT)"
|
||||
MAN="$MAN pinky.1 users.1 who.1"
|
||||
fi
|
||||
])
|
||||
coreutils_DUMMY_1
|
||||
|
||||
AC_MSG_CHECKING([ut_host in struct utmp])
|
||||
AC_CACHE_VAL([su_cv_func_ut_host_in_utmp],
|
||||
AC_MSG_CHECKING(ut_host in struct utmp)
|
||||
AC_CACHE_VAL(su_cv_func_ut_host_in_utmp,
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
|
||||
#include <utmp.h>]], [[struct utmp ut; return !sizeof ut.ut_host;]])],
|
||||
[su_cv_func_ut_host_in_utmp=yes],
|
||||
[su_cv_func_ut_host_in_utmp=no])])
|
||||
AC_MSG_RESULT([$su_cv_func_ut_host_in_utmp])
|
||||
AC_MSG_RESULT($su_cv_func_ut_host_in_utmp)
|
||||
if test $su_cv_func_ut_host_in_utmp = yes; then
|
||||
have_ut_host=1
|
||||
AC_DEFINE([HAVE_UT_HOST], [1], [FIXME])
|
||||
AC_DEFINE(HAVE_UT_HOST, 1, [FIXME])
|
||||
fi
|
||||
|
||||
if test -z "$have_ut_host"; then
|
||||
AC_MSG_CHECKING([ut_host in struct utmpx])
|
||||
AC_CACHE_VAL([su_cv_func_ut_host_in_utmpx],
|
||||
AC_MSG_CHECKING(ut_host in struct utmpx)
|
||||
AC_CACHE_VAL(su_cv_func_ut_host_in_utmpx,
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
|
||||
#include <utmpx.h>]], [[struct utmpx ut; return !sizeof ut.ut_host;]])],
|
||||
[su_cv_func_ut_host_in_utmpx=yes],
|
||||
[su_cv_func_ut_host_in_utmpx=no])])
|
||||
AC_MSG_RESULT([$su_cv_func_ut_host_in_utmpx])
|
||||
AC_MSG_RESULT($su_cv_func_ut_host_in_utmpx)
|
||||
if test $su_cv_func_ut_host_in_utmpx = yes; then
|
||||
AC_DEFINE([HAVE_UTMPX_H], [1], [FIXME])
|
||||
AC_DEFINE([HAVE_UT_HOST], [1], [FIXME])
|
||||
AC_DEFINE(HAVE_UTMPX_H, 1, [FIXME])
|
||||
AC_DEFINE(HAVE_UT_HOST, 1, [FIXME])
|
||||
fi
|
||||
fi
|
||||
|
||||
GNULIB_BOOT_TIME([gl_ADD_PROG([optional_bin_progs], [uptime])])
|
||||
GNULIB_BOOT_TIME(
|
||||
[OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uptime\$(EXEEXT)"
|
||||
MAN="$MAN uptime.1"])
|
||||
|
||||
AC_SYS_POSIX_TERMIOS()
|
||||
gl_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
|
||||
|
||||
if test $ac_cv_sys_posix_termios = yes; then
|
||||
gl_ADD_PROG([optional_bin_progs], [stty])
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS stty\$(EXEEXT)" MAN="$MAN stty.1"
|
||||
|
||||
AC_MSG_CHECKING([whether termios.h needs _XOPEN_SOURCE])
|
||||
AC_CACHE_VAL([su_cv_sys_termios_needs_xopen_source],
|
||||
[AC_EGREP_CPP([yes], [#include <termios.h>
|
||||
AC_MSG_CHECKING(whether termios.h needs _XOPEN_SOURCE)
|
||||
AC_CACHE_VAL(su_cv_sys_termios_needs_xopen_source,
|
||||
[AC_EGREP_CPP(yes, [#include <termios.h>
|
||||
#ifdef IUCLC
|
||||
yes
|
||||
#endif], su_cv_sys_termios_needs_xopen_source=no,
|
||||
AC_EGREP_CPP([yes], [#define _XOPEN_SOURCE
|
||||
AC_EGREP_CPP(yes, [#define _XOPEN_SOURCE
|
||||
#include <termios.h>
|
||||
#ifdef IUCLC
|
||||
yes
|
||||
#endif], su_cv_sys_termios_needs_xopen_source=yes,
|
||||
su_cv_sys_termios_needs_xopen_source=no))])
|
||||
AC_MSG_RESULT([$su_cv_sys_termios_needs_xopen_source])
|
||||
AC_MSG_RESULT($su_cv_sys_termios_needs_xopen_source)
|
||||
test $su_cv_sys_termios_needs_xopen_source = yes &&
|
||||
AC_DEFINE([TERMIOS_NEEDS_XOPEN_SOURCE], [1], [FIXME])
|
||||
AC_DEFINE(TERMIOS_NEEDS_XOPEN_SOURCE, 1, [FIXME])
|
||||
|
||||
AC_MSG_CHECKING([c_line in struct termios])
|
||||
AC_CACHE_VAL([su_cv_sys_c_line_in_termios],
|
||||
AC_MSG_CHECKING(c_line in struct termios)
|
||||
AC_CACHE_VAL(su_cv_sys_c_line_in_termios,
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if TERMIOS_NEEDS_XOPEN_SOURCE
|
||||
#define _XOPEN_SOURCE
|
||||
#endif
|
||||
@@ -275,9 +207,9 @@ yes
|
||||
#include <termios.h>]], [[struct termios t; return !sizeof t.c_line;]])],
|
||||
[su_cv_sys_c_line_in_termios=yes],
|
||||
[su_cv_sys_c_line_in_termios=no])])
|
||||
AC_MSG_RESULT([$su_cv_sys_c_line_in_termios])
|
||||
AC_MSG_RESULT($su_cv_sys_c_line_in_termios)
|
||||
test $su_cv_sys_c_line_in_termios = yes \
|
||||
&& AC_DEFINE([HAVE_C_LINE], [1], [FIXME])
|
||||
&& AC_DEFINE(HAVE_C_LINE, 1, [FIXME])
|
||||
fi
|
||||
|
||||
# FIXME: note that this macro appears above, too.
|
||||
@@ -286,10 +218,10 @@ gl_WINSIZE_IN_PTEM
|
||||
|
||||
gl_HEADER_TIOCGWINSZ_IN_TERMIOS_H
|
||||
|
||||
if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no && \
|
||||
test $gl_cv_sys_tiocgwinsz_needs_sys_ioctl_h = no; then
|
||||
AC_MSG_CHECKING([TIOCGWINSZ in sys/pty.h])
|
||||
AC_CACHE_VAL([su_cv_sys_tiocgwinsz_in_sys_pty_h],
|
||||
if test $jm_cv_sys_tiocgwinsz_needs_termios_h = no && \
|
||||
test $jm_cv_sys_tiocgwinsz_needs_sys_ioctl_h = no; then
|
||||
AC_MSG_CHECKING(TIOCGWINSZ in sys/pty.h)
|
||||
AC_CACHE_VAL(su_cv_sys_tiocgwinsz_in_sys_pty_h,
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
|
||||
#ifdef WINSIZE_IN_PTEM
|
||||
# include <sys/stream.h>
|
||||
@@ -300,10 +232,10 @@ if test $gl_cv_sys_tiocgwinsz_needs_termios_h = no && \
|
||||
#include <sys/pty.h>]], [[int x = TIOCGWINSZ;]])],
|
||||
[su_cv_sys_tiocgwinsz_in_sys_pty_h=yes],
|
||||
[su_cv_sys_tiocgwinsz_in_sys_pty_h=no])])
|
||||
AC_MSG_RESULT([$su_cv_sys_tiocgwinsz_in_sys_pty_h])
|
||||
AC_MSG_RESULT($su_cv_sys_tiocgwinsz_in_sys_pty_h)
|
||||
|
||||
test $su_cv_sys_tiocgwinsz_in_sys_pty_h = yes \
|
||||
&& AC_DEFINE([GWINSZ_IN_SYS_PTY], [1],
|
||||
&& AC_DEFINE(GWINSZ_IN_SYS_PTY, 1,
|
||||
[Define if your system defines TIOCGWINSZ in sys/pty.h.])
|
||||
fi
|
||||
|
||||
@@ -312,118 +244,14 @@ AC_CHECK_DECLS([strsignal, sys_siglist, _sys_siglist, __sys_siglist], , ,
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#include <signal.h>])
|
||||
|
||||
# For src/kill.c and src/printf.c.
|
||||
AC_CHECK_DECLS([strtoimax, strtoumax])
|
||||
|
||||
cu_LIB_CHECK
|
||||
cu_GMP
|
||||
|
||||
# Build df only if there's a point to it.
|
||||
if test $gl_cv_list_mounted_fs = yes && test $gl_cv_fs_space = yes; then
|
||||
gl_ADD_PROG([optional_bin_progs], [df])
|
||||
fi
|
||||
|
||||
# Limit stdbuf to ELF systems with GCC
|
||||
optional_pkglib_progs=
|
||||
AC_MSG_CHECKING([whether this is an ELF system])
|
||||
AC_EGREP_CPP([yes], [#if __ELF__
|
||||
yes
|
||||
#endif], [elf_sys=yes], [elf_sys=no])
|
||||
AC_MSG_RESULT([$elf_sys])
|
||||
if test "$elf_sys" = "yes" && \
|
||||
test "$GCC" = "yes"; then
|
||||
gl_ADD_PROG([optional_bin_progs], [stdbuf])
|
||||
gl_ADD_PROG([optional_pkglib_progs], [libstdbuf.so])
|
||||
fi
|
||||
|
||||
############################################################################
|
||||
mk="$srcdir/src/Makefile.am"
|
||||
# Extract all literal names from the definition of $(EXTRA_PROGRAMS)
|
||||
# in $mk but don't expand the variable references.
|
||||
# Append each literal name to $optional_bin_progs.
|
||||
v=EXTRA_PROGRAMS
|
||||
for gl_i in `sed -n '/^'$v' =/,/[[^\]]$/p' $mk \
|
||||
| sed 's/^ *//;/^\$.*/d;/^'$v' =/d' \
|
||||
| tr -s '\\015\\012\\\\' ' '`; do
|
||||
gl_ADD_PROG([optional_bin_progs], $gl_i)
|
||||
done
|
||||
|
||||
# As above, extract literal names from the definition of $(no_install__progs)
|
||||
# in $mk but don't expand the variable references.
|
||||
v=no_install__progs
|
||||
t=`sed -n '/^'$v' =/,/[[^\]]$/p' $mk \
|
||||
| sed 's/^ *//;/^\$.*/d;/^'$v' =/d' \
|
||||
| tr -s '\\015\\012\\\\' ' '`
|
||||
# Remove any trailing space.
|
||||
no_install_progs_default=`echo "$t"|sed 's/ $//'`
|
||||
|
||||
# Unfortunately, due to the way autoconf's AS_HELP_STRING works, the list
|
||||
# of default-not-installed programs, "arch hostname su", must appear in two
|
||||
# places: in this file below, and in $mk. Using "$no_install_progs_default"
|
||||
# below cannot work. And we can't substitute the names into $mk because
|
||||
# automake needs the literals, too.
|
||||
# The compromise is to ensure that the space-separated list extracted
|
||||
# above matches the literal 2nd argument below.
|
||||
c="$srcdir/configure.ac"
|
||||
re='^g''l_INCLUDE_EXCLUDE_PROG(.* [\[\(.*\)\]])'
|
||||
t=`sed -n '/'"$re"'/{s/'"$re"'/\1/;s/,/ /gp
|
||||
}' $c`
|
||||
case $t in
|
||||
$no_install_progs_default) ;;
|
||||
*) AC_MSG_ERROR([[internal error: g'l_INCLUDE_EXCLUDE_PROG's 2nd arg, $t,
|
||||
does not match the list of default-not-installed programs
|
||||
($no_install_progs_default) also recorded in $mk]],
|
||||
1) ;;
|
||||
esac
|
||||
|
||||
# Given the name of a variable containing a space-separated list of
|
||||
# install-by-default programs and the actual list do-not-install-by-default
|
||||
# programs, modify the former variable to reflect any "do-install" and
|
||||
# "don't-install" requests.
|
||||
# I.e., add any program name specified via --enable-install-program=..., and
|
||||
# remove any program name specified via --enable-no-install-program=...
|
||||
# Note how the second argument below is a literal, with "," separators.
|
||||
# That is required due to the way the macro works, and since the
|
||||
# corresponding ./configure option argument is comma-separated on input.
|
||||
gl_INCLUDE_EXCLUDE_PROG([optional_bin_progs], [arch,hostname,su])
|
||||
|
||||
# Set INSTALL_SU if su installation has been requested via
|
||||
# --enable-install-program=su.
|
||||
AC_SUBST([INSTALL_SU])
|
||||
case " $optional_bin_progs " in
|
||||
*' su '*) INSTALL_SU=yes ;;
|
||||
*) INSTALL_SU=no ;;
|
||||
esac
|
||||
|
||||
MAN=`echo "$optional_bin_progs "|sed 's/ /.1 /g;s/ $//'|tr -d '\\015\\012'`
|
||||
|
||||
# Change ginstall.1 to "install.h" in $MAN.
|
||||
MAN=`for m in $MAN; do test $m = ginstall.1 && m=install.1; echo $m; done \
|
||||
| tr '\015\012' ' '; echo`
|
||||
|
||||
# Remove [.1, since writing a portable rule for it in man/Makefile.am
|
||||
# is not practical. The sed LHS below uses the autoconf quadrigraph
|
||||
# representing '['.
|
||||
MAN=`echo "$MAN"|sed 's/\@<:@\.1//'`
|
||||
|
||||
OPTIONAL_BIN_PROGS=`echo "$optional_bin_progs "|sed 's/ /\$(EXEEXT) /g;s/ $//'`
|
||||
AC_SUBST([OPTIONAL_BIN_PROGS])
|
||||
OPTIONAL_PKGLIB_PROGS=`echo "$optional_pkglib_progs " | sed 's/ $//'`
|
||||
AC_SUBST([OPTIONAL_PKGLIB_PROGS])
|
||||
NO_INSTALL_PROGS_DEFAULT=$no_install_progs_default
|
||||
AC_SUBST([NO_INSTALL_PROGS_DEFAULT])
|
||||
|
||||
AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes])
|
||||
|
||||
# Arrange to rerun configure whenever the file, src/Makefile.am,
|
||||
# containing the list of program names changes.
|
||||
CONFIG_STATUS_DEPENDENCIES='$(top_srcdir)/src/Makefile.am'
|
||||
AC_SUBST([CONFIG_STATUS_DEPENDENCIES])
|
||||
############################################################################
|
||||
|
||||
AM_GNU_GETTEXT([external], [need-formatstring-macros])
|
||||
AM_GNU_GETTEXT_VERSION([0.15])
|
||||
|
||||
# For a test of uniq: it uses the $LOCALE_FR envvar.
|
||||
gt_LOCALE_FR
|
||||
|
||||
AC_CONFIG_FILES(
|
||||
Makefile
|
||||
doc/Makefile
|
||||
@@ -432,6 +260,48 @@ AC_CONFIG_FILES(
|
||||
po/Makefile.in
|
||||
src/Makefile
|
||||
tests/Makefile
|
||||
gnulib-tests/Makefile
|
||||
tests/chgrp/Makefile
|
||||
tests/chmod/Makefile
|
||||
tests/chown/Makefile
|
||||
tests/cp/Makefile
|
||||
tests/cut/Makefile
|
||||
tests/dd/Makefile
|
||||
tests/dircolors/Makefile
|
||||
tests/du/Makefile
|
||||
tests/expr/Makefile
|
||||
tests/factor/Makefile
|
||||
tests/fmt/Makefile
|
||||
tests/head/Makefile
|
||||
tests/install/Makefile
|
||||
tests/join/Makefile
|
||||
tests/ln/Makefile
|
||||
tests/ls-2/Makefile
|
||||
tests/ls/Makefile
|
||||
tests/md5sum/Makefile
|
||||
tests/misc/Makefile
|
||||
tests/mkdir/Makefile
|
||||
tests/mv/Makefile
|
||||
tests/od/Makefile
|
||||
tests/pr/Makefile
|
||||
tests/readlink/Makefile
|
||||
tests/rm/Makefile
|
||||
tests/rmdir/Makefile
|
||||
tests/seq/Makefile
|
||||
tests/sha1sum/Makefile
|
||||
tests/shred/Makefile
|
||||
tests/sort/Makefile
|
||||
tests/stty/Makefile
|
||||
tests/sum/Makefile
|
||||
tests/tac/Makefile
|
||||
tests/tail-2/Makefile
|
||||
tests/tail/Makefile
|
||||
tests/tee/Makefile
|
||||
tests/test/Makefile
|
||||
tests/touch/Makefile
|
||||
tests/tr/Makefile
|
||||
tests/tsort/Makefile
|
||||
tests/unexpand/Makefile
|
||||
tests/uniq/Makefile
|
||||
tests/wc/Makefile
|
||||
)
|
||||
AC_OUTPUT
|
||||
|
||||
133
dist-check.mk
133
dist-check.mk
@@ -1,133 +0,0 @@
|
||||
# Most of this is probably too coreutils-centric to be useful to other packages.
|
||||
|
||||
bin=bin-$$$$
|
||||
|
||||
write_loser = printf '\#!%s\necho $$0: bad path 1>&2; exit 1\n' '$(SHELL)'
|
||||
|
||||
TMPDIR ?= /tmp
|
||||
t=$(TMPDIR)/$(PACKAGE)/test
|
||||
pfx=$(t)/i
|
||||
|
||||
# More than once, tainted build and source directory names would
|
||||
# have caused at least one "make check" test to apply "chmod 700"
|
||||
# to all directories under $HOME. Make sure it doesn't happen again.
|
||||
tp := $(shell echo "$(TMPDIR)/$(PACKAGE)-$$$$")
|
||||
t_prefix = $(tp)/a
|
||||
t_taint = '$(t_prefix) b'
|
||||
fake_home = $(tp)/home
|
||||
|
||||
# Ensure that tests run from tainted build and src dir names work,
|
||||
# and don't affect anything in $HOME. Create witness files in $HOME,
|
||||
# record their attributes, and build/test. Then ensure that the
|
||||
# witnesses were not affected.
|
||||
ALL_RECURSIVE_TARGETS += taint-distcheck
|
||||
taint-distcheck: $(DIST_ARCHIVES)
|
||||
test -d $(t_taint) && chmod -R 700 $(t_taint) || :
|
||||
-rm -rf $(t_taint) $(fake_home)
|
||||
mkdir -p $(t_prefix) $(t_taint) $(fake_home)
|
||||
GZIP=$(GZIP_ENV) $(AMTAR) -C $(t_taint) -zxf $(distdir).tar.gz
|
||||
mkfifo $(fake_home)/fifo
|
||||
touch $(fake_home)/f
|
||||
mkdir -p $(fake_home)/d/e
|
||||
ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-before
|
||||
cd $(t_taint)/$(distdir) \
|
||||
&& ./configure \
|
||||
&& $(MAKE) \
|
||||
&& HOME=$(fake_home) $(MAKE) check \
|
||||
&& ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-after \
|
||||
&& diff $(tp)/.ls-before $(tp)/.ls-after \
|
||||
&& test -d $(t_prefix)
|
||||
rm -rf $(tp)
|
||||
|
||||
# Verify that a twisted use of --program-transform-name=PROGRAM works.
|
||||
define install-transform-check
|
||||
echo running install-transform-check \
|
||||
&& rm -rf $(pfx) \
|
||||
&& $(MAKE) program_transform_name='s/.*/zyx/' \
|
||||
prefix=$(pfx) install \
|
||||
&& test "$$(echo $(pfx)/bin/*)" = "$(pfx)/bin/zyx" \
|
||||
&& test "$$(find $(pfx)/share/man -type f|sed 's,.*/,,;s,\..*,,')" = "zyx"
|
||||
endef
|
||||
|
||||
# Install, then verify that all binaries and man pages are in place.
|
||||
# Note that neither the binary, ginstall, nor the ].1 man page is installed.
|
||||
define my-instcheck
|
||||
$(MAKE) prefix=$(pfx) install \
|
||||
&& test ! -f $(pfx)/bin/ginstall \
|
||||
&& { fail=0; \
|
||||
for i in $(built_programs); do \
|
||||
test "$$i" = ginstall && i=install; \
|
||||
for j in "$(pfx)/bin/$$i" \
|
||||
"$(pfx)/share/man/man1/$$i.1"; do \
|
||||
case $$j in *'[.1') continue;; esac; \
|
||||
test -f "$$j" && : \
|
||||
|| { echo "$$j not installed"; fail=1; }; \
|
||||
done; \
|
||||
done; \
|
||||
test $$fail = 1 && exit 1 || :; \
|
||||
}
|
||||
endef
|
||||
|
||||
define coreutils-path-check
|
||||
{ \
|
||||
if test -f $(srcdir)/src/true.c; then \
|
||||
fail=1; \
|
||||
mkdir $(bin) \
|
||||
&& ($(write_loser)) > $(bin)/loser \
|
||||
&& chmod a+x $(bin)/loser \
|
||||
&& for i in $(built_programs); do \
|
||||
case $$i in \
|
||||
rm|expr|basename|echo|sort|ls|tr);; \
|
||||
cat|dirname|mv|wc);; \
|
||||
*) ln $(bin)/loser $(bin)/$$i;; \
|
||||
esac; \
|
||||
done \
|
||||
&& ln -sf ../src/true $(bin)/false \
|
||||
&& PATH=`pwd`/$(bin)$(PATH_SEPARATOR)$$PATH \
|
||||
$(MAKE) -C tests check \
|
||||
&& { test -d gnulib-tests \
|
||||
&& $(MAKE) -C gnulib-tests check \
|
||||
|| :; } \
|
||||
&& rm -rf $(bin) \
|
||||
&& fail=0; \
|
||||
else \
|
||||
fail=0; \
|
||||
fi; \
|
||||
test $$fail = 1 && exit 1 || :; \
|
||||
}
|
||||
endef
|
||||
|
||||
# Use -Wformat -Werror to detect format-string/arg-list mismatches.
|
||||
# Also, check for shadowing problems with -Wshadow, and for pointer
|
||||
# arithmetic problems with -Wpointer-arith.
|
||||
# These CFLAGS are pretty strict. If you build this target, you probably
|
||||
# have to have a recent version of gcc and glibc headers.
|
||||
# The hard-linking for-loop below ensures that there is a bin/ directory
|
||||
# full of all of the programs under test (except the ones that are required
|
||||
# for basic Makefile rules), all symlinked to the just-built "false" program.
|
||||
# This is to ensure that if ever a test neglects to make PATH include
|
||||
# the build srcdir, these always-failing programs will run.
|
||||
# Otherwise, it is too easy to test the wrong programs.
|
||||
# Note that "false" itself is a symlink to true, so it too will malfunction.
|
||||
ALL_RECURSIVE_TARGETS += my-distcheck
|
||||
my-distcheck: $(DIST_ARCHIVES) $(local-check)
|
||||
$(MAKE) syntax-check
|
||||
$(MAKE) check
|
||||
-rm -rf $(t)
|
||||
mkdir -p $(t)
|
||||
GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
|
||||
cd $(t)/$(distdir) \
|
||||
&& ./configure --enable-gcc-warnings --disable-nls \
|
||||
&& $(MAKE) AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
|
||||
&& $(MAKE) dvi \
|
||||
&& $(install-transform-check) \
|
||||
&& $(my-instcheck) \
|
||||
&& $(coreutils-path-check) \
|
||||
&& $(MAKE) distclean
|
||||
(cd $(t) && mv $(distdir) $(distdir).old \
|
||||
&& $(AMTAR) -zxf - ) < $(distdir).tar.gz
|
||||
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
|
||||
-rm -rf $(t)
|
||||
@echo "========================"; \
|
||||
echo "$(distdir).tar.gz is ready for distribution"; \
|
||||
echo "========================"
|
||||
25
doc/.cvsignore
Normal file
25
doc/.cvsignore
Normal file
@@ -0,0 +1,25 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
coreutils.aux
|
||||
coreutils.cp
|
||||
coreutils.cps
|
||||
coreutils.dvi
|
||||
coreutils.fl
|
||||
coreutils.fn
|
||||
coreutils.html
|
||||
coreutils.info*
|
||||
coreutils.ky
|
||||
coreutils.log
|
||||
coreutils.op
|
||||
coreutils.pdf
|
||||
coreutils.pg
|
||||
coreutils.ps
|
||||
coreutils.tmp
|
||||
coreutils.toc
|
||||
coreutils.tp
|
||||
coreutils.tps
|
||||
coreutils.vr
|
||||
fdl.texi
|
||||
getdate.texi
|
||||
stamp-vti
|
||||
version.texi
|
||||
17
doc/.gitignore
vendored
17
doc/.gitignore
vendored
@@ -1,22 +1,5 @@
|
||||
constants.texi
|
||||
coreutils.aux
|
||||
coreutils.cp
|
||||
coreutils.cps
|
||||
coreutils.dvi
|
||||
coreutils.fl
|
||||
coreutils.fn
|
||||
coreutils.html
|
||||
coreutils.info
|
||||
coreutils.ky
|
||||
coreutils.log
|
||||
coreutils.op
|
||||
coreutils.pdf
|
||||
coreutils.pg
|
||||
coreutils.toc
|
||||
coreutils.tp
|
||||
coreutils.vr
|
||||
fdl.texi
|
||||
gendocs_template
|
||||
getdate.texi
|
||||
stamp-vti
|
||||
version.texi
|
||||
|
||||
@@ -1,47 +1,3 @@
|
||||
2007-10-05 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* coreutils.texi (chroot invocation): List two systems on which
|
||||
chroot works when run by non-root.
|
||||
|
||||
2007-09-19 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* coreutils.texi (expr invocation): Correct description of relative
|
||||
operator precedence. Reported by hanpingtian@gmail.com.
|
||||
|
||||
2007-08-25 Eric Blake <ebb9@byu.net>
|
||||
|
||||
Avoid case-insensitive clash in one-page-per-node html docs.
|
||||
* coreutils.texi (Concept index): Rename from Index.
|
||||
|
||||
2007-07-15 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* coreutils.texi: Revise node structure per new fdl.texi.
|
||||
|
||||
2007-06-06 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* coreutils.texi (rmdir invocation): Fix a tiny typo.
|
||||
|
||||
2007-06-03 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* constants.texi: Remove from version control.
|
||||
This file has always been generated.
|
||||
* .gitignore: Add constants.texi.
|
||||
|
||||
2007-04-28 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* coreutils.texi (nohup invocation): Add advice about saving
|
||||
output to a file.
|
||||
|
||||
2007-04-16 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* coreutils.texi (cut invocation): Adjust synopsis to show that an
|
||||
OPTION is required. Reported by Rudolf Kastl.
|
||||
|
||||
2007-03-21 Eric Blake <ebb9@byu.net>
|
||||
|
||||
* coreutils.texi (md5sum invocation): Document escapes in output
|
||||
format. Reported by Armijn Hemel.
|
||||
|
||||
2007-03-15 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Fix manual in response to bug reports by Dan Jacobson.
|
||||
@@ -2002,7 +1958,8 @@
|
||||
|
||||
-----
|
||||
|
||||
Copyright (C) 2001-2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without
|
||||
modification, are permitted provided the copyright notice
|
||||
103
doc/Makefile.am
103
doc/Makefile.am
@@ -1,10 +1,11 @@
|
||||
# Make coreutils documentation. -*-Makefile-*-
|
||||
|
||||
# Copyright (C) 1995-1998, 2001-2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005,
|
||||
# 2006 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# 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,
|
||||
@@ -13,7 +14,9 @@
|
||||
# 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, see <http://www.gnu.org/licenses/>.
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
info_TEXINFOS = coreutils.texi
|
||||
|
||||
@@ -29,13 +32,10 @@ EXTRA_DIST = perm.texi getdate.texi constants.texi fdl.texi
|
||||
# old systems.
|
||||
AM_MAKEINFOFLAGS = --no-split
|
||||
|
||||
constants.texi: $(top_srcdir)/src/tail.c $(top_srcdir)/src/shred.c
|
||||
constants.texi: $(top_srcdir)/src/tail.c
|
||||
LC_ALL=C \
|
||||
sed -n -e 's/^#define \(DEFAULT_MAX[_A-Z]*\) \(.*\)/@set \1 \2/p' \
|
||||
$(top_srcdir)/src/tail.c > t-$@
|
||||
LC_ALL=C \
|
||||
sed -n -e 's/.*\(DEFAULT_PASSES\)[ =]* \([0-9]*\).*/@set SHRED_\1 \2/p'\
|
||||
$(top_srcdir)/src/shred.c >> t-$@
|
||||
mv t-$@ $@
|
||||
|
||||
MAINTAINERCLEANFILES = constants.texi
|
||||
@@ -47,75 +47,28 @@ $(INFO_DEPS): $(EXTRA_DIST)
|
||||
_W = (^|[^A-Za-z0-9_])
|
||||
W_ = ([^A-Za-z0-9_]|$$)
|
||||
|
||||
syntax_checks = \
|
||||
sc-avoid-io \
|
||||
sc-avoid-non-zero \
|
||||
sc-avoid-timezone \
|
||||
sc-avoid-zeroes \
|
||||
sc-exponent-grouping \
|
||||
sc-lower-case-var \
|
||||
sc-use-small-caps-NUL
|
||||
|
||||
.PHONY: $(syntax_checks) check-texinfo
|
||||
|
||||
# List words/regexps here that should not appear in the texinfo documentation.
|
||||
check-texinfo: $(syntax_checks)
|
||||
$(AM_V_GEN)fail=0; \
|
||||
grep '@url{' $(srcdir)/*.texi && fail=1; \
|
||||
grep '\$$@"' $(srcdir)/*.texi && fail=1; \
|
||||
grep -n '[^[:punct:]]@footnote' $(srcdir)/*.texi && fail=1; \
|
||||
grep -n filename $(srcdir)/*.texi \
|
||||
| $(EGREP) -v 'setfilename|[{]filename[}]' \
|
||||
&& fail=1; \
|
||||
$(PERL) -e 1 2> /dev/null && { $(PERL) -ne \
|
||||
# E.g., use @sc{nul}, not `NUL'
|
||||
# Use `time zone', not `timezone'.
|
||||
# Use `zeros', not `zeroes' (nothing wrong with `zeroes'. just be consistent).
|
||||
check-texinfo:
|
||||
fail=0; \
|
||||
grep timezone $(srcdir)/*.texi && fail=1; \
|
||||
$(EGREP) '$(_W)IO$(W_)' $(srcdir)/*.texi && fail=1; \
|
||||
grep non-zero $(srcdir)/*.texi && fail=1; \
|
||||
grep '@url{' $(srcdir)/*.texi && fail=1; \
|
||||
$(EGREP) '$(_W)NUL$(W_)' $(srcdir)/*.texi && fail=1; \
|
||||
grep '\$$@"' $(srcdir)/*.texi && fail=1; \
|
||||
grep -n '[^[:punct:]]@footnote' $(srcdir)/*.texi && fail=1; \
|
||||
grep -n filename $(srcdir)/*.texi|$(EGREP) -v 'setfilename|[{]filename[}]' \
|
||||
&& fail=1; \
|
||||
$(PERL) -e 1 2> /dev/null && { $(PERL) -ne \
|
||||
'/\bPOSIX\b/ && !/\@acronym{POSIX}/ && !/^\* / || /{posix}/ and print,exit 1' \
|
||||
$(srcdir)/*.texi 2> /dev/null || fail=1; }; \
|
||||
$(EGREP) -i '$(_W)builtins?$(W_)' $(srcdir)/*.texi && fail=1; \
|
||||
$(EGREP) -i '$(_W)path(name)?s?$(W_)' $(srcdir)/*.texi \
|
||||
| $(EGREP) -v 'search path|@vindex PATH$$|@env[{]PATH[}]' && fail=1; \
|
||||
$(srcdir)/*.texi 2> /dev/null || fail=1; }; \
|
||||
$(EGREP) -i '$(_W)zeroes$(W_)' $(srcdir)/*.texi && fail=1; \
|
||||
$(EGREP) -i '$(_W)builtins?$(W_)' $(srcdir)/*.texi && fail=1; \
|
||||
$(EGREP) -i '$(_W)path(name)?s?$(W_)' $(srcdir)/*.texi \
|
||||
| $(EGREP) -v '@vindex PATH$$|@env[{]PATH[}]' && fail=1; \
|
||||
exit $$fail
|
||||
|
||||
# Use `time zone', not `timezone'.
|
||||
sc-avoid-timezone:
|
||||
$(AM_V_GEN)$(EGREP) timezone $(srcdir)/*.texi && exit 1 || :
|
||||
|
||||
# Check for insufficient exponent grouping, e.g.,
|
||||
# @math{2^64} should be @math{2^{64}}.
|
||||
sc-exponent-grouping:
|
||||
$(AM_V_GEN)$(EGREP) '\{.*\^[0-9][0-9]' $(srcdir)/*.texi && exit 1 || :
|
||||
|
||||
# E.g., use @sc{nul}, not NUL.
|
||||
sc-use-small-caps-NUL:
|
||||
$(AM_V_GEN)$(EGREP) '$(_W)NUL$(W_)' $(srcdir)/*.texi && exit 1 || :
|
||||
|
||||
# Say I/O, not IO.
|
||||
sc-avoid-io:
|
||||
$(AM_V_GEN)$(EGREP) '$(_W)IO$(W_)' $(srcdir)/*.texi && exit 1 || :
|
||||
|
||||
# I prefer nonzero over non-zero.
|
||||
sc-avoid-non-zero:
|
||||
$(AM_V_GEN)$(EGREP) non-zero $(srcdir)/*.texi && exit 1 || :
|
||||
|
||||
# Use `zeros', not `zeroes' (nothing wrong with `zeroes'. just be consistent).
|
||||
sc-avoid-zeroes:
|
||||
$(AM_V_GEN)$(EGREP) -i '$(_W)zeroes$(W_)' $(srcdir)/*.texi && exit 1 || :
|
||||
|
||||
# ME = $(subdir)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
|
||||
ME = doc/Makefile
|
||||
|
||||
# The quantity inside @var{...} should not contain upper case letters.
|
||||
# The leading backslash exemption is to permit in-macro uses like
|
||||
# @var{\varName\} where the upper case letter is part of a parameter name.
|
||||
find_upper_case_var = \
|
||||
'/\@var{/ or next; \
|
||||
while (/\@var{(.+?)}/g) \
|
||||
{ \
|
||||
$$v = $$1; \
|
||||
$$v =~ /[A-Z]/ && $$v !~ /^\\/ and (print "$$ARGV:$$.:$$_"), $$m = 1 \
|
||||
} \
|
||||
END {$$m and (warn "$(ME): do not use upper case in \@var{...}\n"), exit 1}'
|
||||
sc-lower-case-var:
|
||||
$(AM_V_GEN)$(PERL) -e 1 \
|
||||
&& $(PERL) -lne $(find_upper_case_var) $(srcdir)/*.texi
|
||||
|
||||
check: check-texinfo
|
||||
|
||||
8
doc/code-vs-command
Normal file
8
doc/code-vs-command
Normal file
@@ -0,0 +1,8 @@
|
||||
perl -pi -e \
|
||||
's/\@code\{('"$(echo cp dd df dir dircolors du install ln ls mkdir mkfifo mknod mv shred touch vdir|tr ' ' '|')"')\}/\@command{$1}/' coreutils.texi
|
||||
|
||||
perl -pi -e \
|
||||
's/\@code\{('"$(echo cp dd df dir dircolors du install ln ls mkdir mkfifo mknod mv shred touch vdir|tr ' ' '|')"')\}/\@command{$1}/' coreutils.texi
|
||||
|
||||
regex=$((textutils; shellutils) | tr -s ' ' '|')
|
||||
perl -pi -e 's/\@code\{('"$regex"')\}/\@command{$1}/' coreutils.texi
|
||||
1
doc/constants.texi
Normal file
1
doc/constants.texi
Normal file
@@ -0,0 +1 @@
|
||||
@set DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS 5
|
||||
2973
doc/coreutils.texi
2973
doc/coreutils.texi
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,10 @@
|
||||
@c File mode bits
|
||||
|
||||
@c Copyright (C) 1994, 1996, 1999-2001, 2003-2006,
|
||||
@c 2008-2009 Free Software Foundation, Inc.
|
||||
@c Copyright (C) 1994, 1996, 1999, 2000, 2001, 2003, 2004, 2005, 2006
|
||||
@c Free Software Foundation, Inc.
|
||||
|
||||
@c Permission is granted to copy, distribute and/or modify this document
|
||||
@c under the terms of the GNU Free Documentation License, Version 1.3 or
|
||||
@c under the terms of the GNU Free Documentation License, Version 1.2 or
|
||||
@c any later version published by the Free Software Foundation; with no
|
||||
@c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
|
||||
@c Texts. A copy of the license is included in the ``GNU Free
|
||||
|
||||
426
gl/lib/acl.c
Normal file
426
gl/lib/acl.c
Normal file
@@ -0,0 +1,426 @@
|
||||
/* acl.c - access control lists
|
||||
|
||||
Copyright (C) 2002, 2003, 2005, 2006, 2007 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Written by Paul Eggert and Andreas Gruenbacher. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "acl.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifndef S_ISLNK
|
||||
# define S_ISLNK(Mode) 0
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ACL_LIBACL_H
|
||||
# include <acl/libacl.h>
|
||||
#endif
|
||||
|
||||
#include "error.h"
|
||||
#include "quote.h"
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef ENOSYS
|
||||
# define ENOSYS (-1)
|
||||
#endif
|
||||
#ifndef ENOTSUP
|
||||
# define ENOTSUP (-1)
|
||||
#endif
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <libintl.h>
|
||||
# define _(Text) gettext (Text)
|
||||
#else
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_FCHMOD
|
||||
# define HAVE_FCHMOD false
|
||||
# define fchmod(fd, mode) (-1)
|
||||
#endif
|
||||
|
||||
/* POSIX 1003.1e (draft 17) */
|
||||
#ifndef HAVE_ACL_GET_FD
|
||||
# define HAVE_ACL_GET_FD false
|
||||
# define acl_get_fd(fd) (NULL)
|
||||
#endif
|
||||
|
||||
/* POSIX 1003.1e (draft 17) */
|
||||
#ifndef HAVE_ACL_SET_FD
|
||||
# define HAVE_ACL_SET_FD false
|
||||
# define acl_set_fd(fd, acl) (-1)
|
||||
#endif
|
||||
|
||||
/* Linux-specific */
|
||||
#ifndef HAVE_ACL_EXTENDED_FILE
|
||||
# define HAVE_ACL_EXTENDED_FILE false
|
||||
# define acl_extended_file(name) (-1)
|
||||
#endif
|
||||
|
||||
/* Linux-specific */
|
||||
#ifndef HAVE_ACL_FROM_MODE
|
||||
# define HAVE_ACL_FROM_MODE false
|
||||
# define acl_from_mode(mode) (NULL)
|
||||
#endif
|
||||
|
||||
#define ACL_NOT_WELL_SUPPORTED(Errno) \
|
||||
(Errno == ENOTSUP || Errno == ENOSYS || Errno == EINVAL)
|
||||
|
||||
/* We detect the presence of POSIX 1003.1e (draft 17 -- abandoned) support
|
||||
by checking for HAVE_ACL_GET_FILE, HAVE_ACL_SET_FILE, and HAVE_ACL_FREE.
|
||||
Systems that have acl_get_file, acl_set_file, and acl_free must also
|
||||
have acl_to_text, acl_from_text, and acl_delete_def_file (all defined
|
||||
in the draft); systems that don't would hit #error statements here. */
|
||||
|
||||
#if USE_ACL && HAVE_ACL_GET_FILE && !HAVE_ACL_ENTRIES
|
||||
# ifndef HAVE_ACL_TO_TEXT
|
||||
# error Must have acl_to_text (see POSIX 1003.1e draft 17).
|
||||
# endif
|
||||
|
||||
/* Return the number of entries in ACL. Linux implements acl_entries
|
||||
as a more efficient extension than using this workaround. */
|
||||
|
||||
static int
|
||||
acl_entries (acl_t acl)
|
||||
{
|
||||
char *text = acl_to_text (acl, NULL), *t;
|
||||
int entries;
|
||||
if (text == NULL)
|
||||
return -1;
|
||||
for (entries = 0, t = text; ; t++, entries++) {
|
||||
t = strchr (t, '\n');
|
||||
if (t == NULL)
|
||||
break;
|
||||
}
|
||||
acl_free (text);
|
||||
return entries;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If DESC is a valid file descriptor use fchmod to change the
|
||||
file's mode to MODE on systems that have fchown. On systems
|
||||
that don't have fchown and if DESC is invalid, use chown on
|
||||
NAME instead. */
|
||||
|
||||
int
|
||||
chmod_or_fchmod (const char *name, int desc, mode_t mode)
|
||||
{
|
||||
if (HAVE_FCHMOD && desc != -1)
|
||||
return fchmod (desc, mode);
|
||||
else
|
||||
return chmod (name, mode);
|
||||
}
|
||||
|
||||
#if USE_ACL && HAVE_ACL_GET_FILE && HAVE_ACL_SET_FILE && HAVE_ACL_FREE
|
||||
/* FIXME: use acl_trivial instead, once we have a replacement function */
|
||||
static bool
|
||||
is_trivial_acl (acl_t acl)
|
||||
{
|
||||
int n = acl_entries (acl);
|
||||
if (n <= 3)
|
||||
return true;
|
||||
if (5 <= n)
|
||||
return false;
|
||||
|
||||
/* Here, we know there are exactly 4 entries.
|
||||
If they are for user, group, mask, and other, then return true; */
|
||||
/* FIXME */
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Return 1 if NAME has a nontrivial access control list, 0 if
|
||||
NAME only has no or a base access control list, and -1 on
|
||||
error. SB must be set to the stat buffer of FILE. */
|
||||
|
||||
int
|
||||
file_has_acl (char const *name, struct stat const *sb)
|
||||
{
|
||||
#if USE_ACL && HAVE_ACL && defined GETACLCNT
|
||||
/* This implementation should work on recent-enough versions of HP-UX,
|
||||
Solaris, and Unixware. */
|
||||
|
||||
# ifndef MIN_ACL_ENTRIES
|
||||
# define MIN_ACL_ENTRIES 4
|
||||
# endif
|
||||
|
||||
if (! S_ISLNK (sb->st_mode))
|
||||
{
|
||||
int n = acl (name, GETACLCNT, 0, NULL);
|
||||
return n < 0 ? (errno == ENOSYS ? 0 : -1) : (MIN_ACL_ENTRIES < n);
|
||||
}
|
||||
#elif USE_ACL && HAVE_ACL_GET_FILE && HAVE_ACL_FREE
|
||||
/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */
|
||||
|
||||
if (! S_ISLNK (sb->st_mode))
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (HAVE_ACL_EXTENDED_FILE)
|
||||
ret = acl_extended_file (name);
|
||||
else
|
||||
{
|
||||
acl_t acl = acl_get_file (name, ACL_TYPE_ACCESS);
|
||||
if (acl)
|
||||
{
|
||||
ret = !is_trivial_acl (acl);
|
||||
acl_free (acl);
|
||||
if (ret == 0 && S_ISDIR (sb->st_mode))
|
||||
{
|
||||
acl = acl_get_file (name, ACL_TYPE_DEFAULT);
|
||||
if (acl)
|
||||
{
|
||||
ret = (0 < acl_entries (acl));
|
||||
acl_free (acl);
|
||||
}
|
||||
else
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
ret = -1;
|
||||
}
|
||||
if (ret < 0)
|
||||
return ACL_NOT_WELL_SUPPORTED (errno) ? 0 : -1;
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* FIXME: Add support for AIX, Irix, and Tru64. Please see Samba's
|
||||
source/lib/sysacls.c file for fix-related ideas. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Copy access control lists from one file to another. If SOURCE_DESC is
|
||||
a valid file descriptor, use file descriptor operations, else use
|
||||
filename based operations on SRC_NAME. Likewise for DEST_DESC and
|
||||
DEST_NAME.
|
||||
If access control lists are not available, fchmod the target file to
|
||||
MODE. Also sets the non-permission bits of the destination file
|
||||
(S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set.
|
||||
System call return value semantics. */
|
||||
|
||||
int
|
||||
copy_acl (const char *src_name, int source_desc, const char *dst_name,
|
||||
int dest_desc, mode_t mode)
|
||||
{
|
||||
int ret;
|
||||
|
||||
#if USE_ACL && HAVE_ACL_GET_FILE && HAVE_ACL_SET_FILE && HAVE_ACL_FREE
|
||||
/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */
|
||||
|
||||
acl_t acl;
|
||||
if (HAVE_ACL_GET_FD && source_desc != -1)
|
||||
acl = acl_get_fd (source_desc);
|
||||
else
|
||||
acl = acl_get_file (src_name, ACL_TYPE_ACCESS);
|
||||
if (acl == NULL)
|
||||
{
|
||||
if (ACL_NOT_WELL_SUPPORTED (errno))
|
||||
return set_acl (dst_name, dest_desc, mode);
|
||||
else
|
||||
{
|
||||
error (0, errno, "%s", quote (src_name));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (HAVE_ACL_SET_FD && dest_desc != -1)
|
||||
ret = acl_set_fd (dest_desc, acl);
|
||||
else
|
||||
ret = acl_set_file (dst_name, ACL_TYPE_ACCESS, acl);
|
||||
if (ret != 0)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
|
||||
if (ACL_NOT_WELL_SUPPORTED (errno))
|
||||
{
|
||||
bool trivial = is_trivial_acl (acl);
|
||||
acl_free (acl);
|
||||
if (trivial)
|
||||
{
|
||||
if (chmod_or_fchmod (dst_name, dest_desc, mode) != 0)
|
||||
saved_errno = errno;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
chmod_or_fchmod (dst_name, dest_desc, mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
acl_free (acl);
|
||||
chmod_or_fchmod (dst_name, dest_desc, mode);
|
||||
}
|
||||
error (0, saved_errno, _("preserving permissions for %s"),
|
||||
quote (dst_name));
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
acl_free (acl);
|
||||
|
||||
if (mode & (S_ISUID | S_ISGID | S_ISVTX))
|
||||
{
|
||||
/* We did not call chmod so far, so the special bits have not yet
|
||||
been set. */
|
||||
|
||||
if (chmod_or_fchmod (dst_name, dest_desc, mode) != 0)
|
||||
{
|
||||
error (0, errno, _("preserving permissions for %s"),
|
||||
quote (dst_name));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (S_ISDIR (mode))
|
||||
{
|
||||
acl = acl_get_file (src_name, ACL_TYPE_DEFAULT);
|
||||
if (acl == NULL)
|
||||
{
|
||||
error (0, errno, "%s", quote (src_name));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (acl_set_file (dst_name, ACL_TYPE_DEFAULT, acl))
|
||||
{
|
||||
error (0, errno, _("preserving permissions for %s"),
|
||||
quote (dst_name));
|
||||
acl_free (acl);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
acl_free (acl);
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
ret = chmod_or_fchmod (dst_name, dest_desc, mode);
|
||||
if (ret != 0)
|
||||
error (0, errno, _("preserving permissions for %s"), quote (dst_name));
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Set the access control lists of a file. If DESC is a valid file
|
||||
descriptor, use file descriptor operations where available, else use
|
||||
filename based operations on NAME. If access control lists are not
|
||||
available, fchmod the target file to MODE. Also sets the
|
||||
non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX)
|
||||
to those from MODE if any are set. System call return value
|
||||
semantics. */
|
||||
|
||||
int
|
||||
set_acl (char const *name, int desc, mode_t mode)
|
||||
{
|
||||
#if USE_ACL && HAVE_ACL_SET_FILE && HAVE_ACL_FREE
|
||||
/* POSIX 1003.1e draft 17 (abandoned) specific version. */
|
||||
|
||||
/* We must also have have_acl_from_text and acl_delete_def_file.
|
||||
(acl_delete_def_file could be emulated with acl_init followed
|
||||
by acl_set_file, but acl_set_file with an empty acl is
|
||||
unspecified.) */
|
||||
|
||||
# ifndef HAVE_ACL_FROM_TEXT
|
||||
# error Must have acl_from_text (see POSIX 1003.1e draft 17).
|
||||
# endif
|
||||
# ifndef HAVE_ACL_DELETE_DEF_FILE
|
||||
# error Must have acl_delete_def_file (see POSIX 1003.1e draft 17).
|
||||
# endif
|
||||
|
||||
acl_t acl;
|
||||
int ret;
|
||||
|
||||
if (HAVE_ACL_FROM_MODE)
|
||||
{
|
||||
acl = acl_from_mode (mode);
|
||||
if (!acl)
|
||||
{
|
||||
error (0, errno, "%s", quote (name));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char acl_text[] = "u::---,g::---,o::---";
|
||||
|
||||
if (mode & S_IRUSR) acl_text[ 3] = 'r';
|
||||
if (mode & S_IWUSR) acl_text[ 4] = 'w';
|
||||
if (mode & S_IXUSR) acl_text[ 5] = 'x';
|
||||
if (mode & S_IRGRP) acl_text[10] = 'r';
|
||||
if (mode & S_IWGRP) acl_text[11] = 'w';
|
||||
if (mode & S_IXGRP) acl_text[12] = 'x';
|
||||
if (mode & S_IROTH) acl_text[17] = 'r';
|
||||
if (mode & S_IWOTH) acl_text[18] = 'w';
|
||||
if (mode & S_IXOTH) acl_text[19] = 'x';
|
||||
|
||||
acl = acl_from_text (acl_text);
|
||||
if (!acl)
|
||||
{
|
||||
error (0, errno, "%s", quote (name));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (HAVE_ACL_SET_FD && desc != -1)
|
||||
ret = acl_set_fd (desc, acl);
|
||||
else
|
||||
ret = acl_set_file (name, ACL_TYPE_ACCESS, acl);
|
||||
if (ret != 0)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
acl_free (acl);
|
||||
|
||||
if (ACL_NOT_WELL_SUPPORTED (errno))
|
||||
{
|
||||
if (chmod_or_fchmod (name, desc, mode) != 0)
|
||||
saved_errno = errno;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
error (0, saved_errno, _("setting permissions for %s"), quote (name));
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
acl_free (acl);
|
||||
|
||||
if (S_ISDIR (mode) && acl_delete_def_file (name))
|
||||
{
|
||||
error (0, errno, _("setting permissions for %s"), quote (name));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mode & (S_ISUID | S_ISGID | S_ISVTX))
|
||||
{
|
||||
/* We did not call chmod so far, so the special bits have not yet
|
||||
been set. */
|
||||
|
||||
if (chmod_or_fchmod (name, desc, mode))
|
||||
{
|
||||
error (0, errno, _("preserving permissions for %s"), quote (name));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
#else
|
||||
int ret = chmod_or_fchmod (name, desc, mode);
|
||||
if (ret)
|
||||
error (0, errno, _("setting permissions for %s"), quote (name));
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
559
gl/lib/base64.c
Normal file
559
gl/lib/base64.c
Normal file
@@ -0,0 +1,559 @@
|
||||
/* base64.c -- Encode binary data using printable characters.
|
||||
Copyright (C) 1999, 2000, 2001, 2004, 2005, 2006, 2007 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* Written by Simon Josefsson. Partially adapted from GNU MailUtils
|
||||
* (mailbox/filter_trans.c, as of 2004-11-28). Improved by review
|
||||
* from Paul Eggert, Bruno Haible, and Stepan Kasal.
|
||||
*
|
||||
* See also RFC 3548 <http://www.ietf.org/rfc/rfc3548.txt>.
|
||||
*
|
||||
* Be careful with error checking. Here is how you would typically
|
||||
* use these functions:
|
||||
*
|
||||
* bool ok = base64_decode_alloc (in, inlen, &out, &outlen);
|
||||
* if (!ok)
|
||||
* FAIL: input was not valid base64
|
||||
* if (out == NULL)
|
||||
* FAIL: memory allocation error
|
||||
* OK: data in OUT/OUTLEN
|
||||
*
|
||||
* size_t outlen = base64_encode_alloc (in, inlen, &out);
|
||||
* if (out == NULL && outlen == 0 && inlen != 0)
|
||||
* FAIL: input too long
|
||||
* if (out == NULL)
|
||||
* FAIL: memory allocation error
|
||||
* OK: data in OUT/OUTLEN.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Get prototype. */
|
||||
#include "base64.h"
|
||||
|
||||
/* Get malloc. */
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Get UCHAR_MAX. */
|
||||
#include <limits.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* C89 compliant way to cast 'char' to 'unsigned char'. */
|
||||
static inline unsigned char
|
||||
to_uchar (char ch)
|
||||
{
|
||||
return ch;
|
||||
}
|
||||
|
||||
/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN.
|
||||
If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as
|
||||
possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero
|
||||
terminate the output buffer. */
|
||||
void
|
||||
base64_encode (const char *restrict in, size_t inlen,
|
||||
char *restrict out, size_t outlen)
|
||||
{
|
||||
static const char b64str[64] =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
|
||||
while (inlen && outlen)
|
||||
{
|
||||
*out++ = b64str[(to_uchar (in[0]) >> 2) & 0x3f];
|
||||
if (!--outlen)
|
||||
break;
|
||||
*out++ = b64str[((to_uchar (in[0]) << 4)
|
||||
+ (--inlen ? to_uchar (in[1]) >> 4 : 0))
|
||||
& 0x3f];
|
||||
if (!--outlen)
|
||||
break;
|
||||
*out++ =
|
||||
(inlen
|
||||
? b64str[((to_uchar (in[1]) << 2)
|
||||
+ (--inlen ? to_uchar (in[2]) >> 6 : 0))
|
||||
& 0x3f]
|
||||
: '=');
|
||||
if (!--outlen)
|
||||
break;
|
||||
*out++ = inlen ? b64str[to_uchar (in[2]) & 0x3f] : '=';
|
||||
if (!--outlen)
|
||||
break;
|
||||
if (inlen)
|
||||
inlen--;
|
||||
if (inlen)
|
||||
in += 3;
|
||||
}
|
||||
|
||||
if (outlen)
|
||||
*out = '\0';
|
||||
}
|
||||
|
||||
/* Allocate a buffer and store zero terminated base64 encoded data
|
||||
from array IN of size INLEN, returning BASE64_LENGTH(INLEN), i.e.,
|
||||
the length of the encoded data, excluding the terminating zero. On
|
||||
return, the OUT variable will hold a pointer to newly allocated
|
||||
memory that must be deallocated by the caller. If output string
|
||||
length would overflow, 0 is returned and OUT is set to NULL. If
|
||||
memory allocation failed, OUT is set to NULL, and the return value
|
||||
indicates length of the requested memory block, i.e.,
|
||||
BASE64_LENGTH(inlen) + 1. */
|
||||
size_t
|
||||
base64_encode_alloc (const char *in, size_t inlen, char **out)
|
||||
{
|
||||
size_t outlen = 1 + BASE64_LENGTH (inlen);
|
||||
|
||||
/* Check for overflow in outlen computation.
|
||||
*
|
||||
* If there is no overflow, outlen >= inlen.
|
||||
*
|
||||
* If the operation (inlen + 2) overflows then it yields at most +1, so
|
||||
* outlen is 0.
|
||||
*
|
||||
* If the multiplication overflows, we lose at least half of the
|
||||
* correct value, so the result is < ((inlen + 2) / 3) * 2, which is
|
||||
* less than (inlen + 2) * 0.66667, which is less than inlen as soon as
|
||||
* (inlen > 4).
|
||||
*/
|
||||
if (inlen > outlen)
|
||||
{
|
||||
*out = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*out = malloc (outlen);
|
||||
if (!*out)
|
||||
return outlen;
|
||||
|
||||
base64_encode (in, inlen, *out, outlen);
|
||||
|
||||
return outlen - 1;
|
||||
}
|
||||
|
||||
/* With this approach this file works independent of the charset used
|
||||
(think EBCDIC). However, it does assume that the characters in the
|
||||
Base64 alphabet (A-Za-z0-9+/) are encoded in 0..255. POSIX
|
||||
1003.1-2001 require that char and unsigned char are 8-bit
|
||||
quantities, though, taking care of that problem. But this may be a
|
||||
potential problem on non-POSIX C99 platforms.
|
||||
|
||||
IBM C V6 for AIX mishandles "#define B64(x) ...'x'...", so use "_"
|
||||
as the formal parameter rather than "x". */
|
||||
#define B64(_) \
|
||||
((_) == 'A' ? 0 \
|
||||
: (_) == 'B' ? 1 \
|
||||
: (_) == 'C' ? 2 \
|
||||
: (_) == 'D' ? 3 \
|
||||
: (_) == 'E' ? 4 \
|
||||
: (_) == 'F' ? 5 \
|
||||
: (_) == 'G' ? 6 \
|
||||
: (_) == 'H' ? 7 \
|
||||
: (_) == 'I' ? 8 \
|
||||
: (_) == 'J' ? 9 \
|
||||
: (_) == 'K' ? 10 \
|
||||
: (_) == 'L' ? 11 \
|
||||
: (_) == 'M' ? 12 \
|
||||
: (_) == 'N' ? 13 \
|
||||
: (_) == 'O' ? 14 \
|
||||
: (_) == 'P' ? 15 \
|
||||
: (_) == 'Q' ? 16 \
|
||||
: (_) == 'R' ? 17 \
|
||||
: (_) == 'S' ? 18 \
|
||||
: (_) == 'T' ? 19 \
|
||||
: (_) == 'U' ? 20 \
|
||||
: (_) == 'V' ? 21 \
|
||||
: (_) == 'W' ? 22 \
|
||||
: (_) == 'X' ? 23 \
|
||||
: (_) == 'Y' ? 24 \
|
||||
: (_) == 'Z' ? 25 \
|
||||
: (_) == 'a' ? 26 \
|
||||
: (_) == 'b' ? 27 \
|
||||
: (_) == 'c' ? 28 \
|
||||
: (_) == 'd' ? 29 \
|
||||
: (_) == 'e' ? 30 \
|
||||
: (_) == 'f' ? 31 \
|
||||
: (_) == 'g' ? 32 \
|
||||
: (_) == 'h' ? 33 \
|
||||
: (_) == 'i' ? 34 \
|
||||
: (_) == 'j' ? 35 \
|
||||
: (_) == 'k' ? 36 \
|
||||
: (_) == 'l' ? 37 \
|
||||
: (_) == 'm' ? 38 \
|
||||
: (_) == 'n' ? 39 \
|
||||
: (_) == 'o' ? 40 \
|
||||
: (_) == 'p' ? 41 \
|
||||
: (_) == 'q' ? 42 \
|
||||
: (_) == 'r' ? 43 \
|
||||
: (_) == 's' ? 44 \
|
||||
: (_) == 't' ? 45 \
|
||||
: (_) == 'u' ? 46 \
|
||||
: (_) == 'v' ? 47 \
|
||||
: (_) == 'w' ? 48 \
|
||||
: (_) == 'x' ? 49 \
|
||||
: (_) == 'y' ? 50 \
|
||||
: (_) == 'z' ? 51 \
|
||||
: (_) == '0' ? 52 \
|
||||
: (_) == '1' ? 53 \
|
||||
: (_) == '2' ? 54 \
|
||||
: (_) == '3' ? 55 \
|
||||
: (_) == '4' ? 56 \
|
||||
: (_) == '5' ? 57 \
|
||||
: (_) == '6' ? 58 \
|
||||
: (_) == '7' ? 59 \
|
||||
: (_) == '8' ? 60 \
|
||||
: (_) == '9' ? 61 \
|
||||
: (_) == '+' ? 62 \
|
||||
: (_) == '/' ? 63 \
|
||||
: -1)
|
||||
|
||||
static const signed char b64[0x100] = {
|
||||
B64 (0), B64 (1), B64 (2), B64 (3),
|
||||
B64 (4), B64 (5), B64 (6), B64 (7),
|
||||
B64 (8), B64 (9), B64 (10), B64 (11),
|
||||
B64 (12), B64 (13), B64 (14), B64 (15),
|
||||
B64 (16), B64 (17), B64 (18), B64 (19),
|
||||
B64 (20), B64 (21), B64 (22), B64 (23),
|
||||
B64 (24), B64 (25), B64 (26), B64 (27),
|
||||
B64 (28), B64 (29), B64 (30), B64 (31),
|
||||
B64 (32), B64 (33), B64 (34), B64 (35),
|
||||
B64 (36), B64 (37), B64 (38), B64 (39),
|
||||
B64 (40), B64 (41), B64 (42), B64 (43),
|
||||
B64 (44), B64 (45), B64 (46), B64 (47),
|
||||
B64 (48), B64 (49), B64 (50), B64 (51),
|
||||
B64 (52), B64 (53), B64 (54), B64 (55),
|
||||
B64 (56), B64 (57), B64 (58), B64 (59),
|
||||
B64 (60), B64 (61), B64 (62), B64 (63),
|
||||
B64 (64), B64 (65), B64 (66), B64 (67),
|
||||
B64 (68), B64 (69), B64 (70), B64 (71),
|
||||
B64 (72), B64 (73), B64 (74), B64 (75),
|
||||
B64 (76), B64 (77), B64 (78), B64 (79),
|
||||
B64 (80), B64 (81), B64 (82), B64 (83),
|
||||
B64 (84), B64 (85), B64 (86), B64 (87),
|
||||
B64 (88), B64 (89), B64 (90), B64 (91),
|
||||
B64 (92), B64 (93), B64 (94), B64 (95),
|
||||
B64 (96), B64 (97), B64 (98), B64 (99),
|
||||
B64 (100), B64 (101), B64 (102), B64 (103),
|
||||
B64 (104), B64 (105), B64 (106), B64 (107),
|
||||
B64 (108), B64 (109), B64 (110), B64 (111),
|
||||
B64 (112), B64 (113), B64 (114), B64 (115),
|
||||
B64 (116), B64 (117), B64 (118), B64 (119),
|
||||
B64 (120), B64 (121), B64 (122), B64 (123),
|
||||
B64 (124), B64 (125), B64 (126), B64 (127),
|
||||
B64 (128), B64 (129), B64 (130), B64 (131),
|
||||
B64 (132), B64 (133), B64 (134), B64 (135),
|
||||
B64 (136), B64 (137), B64 (138), B64 (139),
|
||||
B64 (140), B64 (141), B64 (142), B64 (143),
|
||||
B64 (144), B64 (145), B64 (146), B64 (147),
|
||||
B64 (148), B64 (149), B64 (150), B64 (151),
|
||||
B64 (152), B64 (153), B64 (154), B64 (155),
|
||||
B64 (156), B64 (157), B64 (158), B64 (159),
|
||||
B64 (160), B64 (161), B64 (162), B64 (163),
|
||||
B64 (164), B64 (165), B64 (166), B64 (167),
|
||||
B64 (168), B64 (169), B64 (170), B64 (171),
|
||||
B64 (172), B64 (173), B64 (174), B64 (175),
|
||||
B64 (176), B64 (177), B64 (178), B64 (179),
|
||||
B64 (180), B64 (181), B64 (182), B64 (183),
|
||||
B64 (184), B64 (185), B64 (186), B64 (187),
|
||||
B64 (188), B64 (189), B64 (190), B64 (191),
|
||||
B64 (192), B64 (193), B64 (194), B64 (195),
|
||||
B64 (196), B64 (197), B64 (198), B64 (199),
|
||||
B64 (200), B64 (201), B64 (202), B64 (203),
|
||||
B64 (204), B64 (205), B64 (206), B64 (207),
|
||||
B64 (208), B64 (209), B64 (210), B64 (211),
|
||||
B64 (212), B64 (213), B64 (214), B64 (215),
|
||||
B64 (216), B64 (217), B64 (218), B64 (219),
|
||||
B64 (220), B64 (221), B64 (222), B64 (223),
|
||||
B64 (224), B64 (225), B64 (226), B64 (227),
|
||||
B64 (228), B64 (229), B64 (230), B64 (231),
|
||||
B64 (232), B64 (233), B64 (234), B64 (235),
|
||||
B64 (236), B64 (237), B64 (238), B64 (239),
|
||||
B64 (240), B64 (241), B64 (242), B64 (243),
|
||||
B64 (244), B64 (245), B64 (246), B64 (247),
|
||||
B64 (248), B64 (249), B64 (250), B64 (251),
|
||||
B64 (252), B64 (253), B64 (254), B64 (255)
|
||||
};
|
||||
|
||||
#if UCHAR_MAX == 255
|
||||
# define uchar_in_range(c) true
|
||||
#else
|
||||
# define uchar_in_range(c) ((c) <= 255)
|
||||
#endif
|
||||
|
||||
/* Return true if CH is a character from the Base64 alphabet, and
|
||||
false otherwise. Note that '=' is padding and not considered to be
|
||||
part of the alphabet. */
|
||||
bool
|
||||
isbase64 (char ch)
|
||||
{
|
||||
return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)];
|
||||
}
|
||||
|
||||
/* Initialize decode-context buffer, CTX. */
|
||||
void
|
||||
base64_decode_ctx_init (struct base64_decode_context *ctx)
|
||||
{
|
||||
ctx->i = 0;
|
||||
}
|
||||
|
||||
/* If CTX->i is 0 or 4, there are four or more bytes in [*IN..IN_END), and
|
||||
none of those four is a newline, then return *IN. Otherwise, copy up to
|
||||
4 - CTX->i non-newline bytes from that range into CTX->buf, starting at
|
||||
index CTX->i and setting CTX->i to reflect the number of bytes copied,
|
||||
and return CTX->buf. In either case, advance *IN to point to the byte
|
||||
after the last one processed, and set *N_NON_NEWLINE to the number of
|
||||
verified non-newline bytes accessible through the returned pointer. */
|
||||
static inline char *
|
||||
get_4 (struct base64_decode_context *ctx,
|
||||
char const *restrict *in, char const *restrict in_end,
|
||||
size_t *n_non_newline)
|
||||
{
|
||||
if (ctx->i == 4)
|
||||
ctx->i = 0;
|
||||
|
||||
if (ctx->i == 0)
|
||||
{
|
||||
char const *t = *in;
|
||||
if (4 <= in_end - *in && memchr (t, '\n', 4) == NULL)
|
||||
{
|
||||
/* This is the common case: no newline. */
|
||||
*in += 4;
|
||||
*n_non_newline = 4;
|
||||
return (char *) t;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
/* Copy non-newline bytes into BUF. */
|
||||
char const *p = *in;
|
||||
while (p < in_end)
|
||||
{
|
||||
char c = *p++;
|
||||
if (c != '\n')
|
||||
{
|
||||
ctx->buf[ctx->i++] = c;
|
||||
if (ctx->i == 4)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*in = p;
|
||||
*n_non_newline = ctx->i;
|
||||
return ctx->buf;
|
||||
}
|
||||
}
|
||||
|
||||
#define return_false \
|
||||
do \
|
||||
{ \
|
||||
*outp = out; \
|
||||
return false; \
|
||||
} \
|
||||
while (false)
|
||||
|
||||
/* Decode up to four bytes of base64-encoded data, IN, of length INLEN
|
||||
into the output buffer, *OUT, of size *OUTLEN bytes. Return true if
|
||||
decoding is successful, false otherwise. If *OUTLEN is too small,
|
||||
as many bytes as possible are written to *OUT. On return, advance
|
||||
*OUT to point to the byte after the last one written, and decrement
|
||||
*OUTLEN to reflect the number of bytes remaining in *OUT. */
|
||||
static inline bool
|
||||
decode_4 (char const *restrict in, size_t inlen,
|
||||
char *restrict *outp, size_t *outleft)
|
||||
{
|
||||
char *out = *outp;
|
||||
if (inlen < 2)
|
||||
return false;
|
||||
|
||||
if (!isbase64 (in[0]) || !isbase64 (in[1]))
|
||||
return false;
|
||||
|
||||
if (*outleft)
|
||||
{
|
||||
*out++ = ((b64[to_uchar (in[0])] << 2)
|
||||
| (b64[to_uchar (in[1])] >> 4));
|
||||
--*outleft;
|
||||
}
|
||||
|
||||
if (inlen == 2)
|
||||
return_false;
|
||||
|
||||
if (in[2] == '=')
|
||||
{
|
||||
if (inlen != 4)
|
||||
return_false;
|
||||
|
||||
if (in[3] != '=')
|
||||
return_false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isbase64 (in[2]))
|
||||
return_false;
|
||||
|
||||
if (*outleft)
|
||||
{
|
||||
*out++ = (((b64[to_uchar (in[1])] << 4) & 0xf0)
|
||||
| (b64[to_uchar (in[2])] >> 2));
|
||||
--*outleft;
|
||||
}
|
||||
|
||||
if (inlen == 3)
|
||||
return_false;
|
||||
|
||||
if (in[3] == '=')
|
||||
{
|
||||
if (inlen != 4)
|
||||
return_false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isbase64 (in[3]))
|
||||
return_false;
|
||||
|
||||
if (*outleft)
|
||||
{
|
||||
*out++ = (((b64[to_uchar (in[2])] << 6) & 0xc0)
|
||||
| b64[to_uchar (in[3])]);
|
||||
--*outleft;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*outp = out;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Decode base64-encoded input array IN of length INLEN to output array
|
||||
OUT that can hold *OUTLEN bytes. The input data may be interspersed
|
||||
with newlines. Return true if decoding was successful, i.e. if the
|
||||
input was valid base64 data, false otherwise. If *OUTLEN is too
|
||||
small, as many bytes as possible will be written to OUT. On return,
|
||||
*OUTLEN holds the length of decoded bytes in OUT. Note that as soon
|
||||
as any non-alphabet, non-newline character is encountered, decoding
|
||||
is stopped and false is returned. If INLEN is zero, then process
|
||||
only whatever data is stored in CTX.
|
||||
|
||||
Initially, CTX must have been initialized via base64_decode_ctx_init.
|
||||
Subsequent calls to this function must reuse whatever state is recorded
|
||||
in that buffer. It is necessary for when a quadruple of base64 input
|
||||
bytes spans two input buffers. */
|
||||
|
||||
bool
|
||||
base64_decode (struct base64_decode_context *ctx,
|
||||
const char *restrict in, size_t inlen,
|
||||
char *restrict out, size_t *outlen)
|
||||
{
|
||||
size_t outleft = *outlen;
|
||||
bool flush_ctx = inlen == 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
size_t outleft_save = outleft;
|
||||
if (ctx->i == 0 && !flush_ctx)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
/* Save a copy of outleft, in case we need to re-parse this
|
||||
block of four bytes. */
|
||||
outleft_save = outleft;
|
||||
if (!decode_4 (in, inlen, &out, &outleft))
|
||||
break;
|
||||
|
||||
in += 4;
|
||||
inlen -= 4;
|
||||
}
|
||||
}
|
||||
|
||||
if (inlen == 0 && !flush_ctx)
|
||||
break;
|
||||
|
||||
/* Handle the common case of 72-byte wrapped lines.
|
||||
This also handles any other multiple-of-4-byte wrapping. */
|
||||
if (inlen && *in == '\n')
|
||||
{
|
||||
++in;
|
||||
--inlen;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Restore OUT and OUTLEFT. */
|
||||
out -= outleft_save - outleft;
|
||||
outleft = outleft_save;
|
||||
|
||||
{
|
||||
char const *in_end = in + inlen;
|
||||
char const *non_nl = get_4 (ctx, &in, in_end, &inlen);
|
||||
|
||||
/* If the input is empty or consists solely of newlines (0 non-newlines),
|
||||
then we're done. Likewise if there are fewer than 4 bytes when not
|
||||
flushing context. */
|
||||
if (inlen == 0 || (inlen < 4 && !flush_ctx))
|
||||
{
|
||||
inlen = 0;
|
||||
break;
|
||||
}
|
||||
if (!decode_4 (non_nl, inlen, &out, &outleft))
|
||||
break;
|
||||
|
||||
inlen = in_end - in;
|
||||
}
|
||||
}
|
||||
|
||||
*outlen -= outleft;
|
||||
|
||||
return inlen == 0;
|
||||
}
|
||||
|
||||
/* Allocate an output buffer in *OUT, and decode the base64 encoded
|
||||
data stored in IN of size INLEN to the *OUT buffer. On return, the
|
||||
size of the decoded data is stored in *OUTLEN. OUTLEN may be NULL,
|
||||
if the caller is not interested in the decoded length. *OUT may be
|
||||
NULL to indicate an out of memory error, in which case *OUTLEN
|
||||
contains the size of the memory block needed. The function returns
|
||||
true on successful decoding and memory allocation errors. (Use the
|
||||
*OUT and *OUTLEN parameters to differentiate between successful
|
||||
decoding and memory error.) The function returns false if the
|
||||
input was invalid, in which case *OUT is NULL and *OUTLEN is
|
||||
undefined. */
|
||||
bool
|
||||
base64_decode_alloc (struct base64_decode_context *ctx,
|
||||
const char *in, size_t inlen, char **out,
|
||||
size_t *outlen)
|
||||
{
|
||||
/* This may allocate a few bytes too many, depending on input,
|
||||
but it's not worth the extra CPU time to compute the exact size.
|
||||
The exact size is 3 * inlen / 4, minus 1 if the input ends
|
||||
with "=" and minus another 1 if the input ends with "==".
|
||||
Dividing before multiplying avoids the possibility of overflow. */
|
||||
size_t needlen = 3 * (inlen / 4) + 2;
|
||||
|
||||
*out = malloc (needlen);
|
||||
if (!*out)
|
||||
return true;
|
||||
|
||||
if (!base64_decode (ctx, in, inlen, *out, &needlen))
|
||||
{
|
||||
free (*out);
|
||||
*out = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (outlen)
|
||||
*outlen = needlen;
|
||||
|
||||
return true;
|
||||
}
|
||||
54
gl/lib/base64.h
Normal file
54
gl/lib/base64.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/* base64.h -- Encode binary data using printable characters.
|
||||
Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
Written by Simon Josefsson.
|
||||
|
||||
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef BASE64_H
|
||||
# define BASE64_H
|
||||
|
||||
/* Get size_t. */
|
||||
# include <stddef.h>
|
||||
|
||||
/* Get bool. */
|
||||
# include <stdbool.h>
|
||||
|
||||
/* This uses that the expression (n+(k-1))/k means the smallest
|
||||
integer >= n/k, i.e., the ceiling of n/k. */
|
||||
# define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4)
|
||||
|
||||
struct base64_decode_context
|
||||
{
|
||||
unsigned int i;
|
||||
char buf[4];
|
||||
};
|
||||
|
||||
extern bool isbase64 (char ch);
|
||||
|
||||
extern void base64_encode (const char *restrict in, size_t inlen,
|
||||
char *restrict out, size_t outlen);
|
||||
|
||||
extern size_t base64_encode_alloc (const char *in, size_t inlen, char **out);
|
||||
|
||||
extern void base64_decode_ctx_init (struct base64_decode_context *ctx);
|
||||
extern bool base64_decode (struct base64_decode_context *ctx,
|
||||
const char *restrict in, size_t inlen,
|
||||
char *restrict out, size_t *outlen);
|
||||
|
||||
extern bool base64_decode_alloc (struct base64_decode_context *ctx,
|
||||
const char *in, size_t inlen,
|
||||
char **out, size_t *outlen);
|
||||
|
||||
#endif /* BASE64_H */
|
||||
@@ -1,231 +0,0 @@
|
||||
/* Align/Truncate a string in a given screen width
|
||||
Copyright (C) 2009 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 3 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Written by Pádraig Brady. */
|
||||
|
||||
#include <config.h>
|
||||
#include "mbsalign.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <limits.h>
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
|
||||
#ifndef MIN
|
||||
# define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
/* Replace non printable chars.
|
||||
Return 1 if replacement made, 0 otherwise. */
|
||||
|
||||
static bool
|
||||
wc_ensure_printable (wchar_t *wchars)
|
||||
{
|
||||
bool replaced = false;
|
||||
wchar_t *wc = wchars;
|
||||
while (*wc)
|
||||
{
|
||||
if (!iswprint ((wint_t) *wc))
|
||||
{
|
||||
*wc = 0xFFFD; /* L'\uFFFD' (replacement char) */
|
||||
replaced = true;
|
||||
}
|
||||
wc++;
|
||||
}
|
||||
return replaced;
|
||||
}
|
||||
|
||||
/* Truncate wchar string to width cells.
|
||||
* Returns number of cells used. */
|
||||
|
||||
static size_t
|
||||
wc_truncate (wchar_t *wc, size_t width)
|
||||
{
|
||||
size_t cells = 0;
|
||||
int next_cells = 0;
|
||||
|
||||
while (*wc)
|
||||
{
|
||||
next_cells = wcwidth (*wc);
|
||||
if (next_cells == -1) /* non printable */
|
||||
{
|
||||
*wc = 0xFFFD; /* L'\uFFFD' (replacement char) */
|
||||
next_cells = 1;
|
||||
}
|
||||
if (cells + next_cells > width)
|
||||
break;
|
||||
cells += next_cells;
|
||||
wc++;
|
||||
}
|
||||
*wc = L'\0';
|
||||
return cells;
|
||||
}
|
||||
|
||||
/* FIXME: move this function to gnulib as it's missing on:
|
||||
OpenBSD 3.8, IRIX 5.3, Solaris 2.5.1, mingw, BeOS */
|
||||
|
||||
static int
|
||||
rpl_wcswidth (const wchar_t *s, size_t n)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
while (n-- > 0 && *s != L'\0')
|
||||
{
|
||||
int nwidth = wcwidth (*s++);
|
||||
if (nwidth == -1) /* non printable */
|
||||
return -1;
|
||||
if (ret > (INT_MAX - nwidth)) /* overflow */
|
||||
return -1;
|
||||
ret += nwidth;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Write N_SPACES space characters to DEST while ensuring
|
||||
nothing is written beyond DEST_END. A terminating NUL
|
||||
is always added to DEST.
|
||||
A pointer to the terminating NUL is returned. */
|
||||
|
||||
static char*
|
||||
mbs_align_pad (char *dest, const char* dest_end, size_t n_spaces)
|
||||
{
|
||||
/* FIXME: Should we pad with "figure space" (\u2007)
|
||||
if non ascii data present? */
|
||||
while (n_spaces-- && (dest < dest_end))
|
||||
*dest++ = ' ';
|
||||
*dest = '\0';
|
||||
return dest;
|
||||
}
|
||||
|
||||
/* Align a string, SRC, in a field of *WIDTH columns, handling multi-byte
|
||||
characters; write the result into the DEST_SIZE-byte buffer, DEST.
|
||||
ALIGNMENT specifies whether to left- or right-justify or to center.
|
||||
If SRC requires more than *WIDTH columns, truncate it to fit.
|
||||
When centering, the number of trailing spaces may be one less than the
|
||||
number of leading spaces. The FLAGS parameter is unused at present.
|
||||
Return the length in bytes required for the final result, not counting
|
||||
the trailing NUL. A return value of DEST_SIZE or larger means there
|
||||
wasn't enough space. DEST will be NUL terminated in any case.
|
||||
Return (size_t) -1 upon error (invalid multi-byte sequence in SRC,
|
||||
or malloc failure).
|
||||
Update *WIDTH to indicate how many columns were used before padding. */
|
||||
|
||||
size_t
|
||||
mbsalign (const char *src, char *dest, size_t dest_size,
|
||||
size_t *width, mbs_align_t align, int flags)
|
||||
{
|
||||
size_t ret = -1;
|
||||
size_t src_size = strlen (src) + 1;
|
||||
char *newstr = NULL;
|
||||
wchar_t *str_wc = NULL;
|
||||
const char *str_to_print = src;
|
||||
size_t n_cols = src_size - 1;
|
||||
size_t n_used_bytes = n_cols; /* Not including NUL */
|
||||
size_t n_spaces = 0;
|
||||
bool conversion = false;
|
||||
bool wc_enabled = false;
|
||||
|
||||
/* In multi-byte locales convert to wide characters
|
||||
to allow easy truncation. Also determine number
|
||||
of screen columns used. */
|
||||
if (MB_CUR_MAX > 1)
|
||||
{
|
||||
size_t src_chars = mbstowcs (NULL, src, 0);
|
||||
if (src_chars == (size_t) -1)
|
||||
goto mbsalign_cleanup;
|
||||
src_chars += 1; /* make space for NUL */
|
||||
str_wc = malloc (src_chars * sizeof (wchar_t));
|
||||
if (str_wc == NULL)
|
||||
goto mbsalign_cleanup;
|
||||
if (mbstowcs (str_wc, src, src_chars) > 0)
|
||||
{
|
||||
str_wc[src_chars - 1] = L'\0';
|
||||
wc_enabled = true;
|
||||
conversion = wc_ensure_printable (str_wc);
|
||||
n_cols = rpl_wcswidth (str_wc, src_chars);
|
||||
}
|
||||
}
|
||||
|
||||
/* If we transformed or need to truncate the source string
|
||||
then create a modified copy of it. */
|
||||
if (conversion || (n_cols > *width))
|
||||
{
|
||||
newstr = malloc (src_size);
|
||||
if (newstr == NULL)
|
||||
goto mbsalign_cleanup;
|
||||
str_to_print = newstr;
|
||||
if (wc_enabled)
|
||||
{
|
||||
n_cols = wc_truncate (str_wc, *width);
|
||||
n_used_bytes = wcstombs (newstr, str_wc, src_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
n_cols = *width;
|
||||
n_used_bytes = n_cols;
|
||||
memcpy (newstr, src, n_cols);
|
||||
newstr[n_cols] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
if (*width > n_cols)
|
||||
n_spaces = *width - n_cols;
|
||||
|
||||
/* indicate to caller how many cells needed (not including padding). */
|
||||
*width = n_cols;
|
||||
|
||||
/* indicate to caller how many bytes needed (not including NUL). */
|
||||
ret = n_used_bytes + (n_spaces * 1);
|
||||
|
||||
/* Write as much NUL terminated output to DEST as possible. */
|
||||
if (dest_size != 0)
|
||||
{
|
||||
char *dest_end = dest + dest_size - 1;
|
||||
size_t start_spaces = n_spaces / 2 + n_spaces % 2;
|
||||
size_t end_spaces = n_spaces / 2;
|
||||
|
||||
switch (align)
|
||||
{
|
||||
case MBS_ALIGN_CENTER:
|
||||
start_spaces = n_spaces / 2 + n_spaces % 2;
|
||||
end_spaces = n_spaces / 2;
|
||||
break;
|
||||
case MBS_ALIGN_LEFT:
|
||||
start_spaces = 0;
|
||||
end_spaces = n_spaces;
|
||||
break;
|
||||
case MBS_ALIGN_RIGHT:
|
||||
start_spaces = n_spaces;
|
||||
end_spaces = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
dest = mbs_align_pad (dest, dest_end, start_spaces);
|
||||
dest = mempcpy(dest, str_to_print, MIN (n_used_bytes, dest_end - dest));
|
||||
mbs_align_pad (dest, dest_end, end_spaces);
|
||||
}
|
||||
|
||||
mbsalign_cleanup:
|
||||
|
||||
free (str_wc);
|
||||
free (newstr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
/* Align/Truncate a string in a given screen width
|
||||
Copyright (C) 2009 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 3 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
typedef enum { MBS_ALIGN_LEFT, MBS_ALIGN_RIGHT, MBS_ALIGN_CENTER } mbs_align_t;
|
||||
|
||||
size_t
|
||||
mbsalign (const char *src, char *dest, size_t dest_size,
|
||||
size_t *width, mbs_align_t align, int flags);
|
||||
@@ -1,142 +0,0 @@
|
||||
/* mgetgroups.c -- return a list of the groups a user is in
|
||||
|
||||
Copyright (C) 2007-2009 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 3 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Extracted from coreutils' src/id.c. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "mgetgroups.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#if HAVE_GETGROUPLIST
|
||||
# include <grp.h>
|
||||
#endif
|
||||
#include "getugroups.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
|
||||
static GETGROUPS_T *
|
||||
realloc_groupbuf (GETGROUPS_T *g, size_t num)
|
||||
{
|
||||
if (xalloc_oversized (num, sizeof (*g)))
|
||||
{
|
||||
errno = ENOMEM;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return realloc (g, num * sizeof (*g));
|
||||
}
|
||||
|
||||
/* Like getugroups, but store the result in malloc'd storage.
|
||||
Set *GROUPS to the malloc'd list of all group IDs of which USERNAME
|
||||
is a member. If GID is not -1, store it first. GID should be the
|
||||
group ID (pw_gid) obtained from getpwuid, in case USERNAME is not
|
||||
listed in the groups database (e.g., /etc/groups). Upon failure,
|
||||
don't modify *GROUPS, set errno, and return -1. Otherwise, return
|
||||
the number of groups. */
|
||||
|
||||
int
|
||||
mgetgroups (char const *username, gid_t gid, GETGROUPS_T **groups)
|
||||
{
|
||||
int max_n_groups;
|
||||
int ng;
|
||||
GETGROUPS_T *g;
|
||||
|
||||
#if HAVE_GETGROUPLIST
|
||||
/* We prefer to use getgrouplist if available, because it has better
|
||||
performance characteristics.
|
||||
|
||||
In glibc 2.3.2, getgrouplist is buggy. If you pass a zero as the
|
||||
length of the output buffer, getgrouplist will still write to the
|
||||
buffer. Contrary to what some versions of the getgrouplist
|
||||
manpage say, this doesn't happen with nonzero buffer sizes.
|
||||
Therefore our usage here just avoids a zero sized buffer. */
|
||||
if (username)
|
||||
{
|
||||
enum { N_GROUPS_INIT = 10 };
|
||||
max_n_groups = N_GROUPS_INIT;
|
||||
|
||||
g = realloc_groupbuf (NULL, max_n_groups);
|
||||
if (g == NULL)
|
||||
return -1;
|
||||
|
||||
while (1)
|
||||
{
|
||||
GETGROUPS_T *h;
|
||||
int last_n_groups = max_n_groups;
|
||||
|
||||
/* getgrouplist updates max_n_groups to num required. */
|
||||
ng = getgrouplist (username, gid, g, &max_n_groups);
|
||||
|
||||
/* Some systems (like Darwin) have a bug where they
|
||||
never increase max_n_groups. */
|
||||
if (ng < 0 && last_n_groups == max_n_groups)
|
||||
max_n_groups *= 2;
|
||||
|
||||
if ((h = realloc_groupbuf (g, max_n_groups)) == NULL)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
free (g);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
g = h;
|
||||
|
||||
if (0 <= ng)
|
||||
{
|
||||
*groups = g;
|
||||
/* On success some systems just return 0 from getgrouplist,
|
||||
so return max_n_groups rather than ng. */
|
||||
return max_n_groups;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* else no username, so fall through and use getgroups. */
|
||||
#endif
|
||||
|
||||
max_n_groups = (username
|
||||
? getugroups (0, NULL, username, gid)
|
||||
: getgroups (0, NULL));
|
||||
|
||||
/* If we failed to count groups with NULL for a buffer,
|
||||
try again with a non-NULL one, just in case. */
|
||||
if (max_n_groups < 0)
|
||||
max_n_groups = 5;
|
||||
|
||||
g = realloc_groupbuf (NULL, max_n_groups);
|
||||
if (g == NULL)
|
||||
return -1;
|
||||
|
||||
ng = (username
|
||||
? getugroups (max_n_groups, g, username, gid)
|
||||
: getgroups (max_n_groups, g));
|
||||
|
||||
if (ng < 0)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
free (g);
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
|
||||
*groups = g;
|
||||
return ng;
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
/* Get a list of all group IDs associated with a specified user ID.
|
||||
Copyright (C) 2007, 2009 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 3 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
int mgetgroups (const char *username, gid_t gid, GETGROUPS_T **groups);
|
||||
@@ -1,10 +1,10 @@
|
||||
/* root-dev-ino.c -- get the device and inode numbers for `/'.
|
||||
Copyright (C) 2003, 2005, 2006, 2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
@@ -12,7 +12,8 @@
|
||||
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, see <http://www.gnu.org/licenses/>. */
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* Written by Jim Meyering. */
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/* Root device and inode number checking.
|
||||
|
||||
Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003, 2006 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
@@ -13,7 +13,8 @@
|
||||
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, see <http://www.gnu.org/licenses/>. */
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#ifndef ROOT_DEV_INO_H
|
||||
# define ROOT_DEV_INO_H 1
|
||||
@@ -34,12 +35,12 @@ get_root_dev_ino (struct dev_ino *root_d_i);
|
||||
do \
|
||||
{ \
|
||||
if (STREQ (Dirname, "/")) \
|
||||
error (0, 0, _("it is dangerous to operate recursively on %s"), \
|
||||
quote (Dirname)); \
|
||||
error (0, 0, _("it is dangerous to operate recursively on %s"), \
|
||||
quote (Dirname)); \
|
||||
else \
|
||||
error (0, 0, \
|
||||
_("it is dangerous to operate recursively on %s (same as %s)"), \
|
||||
quote_n (0, Dirname), quote_n (1, "/")); \
|
||||
error (0, 0, \
|
||||
_("it is dangerous to operate recursively on %s (same as %s)"), \
|
||||
quote_n (0, Dirname), quote_n (1, "/")); \
|
||||
error (0, 0, _("use --no-preserve-root to override this failsafe")); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
308
gl/lib/savewd.c
Normal file
308
gl/lib/savewd.c
Normal file
@@ -0,0 +1,308 @@
|
||||
/* Save and restore the working directory, possibly using a child process.
|
||||
|
||||
Copyright (C) 2006, 2007 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* Written by Paul Eggert. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "savewd.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dirname.h"
|
||||
#include "fcntl-safer.h"
|
||||
|
||||
|
||||
/* Save the working directory into *WD, if it hasn't been saved
|
||||
already. Return true if a child has been forked to do the real
|
||||
work. */
|
||||
static bool
|
||||
savewd_save (struct savewd *wd)
|
||||
{
|
||||
switch (wd->state)
|
||||
{
|
||||
case INITIAL_STATE:
|
||||
/* Save the working directory, or prepare to fall back if possible. */
|
||||
{
|
||||
int fd = open_safer (".", O_RDONLY);
|
||||
if (0 <= fd)
|
||||
{
|
||||
wd->state = FD_STATE;
|
||||
wd->val.fd = fd;
|
||||
break;
|
||||
}
|
||||
if (errno != EACCES && errno != ESTALE)
|
||||
{
|
||||
wd->state = ERROR_STATE;
|
||||
wd->val.errnum = errno;
|
||||
break;
|
||||
}
|
||||
}
|
||||
wd->state = FORKING_STATE;
|
||||
wd->val.child = -1;
|
||||
/* Fall through. */
|
||||
case FORKING_STATE:
|
||||
if (wd->val.child < 0)
|
||||
{
|
||||
/* "Save" the initial working directory by forking a new
|
||||
subprocess that will attempt all the work from the chdir
|
||||
until until the next savewd_restore. */
|
||||
wd->val.child = fork ();
|
||||
if (wd->val.child != 0)
|
||||
{
|
||||
if (0 < wd->val.child)
|
||||
return true;
|
||||
wd->state = ERROR_STATE;
|
||||
wd->val.errnum = errno;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case FD_STATE:
|
||||
case FD_POST_CHDIR_STATE:
|
||||
case ERROR_STATE:
|
||||
case FINAL_STATE:
|
||||
break;
|
||||
|
||||
default:
|
||||
assert (false);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
savewd_chdir (struct savewd *wd, char const *dir, int options,
|
||||
int open_result[2])
|
||||
{
|
||||
int fd = -1;
|
||||
int result = 0;
|
||||
|
||||
/* Open the directory if requested, or if avoiding a race condition
|
||||
is requested and possible. */
|
||||
if (open_result
|
||||
|| (options & (HAVE_WORKING_O_NOFOLLOW ? SAVEWD_CHDIR_NOFOLLOW : 0)))
|
||||
{
|
||||
fd = open (dir,
|
||||
(O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK
|
||||
| (options & SAVEWD_CHDIR_NOFOLLOW ? O_NOFOLLOW : 0)));
|
||||
|
||||
if (open_result)
|
||||
{
|
||||
open_result[0] = fd;
|
||||
open_result[1] = errno;
|
||||
}
|
||||
|
||||
if (fd < 0 && ((errno != EACCES && errno != ESTALE)
|
||||
|| (options & SAVEWD_CHDIR_READABLE)))
|
||||
result = -1;
|
||||
}
|
||||
|
||||
if (result == 0 && ! (0 <= fd && options & SAVEWD_CHDIR_SKIP_READABLE))
|
||||
{
|
||||
if (savewd_save (wd))
|
||||
{
|
||||
open_result = NULL;
|
||||
result = -2;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = (fd < 0 ? chdir (dir) : fchdir (fd));
|
||||
|
||||
if (result == 0)
|
||||
switch (wd->state)
|
||||
{
|
||||
case FD_STATE:
|
||||
wd->state = FD_POST_CHDIR_STATE;
|
||||
break;
|
||||
|
||||
case ERROR_STATE:
|
||||
case FD_POST_CHDIR_STATE:
|
||||
case FINAL_STATE:
|
||||
break;
|
||||
|
||||
case FORKING_STATE:
|
||||
assert (wd->val.child == 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
assert (false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (0 <= fd && ! open_result)
|
||||
{
|
||||
int e = errno;
|
||||
close (fd);
|
||||
errno = e;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int
|
||||
savewd_restore (struct savewd *wd, int status)
|
||||
{
|
||||
switch (wd->state)
|
||||
{
|
||||
case INITIAL_STATE:
|
||||
case FD_STATE:
|
||||
/* The working directory is the desired directory, so there's no
|
||||
work to do. */
|
||||
break;
|
||||
|
||||
case FD_POST_CHDIR_STATE:
|
||||
/* Restore the working directory using fchdir. */
|
||||
if (fchdir (wd->val.fd) == 0)
|
||||
{
|
||||
wd->state = FD_STATE;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
int chdir_errno = errno;
|
||||
close (wd->val.fd);
|
||||
wd->state = ERROR_STATE;
|
||||
wd->val.errnum = chdir_errno;
|
||||
}
|
||||
/* Fall through. */
|
||||
case ERROR_STATE:
|
||||
/* Report an error if asked to restore the working directory. */
|
||||
errno = wd->val.errnum;
|
||||
return -1;
|
||||
|
||||
case FORKING_STATE:
|
||||
/* "Restore" the working directory by waiting for the subprocess
|
||||
to finish. */
|
||||
{
|
||||
pid_t child = wd->val.child;
|
||||
if (child == 0)
|
||||
_exit (status);
|
||||
if (0 < child)
|
||||
{
|
||||
int child_status;
|
||||
while (waitpid (child, &child_status, 0) < 0)
|
||||
assert (errno == EINTR);
|
||||
wd->val.child = -1;
|
||||
if (! WIFEXITED (child_status))
|
||||
raise (WTERMSIG (child_status));
|
||||
return WEXITSTATUS (child_status);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
assert (false);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
savewd_finish (struct savewd *wd)
|
||||
{
|
||||
switch (wd->state)
|
||||
{
|
||||
case INITIAL_STATE:
|
||||
case ERROR_STATE:
|
||||
break;
|
||||
|
||||
case FD_STATE:
|
||||
case FD_POST_CHDIR_STATE:
|
||||
close (wd->val.fd);
|
||||
break;
|
||||
|
||||
case FORKING_STATE:
|
||||
assert (wd->val.child < 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
assert (false);
|
||||
}
|
||||
|
||||
wd->state = FINAL_STATE;
|
||||
}
|
||||
|
||||
/* Return true if the actual work is currently being done by a
|
||||
subprocess.
|
||||
|
||||
A true return means that the caller and the subprocess should
|
||||
resynchronize later with savewd_restore, using only their own
|
||||
memory to decide when to resynchronize; they should not consult the
|
||||
file system to decide, because that might lead to race conditions.
|
||||
This is why savewd_chdir is broken out into another function;
|
||||
savewd_chdir's callers _can_ inspect the file system to decide
|
||||
whether to call savewd_chdir. */
|
||||
static inline bool
|
||||
savewd_delegating (struct savewd const *wd)
|
||||
{
|
||||
return wd->state == FORKING_STATE && 0 < wd->val.child;
|
||||
}
|
||||
|
||||
int
|
||||
savewd_process_files (int n_files, char **file,
|
||||
int (*act) (char *, struct savewd *, void *),
|
||||
void *options)
|
||||
{
|
||||
int i = 0;
|
||||
int last_relative;
|
||||
int exit_status = EXIT_SUCCESS;
|
||||
struct savewd wd;
|
||||
savewd_init (&wd);
|
||||
|
||||
for (last_relative = n_files - 1; 0 <= last_relative; last_relative--)
|
||||
if (! IS_ABSOLUTE_FILE_NAME (file[last_relative]))
|
||||
break;
|
||||
|
||||
for (; i < last_relative; i++)
|
||||
{
|
||||
if (! savewd_delegating (&wd))
|
||||
{
|
||||
int s = act (file[i], &wd, options);
|
||||
if (exit_status < s)
|
||||
exit_status = s;
|
||||
}
|
||||
|
||||
if (! IS_ABSOLUTE_FILE_NAME (file[i + 1]))
|
||||
{
|
||||
int r = savewd_restore (&wd, exit_status);
|
||||
if (exit_status < r)
|
||||
exit_status = r;
|
||||
}
|
||||
}
|
||||
|
||||
savewd_finish (&wd);
|
||||
|
||||
for (; i < n_files; i++)
|
||||
{
|
||||
int s = act (file[i], &wd, options);
|
||||
if (exit_status < s)
|
||||
exit_status = s;
|
||||
}
|
||||
|
||||
return exit_status;
|
||||
}
|
||||
31
gl/lib/se-context_.h
Normal file
31
gl/lib/se-context_.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#ifndef SELINUX_CONTEXT_H
|
||||
# define SELINUX_CONTEXT_H
|
||||
|
||||
# include <errno.h>
|
||||
/* Some systems don't have ENOSYS. */
|
||||
# ifndef ENOSYS
|
||||
# ifdef ENOTSUP
|
||||
# define ENOSYS ENOTSUP
|
||||
# else
|
||||
/* Some systems don't have ENOTSUP either. */
|
||||
# define ENOSYS EINVAL
|
||||
# endif
|
||||
# endif
|
||||
|
||||
typedef int context_t;
|
||||
static inline context_t context_new (char const *s)
|
||||
{ errno = ENOTSUP; return 0; }
|
||||
static inline char *context_str (context_t con)
|
||||
{ errno = ENOTSUP; return (void *) 0; }
|
||||
static inline void context_free (context_t c) {}
|
||||
|
||||
static inline int context_user_set (context_t sc, char const *s)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int context_role_set (context_t sc, char const *s)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int context_range_set (context_t sc, char const *s)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int context_type_set (context_t sc, char const *s)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
|
||||
#endif
|
||||
54
gl/lib/se-selinux_.h
Normal file
54
gl/lib/se-selinux_.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#ifndef SELINUX_SELINUX_H
|
||||
# define SELINUX_SELINUX_H
|
||||
|
||||
# include <sys/types.h>
|
||||
# include <errno.h>
|
||||
/* Some systems don't have ENOSYS. */
|
||||
# ifndef ENOSYS
|
||||
# ifdef ENOTSUP
|
||||
# define ENOSYS ENOTSUP
|
||||
# else
|
||||
/* Some systems don't have ENOTSUP either. */
|
||||
# define ENOSYS EINVAL
|
||||
# endif
|
||||
# endif
|
||||
|
||||
typedef unsigned short security_class_t;
|
||||
# define security_context_t char*
|
||||
# define is_selinux_enabled() 0
|
||||
|
||||
static inline int getcon (security_context_t *con) { errno = ENOTSUP; return -1; }
|
||||
static inline void freecon (security_context_t con) {}
|
||||
|
||||
|
||||
static inline int getfscreatecon (security_context_t *con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int setfscreatecon (security_context_t con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int matchpathcon (char const *s, mode_t m,
|
||||
security_context_t *con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
|
||||
static inline int getfilecon (char const *s, security_context_t *con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int lgetfilecon (char const *s, security_context_t *con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int setfilecon (char const *s, security_context_t con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int lsetfilecon (char const *s, security_context_t con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int fsetfilecon (int fd, security_context_t con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
|
||||
static inline int security_check_context (security_context_t con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int security_check_context_raw (security_context_t con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int setexeccon (security_context_t con)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
static inline int security_compute_create (security_context_t scon,
|
||||
security_context_t tcon,
|
||||
security_class_t tclass,
|
||||
security_context_t *newcon)
|
||||
{ errno = ENOTSUP; return -1; }
|
||||
#endif
|
||||
92
gl/lib/selinux-at.c
Normal file
92
gl/lib/selinux-at.c
Normal file
@@ -0,0 +1,92 @@
|
||||
/* openat-style fd-relative functions for SE Linux
|
||||
Copyright (C) 2007 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* written by Jim Meyering */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "selinux-at.h"
|
||||
#include "openat.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
|
||||
#include "save-cwd.h"
|
||||
|
||||
#include "gettext.h"
|
||||
#define _(msgid) gettext (msgid)
|
||||
|
||||
#include "openat-priv.h"
|
||||
|
||||
#define AT_FUNC_NAME getfileconat
|
||||
#define AT_FUNC_F1 getfilecon
|
||||
#define AT_FUNC_F2 getfilecon
|
||||
#define AT_FUNC_USE_F1_COND 1
|
||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t *con
|
||||
#define AT_FUNC_POST_FILE_ARGS , con
|
||||
#include "at-func.c"
|
||||
#undef AT_FUNC_NAME
|
||||
#undef AT_FUNC_F1
|
||||
#undef AT_FUNC_F2
|
||||
#undef AT_FUNC_USE_F1_COND
|
||||
#undef AT_FUNC_POST_FILE_PARAM_DECLS
|
||||
#undef AT_FUNC_POST_FILE_ARGS
|
||||
|
||||
#define AT_FUNC_NAME lgetfileconat
|
||||
#define AT_FUNC_F1 lgetfilecon
|
||||
#define AT_FUNC_F2 lgetfilecon
|
||||
#define AT_FUNC_USE_F1_COND 1
|
||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t *con
|
||||
#define AT_FUNC_POST_FILE_ARGS , con
|
||||
#include "at-func.c"
|
||||
#undef AT_FUNC_NAME
|
||||
#undef AT_FUNC_F1
|
||||
#undef AT_FUNC_F2
|
||||
#undef AT_FUNC_USE_F1_COND
|
||||
#undef AT_FUNC_POST_FILE_PARAM_DECLS
|
||||
#undef AT_FUNC_POST_FILE_ARGS
|
||||
|
||||
#define AT_FUNC_NAME setfileconat
|
||||
#define AT_FUNC_F1 setfilecon
|
||||
#define AT_FUNC_F2 setfilecon
|
||||
#define AT_FUNC_USE_F1_COND 1
|
||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t con
|
||||
#define AT_FUNC_POST_FILE_ARGS , con
|
||||
#include "at-func.c"
|
||||
#undef AT_FUNC_NAME
|
||||
#undef AT_FUNC_F1
|
||||
#undef AT_FUNC_F2
|
||||
#undef AT_FUNC_USE_F1_COND
|
||||
#undef AT_FUNC_POST_FILE_PARAM_DECLS
|
||||
#undef AT_FUNC_POST_FILE_ARGS
|
||||
|
||||
#define AT_FUNC_NAME lsetfileconat
|
||||
#define AT_FUNC_F1 lsetfilecon
|
||||
#define AT_FUNC_F2 lsetfilecon
|
||||
#define AT_FUNC_USE_F1_COND 1
|
||||
#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t con
|
||||
#define AT_FUNC_POST_FILE_ARGS , con
|
||||
#include "at-func.c"
|
||||
#undef AT_FUNC_NAME
|
||||
#undef AT_FUNC_F1
|
||||
#undef AT_FUNC_F2
|
||||
#undef AT_FUNC_USE_F1_COND
|
||||
#undef AT_FUNC_POST_FILE_PARAM_DECLS
|
||||
#undef AT_FUNC_POST_FILE_ARGS
|
||||
24
gl/lib/selinux-at.h
Normal file
24
gl/lib/selinux-at.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/* Prototypes for openat-style fd-relative SELinux functions
|
||||
Copyright (C) 2007 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
#include <selinux/selinux.h>
|
||||
#include <selinux/context.h>
|
||||
|
||||
int getfileconat (int fd, char const *file, security_context_t *con);
|
||||
int lgetfileconat (int fd, char const *file, security_context_t *con);
|
||||
int setfileconat (int fd, char const *file, security_context_t con);
|
||||
int lsetfileconat (int fd, char const *file, security_context_t con);
|
||||
@@ -1,294 +0,0 @@
|
||||
/* tempname.c - generate the name of a temporary file.
|
||||
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009 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 3 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Extracted from glibc sysdeps/posix/tempname.c. See also tmpdir.c. */
|
||||
|
||||
#if !_LIBC
|
||||
# include <config.h>
|
||||
# include "tempname.h"
|
||||
# include "randint.h"
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef __set_errno
|
||||
# define __set_errno(Val) errno = (Val)
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#ifndef P_tmpdir
|
||||
# define P_tmpdir "/tmp"
|
||||
#endif
|
||||
#ifndef TMP_MAX
|
||||
# define TMP_MAX 238328
|
||||
#endif
|
||||
#ifndef __GT_FILE
|
||||
# define __GT_FILE 1
|
||||
# define __GT_DIR 2
|
||||
# define __GT_NOCREATE 3
|
||||
#endif
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdint.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#if _LIBC
|
||||
# define struct_stat64 struct stat64
|
||||
#else
|
||||
# define struct_stat64 struct stat
|
||||
# define __open open
|
||||
# define __gen_tempname gen_tempname
|
||||
# define __getpid getpid
|
||||
# define __gettimeofday gettimeofday
|
||||
# define __mkdir mkdir
|
||||
# define __lxstat64(version, file, buf) lstat (file, buf)
|
||||
# define __xstat64(version, file, buf) stat (file, buf)
|
||||
#endif
|
||||
|
||||
#if ! (HAVE___SECURE_GETENV || _LIBC)
|
||||
# define __secure_getenv getenv
|
||||
#endif
|
||||
|
||||
#if _LIBC
|
||||
/* Return nonzero if DIR is an existent directory. */
|
||||
static int
|
||||
direxists (const char *dir)
|
||||
{
|
||||
struct_stat64 buf;
|
||||
return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode);
|
||||
}
|
||||
|
||||
/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is
|
||||
non-null and exists, uses it; otherwise uses the first of $TMPDIR,
|
||||
P_tmpdir, /tmp that exists. Copies into TMPL a template suitable
|
||||
for use with mk[s]temp. Will fail (-1) if DIR is non-null and
|
||||
doesn't exist, none of the searched dirs exists, or there's not
|
||||
enough space in TMPL. */
|
||||
int
|
||||
__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
|
||||
int try_tmpdir)
|
||||
{
|
||||
const char *d;
|
||||
size_t dlen, plen;
|
||||
|
||||
if (!pfx || !pfx[0])
|
||||
{
|
||||
pfx = "file";
|
||||
plen = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
plen = strlen (pfx);
|
||||
if (plen > 5)
|
||||
plen = 5;
|
||||
}
|
||||
|
||||
if (try_tmpdir)
|
||||
{
|
||||
d = __secure_getenv ("TMPDIR");
|
||||
if (d != NULL && direxists (d))
|
||||
dir = d;
|
||||
else if (dir != NULL && direxists (dir))
|
||||
/* nothing */ ;
|
||||
else
|
||||
dir = NULL;
|
||||
}
|
||||
if (dir == NULL)
|
||||
{
|
||||
if (direxists (P_tmpdir))
|
||||
dir = P_tmpdir;
|
||||
else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))
|
||||
dir = "/tmp";
|
||||
else
|
||||
{
|
||||
__set_errno (ENOENT);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
dlen = strlen (dir);
|
||||
while (dlen > 1 && dir[dlen - 1] == '/')
|
||||
dlen--; /* remove trailing slashes */
|
||||
|
||||
/* check we have room for "${dir}/${pfx}XXXXXX\0" */
|
||||
if (tmpl_len < dlen + 1 + plen + 6 + 1)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx);
|
||||
return 0;
|
||||
}
|
||||
#endif /* _LIBC */
|
||||
|
||||
static inline bool
|
||||
check_x_suffix (char const *s, size_t len)
|
||||
{
|
||||
return strspn (s, "X") == len;
|
||||
}
|
||||
|
||||
/* These are the characters used in temporary file names. */
|
||||
static const char letters[] =
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||
|
||||
/* Generate a temporary file name based on TMPL. TMPL must end in a
|
||||
a sequence of at least X_SUFFIX_LEN "X"s. The name constructed
|
||||
does not exist at the time of the call to __gen_tempname. TMPL is
|
||||
overwritten with the result.
|
||||
|
||||
KIND may be one of:
|
||||
__GT_NOCREATE: simply verify that the name does not exist
|
||||
at the time of the call.
|
||||
__GT_FILE: create the file using open(O_CREAT|O_EXCL)
|
||||
and return a read-write fd. The file is mode 0600.
|
||||
__GT_DIR: create a directory, which will be mode 0700.
|
||||
|
||||
We use a clever algorithm to get hard-to-predict names. */
|
||||
int
|
||||
gen_tempname_len (char *tmpl, int flags, int kind, size_t x_suffix_len)
|
||||
{
|
||||
size_t len;
|
||||
char *XXXXXX;
|
||||
unsigned int count;
|
||||
int fd = -1;
|
||||
int save_errno = errno;
|
||||
struct_stat64 st;
|
||||
struct randint_source *rand_src;
|
||||
|
||||
/* A lower bound on the number of temporary files to attempt to
|
||||
generate. The maximum total number of temporary file names that
|
||||
can exist for a given template is 62**6. It should never be
|
||||
necessary to try all these combinations. Instead if a reasonable
|
||||
number of names is tried (we define reasonable as 62**3) fail to
|
||||
give the system administrator the chance to remove the problems. */
|
||||
#define ATTEMPTS_MIN (62 * 62 * 62)
|
||||
|
||||
/* The number of times to attempt to generate a temporary file. To
|
||||
conform to POSIX, this must be no smaller than TMP_MAX. */
|
||||
#if ATTEMPTS_MIN < TMP_MAX
|
||||
unsigned int attempts = TMP_MAX;
|
||||
#else
|
||||
unsigned int attempts = ATTEMPTS_MIN;
|
||||
#endif
|
||||
|
||||
len = strlen (tmpl);
|
||||
if (len < x_suffix_len || ! check_x_suffix (&tmpl[len - x_suffix_len],
|
||||
x_suffix_len))
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
rand_src = randint_all_new (NULL, 8);
|
||||
if (! rand_src)
|
||||
return -1;
|
||||
|
||||
/* This is where the Xs start. */
|
||||
XXXXXX = &tmpl[len - x_suffix_len];
|
||||
|
||||
for (count = 0; count < attempts; ++count)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < x_suffix_len; i++)
|
||||
{
|
||||
XXXXXX[i] = letters[randint_genmax (rand_src, sizeof letters - 2)];
|
||||
}
|
||||
|
||||
switch (kind)
|
||||
{
|
||||
case __GT_FILE:
|
||||
fd = __open (tmpl,
|
||||
(flags & ~0777) | O_RDWR | O_CREAT | O_EXCL,
|
||||
S_IRUSR | S_IWUSR);
|
||||
break;
|
||||
|
||||
case __GT_DIR:
|
||||
fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
|
||||
break;
|
||||
|
||||
case __GT_NOCREATE:
|
||||
/* This case is backward from the other three. This function
|
||||
succeeds if __xstat fails because the name does not exist.
|
||||
Note the continue to bypass the common logic at the bottom
|
||||
of the loop. */
|
||||
if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
|
||||
{
|
||||
if (errno == ENOENT)
|
||||
{
|
||||
__set_errno (save_errno);
|
||||
fd = 0;
|
||||
goto done;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Give up now. */
|
||||
fd = -1;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
|
||||
default:
|
||||
assert (! "invalid KIND in __gen_tempname");
|
||||
}
|
||||
|
||||
if (fd >= 0)
|
||||
{
|
||||
__set_errno (save_errno);
|
||||
goto done;
|
||||
}
|
||||
else if (errno != EEXIST)
|
||||
{
|
||||
fd = -1;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
randint_all_free (rand_src);
|
||||
|
||||
/* We got out of the loop because we ran out of combinations to try. */
|
||||
__set_errno (EEXIST);
|
||||
return -1;
|
||||
|
||||
done:
|
||||
{
|
||||
int saved_errno = errno;
|
||||
randint_all_free (rand_src);
|
||||
__set_errno (saved_errno);
|
||||
}
|
||||
return fd;
|
||||
}
|
||||
|
||||
int
|
||||
__gen_tempname (char *tmpl, int flags, int kind)
|
||||
{
|
||||
return gen_tempname_len (tmpl, flags, kind, 6);
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
/* Create a temporary file or directory.
|
||||
|
||||
Copyright (C) 2006, 2007, 2009 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 3 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* header written by Eric Blake */
|
||||
|
||||
/* In gnulib, always prefer large files. GT_FILE maps to
|
||||
__GT_BIGFILE, not __GT_FILE, for a reason. */
|
||||
#define GT_FILE 1
|
||||
#define GT_DIR 2
|
||||
#define GT_NOCREATE 3
|
||||
|
||||
/* Generate a temporary file name based on TMPL. TMPL must match the
|
||||
rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed
|
||||
does not exist at the time of the call to gen_tempname. TMPL is
|
||||
overwritten with the result.
|
||||
|
||||
KIND may be one of:
|
||||
GT_NOCREATE: simply verify that the name does not exist
|
||||
at the time of the call.
|
||||
GT_FILE: create a large file using open(O_CREAT|O_EXCL)
|
||||
and return a read-write fd. The file is mode 0600.
|
||||
GT_DIR: create a directory, which will be mode 0700.
|
||||
|
||||
We use a clever algorithm to get hard-to-predict names. */
|
||||
#include <stddef.h>
|
||||
extern int gen_tempname (char *tmpl, int flags, int kind);
|
||||
extern int gen_tempname_len (char *tmpl, int flags, int kind,
|
||||
size_t x_suffix_len);
|
||||
@@ -1,41 +0,0 @@
|
||||
/* a wrapper for frepoen
|
||||
Copyright (C) 2008-2009 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 3 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, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <config.h>
|
||||
#include "xfreopen.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include "error.h"
|
||||
#include "exitfail.h"
|
||||
#include "quote.h"
|
||||
|
||||
#include "gettext.h"
|
||||
#define _(msgid) gettext (msgid)
|
||||
|
||||
void
|
||||
xfreopen (char const *filename, char const *mode, FILE *fp)
|
||||
{
|
||||
if (!freopen (filename, mode, fp))
|
||||
{
|
||||
char const *f = (filename ? filename
|
||||
: (fp == stdin ? _("stdin")
|
||||
: (fp == stdout ? _("stdout")
|
||||
: (fp == stderr ? _("stderr")
|
||||
: _("unknown stream")))));
|
||||
error (exit_failure, errno, _("failed to reopen %s with mode %s"),
|
||||
quote_n (0, f), quote_n (1, mode));
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
#include <stdio.h>
|
||||
void xfreopen (char const *filename, char const *mode, FILE *fp);
|
||||
@@ -1,5 +1,5 @@
|
||||
#serial 3
|
||||
dnl Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
|
||||
dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
18
gl/m4/selinux-context-h.m4
Normal file
18
gl/m4/selinux-context-h.m4
Normal file
@@ -0,0 +1,18 @@
|
||||
# serial 1 -*- Autoconf -*-
|
||||
# Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# From Jim Meyering
|
||||
# Provide <selinux/context.h>, if necessary.
|
||||
|
||||
AC_DEFUN([gl_HEADERS_SELINUX_CONTEXT_H],
|
||||
[
|
||||
AC_LIBSOURCES([se-context_.h])
|
||||
# Check for <selinux/context.h>,
|
||||
AC_CHECK_HEADERS([selinux/context.h],
|
||||
[SELINUX_CONTEXT_H=],
|
||||
[SELINUX_CONTEXT_H=selinux/context.h])
|
||||
AC_SUBST([SELINUX_CONTEXT_H])
|
||||
])
|
||||
18
gl/m4/selinux-selinux-h.m4
Normal file
18
gl/m4/selinux-selinux-h.m4
Normal file
@@ -0,0 +1,18 @@
|
||||
# serial 1 -*- Autoconf -*-
|
||||
# Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# From Jim Meyering
|
||||
# Provide <selinux/selinux.h>, if necessary.
|
||||
|
||||
AC_DEFUN([gl_HEADERS_SELINUX_SELINUX_H],
|
||||
[
|
||||
AC_LIBSOURCES([se-selinux_.h])
|
||||
# Check for <selinux/selinux.h>,
|
||||
AC_CHECK_HEADERS([selinux/selinux.h],
|
||||
[SELINUX_SELINUX_H=],
|
||||
[SELINUX_SELINUX_H=selinux/selinux.h])
|
||||
AC_SUBST([SELINUX_SELINUX_H])
|
||||
])
|
||||
@@ -1,13 +1,16 @@
|
||||
diff --git a/modules/getloadavg b/modules/getloadavg
|
||||
index 2fbeb40..b79aaca 100644
|
||||
--- a/modules/getloadavg
|
||||
+++ b/modules/getloadavg
|
||||
@@ -16,7 +16,7 @@ stdbool
|
||||
Index: modules/getloadavg
|
||||
===================================================================
|
||||
RCS file: /sources/gnulib/gnulib/modules/getloadavg,v
|
||||
retrieving revision 1.13
|
||||
diff -u -p -r1.13 getloadavg
|
||||
--- modules/getloadavg 22 Sep 2006 12:47:55 -0000 1.13
|
||||
+++ modules/getloadavg 23 Sep 2006 16:41:36 -0000
|
||||
@@ -14,7 +14,7 @@ stdbool
|
||||
fcntl-safer
|
||||
|
||||
configure.ac:
|
||||
-gl_GETLOADAVG([$gl_source_base])
|
||||
+gl_GETLOADAVG([lib])
|
||||
gl_STDLIB_MODULE_INDICATOR([getloadavg])
|
||||
|
||||
Makefile.am:
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
Description:
|
||||
Align/Truncate a string in a given screen width.
|
||||
|
||||
Files:
|
||||
lib/mbsalign.c
|
||||
lib/mbsalign.h
|
||||
|
||||
Depends-on:
|
||||
wchar
|
||||
wctype
|
||||
wcwidth
|
||||
mempcpy
|
||||
|
||||
configure.ac:
|
||||
|
||||
Makefile.am:
|
||||
lib_SOURCES += mbsalign.c mbsalign.h
|
||||
|
||||
Include:
|
||||
"mbsalign.h"
|
||||
|
||||
License:
|
||||
LGPL
|
||||
|
||||
Maintainer:
|
||||
Pádraig Brady
|
||||
@@ -1,24 +0,0 @@
|
||||
Description:
|
||||
Return the group IDs of a user in malloc'd storage.
|
||||
|
||||
Files:
|
||||
lib/mgetgroups.c
|
||||
lib/mgetgroups.h
|
||||
m4/mgetgroups.m4
|
||||
|
||||
Depends-on:
|
||||
getugroups
|
||||
xalloc
|
||||
|
||||
configure.ac:
|
||||
gl_MGETGROUPS
|
||||
|
||||
Makefile.am:
|
||||
|
||||
Include:
|
||||
|
||||
License:
|
||||
LGPL
|
||||
|
||||
Maintainer:
|
||||
Jim Meyering
|
||||
@@ -1,24 +0,0 @@
|
||||
Description:
|
||||
Generate random integers.
|
||||
|
||||
Files:
|
||||
lib/randint.c
|
||||
lib/randint.h
|
||||
|
||||
Depends-on:
|
||||
inline
|
||||
randread
|
||||
|
||||
configure.ac:
|
||||
|
||||
Makefile.am:
|
||||
lib_SOURCES += randint.c randint.h
|
||||
|
||||
Include:
|
||||
"randint.h"
|
||||
|
||||
License
|
||||
GPL
|
||||
|
||||
Maintainer:
|
||||
Paul Eggert
|
||||
@@ -1,24 +0,0 @@
|
||||
Description:
|
||||
Generate random permutations.
|
||||
|
||||
Files:
|
||||
lib/randperm.c
|
||||
lib/randperm.h
|
||||
|
||||
Depends-on:
|
||||
randint
|
||||
xalloc
|
||||
|
||||
configure.ac:
|
||||
|
||||
Makefile.am:
|
||||
lib_SOURCES += randperm.c randperm.h
|
||||
|
||||
Include:
|
||||
"randperm.h"
|
||||
|
||||
License
|
||||
GPL
|
||||
|
||||
Maintainer:
|
||||
Paul Eggert
|
||||
@@ -1,33 +0,0 @@
|
||||
Description:
|
||||
Generate buffers of random data.
|
||||
|
||||
Files:
|
||||
lib/rand-isaac.c
|
||||
lib/rand-isaac.h
|
||||
lib/randread.c
|
||||
lib/randread.h
|
||||
|
||||
Depends-on:
|
||||
error
|
||||
exitfail
|
||||
fopen-safer
|
||||
gethrxtime
|
||||
quotearg
|
||||
stdbool
|
||||
stdint
|
||||
unlocked-io
|
||||
xalloc
|
||||
|
||||
configure.ac:
|
||||
|
||||
Makefile.am:
|
||||
lib_SOURCES += randread.c randread.h rand-isaac.c rand-isaac.h
|
||||
|
||||
Include:
|
||||
"randread.h"
|
||||
|
||||
License
|
||||
GPL
|
||||
|
||||
Maintainer:
|
||||
Paul Eggert
|
||||
32
gl/modules/selinux-at
Normal file
32
gl/modules/selinux-at
Normal file
@@ -0,0 +1,32 @@
|
||||
Description:
|
||||
openat-style fd-relative functions for SE Linux
|
||||
|
||||
Files:
|
||||
lib/selinux-at.c
|
||||
lib/selinux-at.h
|
||||
|
||||
Depends-on:
|
||||
selinux-h
|
||||
|
||||
configure.ac:
|
||||
# FIXME: put this in an .m4 file?
|
||||
# For runcon.
|
||||
AC_CHECK_HEADERS([selinux/flask.h])
|
||||
AC_LIBOBJ([selinux-at])
|
||||
ac_save_LIBS="$LIBS"
|
||||
AC_SEARCH_LIBS(setfilecon, selinux,
|
||||
[test "$ac_cv_search_setfilecon" = "none required" ||
|
||||
LIB_SELINUX=$ac_cv_search_setfilecon])
|
||||
AC_SUBST(LIB_SELINUX)
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
Makefile.am:
|
||||
|
||||
Include:
|
||||
selinux-at.h
|
||||
|
||||
License:
|
||||
LGPL
|
||||
|
||||
Maintainer:
|
||||
Jim Meyering
|
||||
54
gl/modules/selinux-h
Normal file
54
gl/modules/selinux-h
Normal file
@@ -0,0 +1,54 @@
|
||||
Description:
|
||||
SELinux-related headers for systems that lack them.
|
||||
|
||||
Files:
|
||||
lib/se-context_.h
|
||||
lib/se-selinux_.h
|
||||
m4/selinux-context-h.m4
|
||||
m4/selinux-selinux-h.m4
|
||||
|
||||
Depends-on:
|
||||
|
||||
configure.ac:
|
||||
gl_HEADERS_SELINUX_SELINUX_H
|
||||
gl_HEADERS_SELINUX_CONTEXT_H
|
||||
|
||||
Makefile.am:
|
||||
BUILT_SOURCES += $(SELINUX_SELINUX_H)
|
||||
selinux/selinux.h: se-selinux_.h
|
||||
mkdir -p selinux
|
||||
cp $(srcdir)/se-selinux_.h $@-t
|
||||
chmod a-x $@-t
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += selinux/selinux.h selinux/selinux.h-t
|
||||
|
||||
BUILT_SOURCES += $(SELINUX_CONTEXT_H)
|
||||
selinux/context.h: se-context_.h
|
||||
mkdir -p selinux
|
||||
cp $(srcdir)/se-context_.h $@-t
|
||||
chmod a-x $@-t
|
||||
mv $@-t $@
|
||||
MOSTLYCLEANFILES += selinux/context.h selinux/context.h-t
|
||||
MOSTLYCLEANDIRS += selinux
|
||||
|
||||
Include:
|
||||
#include <selinux/selinux.h>
|
||||
#include <selinux/context.h>
|
||||
|
||||
License:
|
||||
LGPL
|
||||
|
||||
Maintainer:
|
||||
Jim Meyering
|
||||
|
||||
# lib/selinux-at.c
|
||||
#
|
||||
# # For runcon.
|
||||
# AC_CHECK_HEADERS([selinux/flask.h])
|
||||
#
|
||||
# ac_save_LIBS="$LIBS"
|
||||
# AC_SEARCH_LIBS(setfilecon, selinux,
|
||||
# [test "$ac_cv_search_setfilecon" = "none required" ||
|
||||
# LIB_SELINUX=$ac_cv_search_setfilecon])
|
||||
# AC_SUBST(LIB_SELINUX)
|
||||
# LIBS="$ac_save_LIBS"
|
||||
@@ -1,30 +0,0 @@
|
||||
Description:
|
||||
gen_tempname, gen_tempname_len: create a private temporary file or directory.
|
||||
|
||||
Files:
|
||||
lib/tempname.c
|
||||
lib/tempname.h
|
||||
m4/tempname.m4
|
||||
|
||||
Depends-on:
|
||||
extensions
|
||||
gettimeofday
|
||||
randint
|
||||
stdbool
|
||||
stdint
|
||||
sys_stat
|
||||
sys_time
|
||||
|
||||
configure.ac:
|
||||
gl_FUNC_GEN_TEMPNAME
|
||||
|
||||
Makefile.am:
|
||||
|
||||
Include:
|
||||
"tempname.h"
|
||||
|
||||
License:
|
||||
LGPL
|
||||
|
||||
Maintainer:
|
||||
Eric Blake and Jim Meyering
|
||||
@@ -1,25 +0,0 @@
|
||||
Description:
|
||||
a wrapper for frepoen
|
||||
|
||||
Files:
|
||||
lib/xfreopen.c
|
||||
lib/xfreopen.h
|
||||
|
||||
Depends-on:
|
||||
error
|
||||
exitfail
|
||||
quote
|
||||
|
||||
configure.ac:
|
||||
|
||||
Makefile.am:
|
||||
lib_SOURCES += xfreopen.c xfreopen.h
|
||||
|
||||
Include:
|
||||
"xfreopen.h"
|
||||
|
||||
License:
|
||||
LGPL
|
||||
|
||||
Maintainer:
|
||||
Jim Meyering
|
||||
1
gnulib
1
gnulib
Submodule gnulib deleted from 959d9cb463
@@ -1 +0,0 @@
|
||||
include gnulib.mk
|
||||
416
lib/.cvsignore
Normal file
416
lib/.cvsignore
Normal file
@@ -0,0 +1,416 @@
|
||||
.deps
|
||||
Makefile
|
||||
Makefile.in
|
||||
__fpending.c
|
||||
__fpending.h
|
||||
acl.c
|
||||
acl.h
|
||||
alloca.c
|
||||
alloca.h
|
||||
alloca_.h
|
||||
allocsa.c
|
||||
allocsa.h
|
||||
allocsa.valgrind
|
||||
argmatch.c
|
||||
argmatch.h
|
||||
asnprintf.c
|
||||
asprintf.c
|
||||
at-func.c
|
||||
atexit.c
|
||||
backupfile.c
|
||||
backupfile.h
|
||||
base64.c
|
||||
base64.h
|
||||
basename.c
|
||||
c-ctype.c
|
||||
c-ctype.h
|
||||
c-strcase.h
|
||||
c-strcasecmp.c
|
||||
c-strncasecmp.c
|
||||
c-strtod.c
|
||||
c-strtod.h
|
||||
c-strtold.c
|
||||
calloc.c
|
||||
canon-host.c
|
||||
canon-host.h
|
||||
canonicalize.c
|
||||
canonicalize.h
|
||||
charset.alias
|
||||
chdir-long.c
|
||||
chdir-long.h
|
||||
chown.c
|
||||
cloexec.c
|
||||
cloexec.h
|
||||
close-stream.c
|
||||
close-stream.h
|
||||
closeout.c
|
||||
closeout.h
|
||||
concatpath.c
|
||||
config.charset
|
||||
config.h
|
||||
config.hin
|
||||
configmake.h
|
||||
creat-safer.c
|
||||
cycle-check.c
|
||||
cycle-check.h
|
||||
dev-ino.h
|
||||
diacrit.c
|
||||
diacrit.h
|
||||
dirchownmod.c
|
||||
dirchownmod.h
|
||||
dirent.h
|
||||
dirent_.h
|
||||
dirfd.c
|
||||
dirfd.h
|
||||
dirname.c
|
||||
dirname.h
|
||||
dup-safer.c
|
||||
dup2.c
|
||||
error.c
|
||||
error.h
|
||||
euidaccess.c
|
||||
euidaccess.h
|
||||
exclude.c
|
||||
exclude.h
|
||||
exit.h
|
||||
exitfail.c
|
||||
exitfail.h
|
||||
fchdir.c
|
||||
fchmodat.c
|
||||
fchown-stub.c
|
||||
fchownat.c
|
||||
fcntl--.h
|
||||
fcntl-safer.h
|
||||
fcntl.h
|
||||
fcntl_.h
|
||||
fd-safer.c
|
||||
file-type.c
|
||||
file-type.h
|
||||
fileblocks.c
|
||||
filemode.c
|
||||
filemode.h
|
||||
filenamecat.c
|
||||
filenamecat.h
|
||||
findprog.c
|
||||
findprog.h
|
||||
fnmatch.c
|
||||
fnmatch.h
|
||||
fnmatch_.h
|
||||
fnmatch_loop.c
|
||||
fopen-safer.c
|
||||
fprintftime.c
|
||||
fprintftime.h
|
||||
free.c
|
||||
fstatat.c
|
||||
fsusage.c
|
||||
fsusage.h
|
||||
ftruncate.c
|
||||
fts-cycle.c
|
||||
fts.c
|
||||
fts.h
|
||||
fts_.h
|
||||
full-read.c
|
||||
full-read.h
|
||||
full-write.c
|
||||
full-write.h
|
||||
gai_strerror.c
|
||||
getaddrinfo.c
|
||||
getaddrinfo.h
|
||||
getcwd.c
|
||||
getcwd.h
|
||||
getdate.c
|
||||
getdate.h
|
||||
getdate.tab.c
|
||||
getdate.tab.h
|
||||
getdate.y
|
||||
getdelim.c
|
||||
getdelim.h
|
||||
getgroups.c
|
||||
gethostname.c
|
||||
gethrxtime.c
|
||||
gethrxtime.h
|
||||
getline.c
|
||||
getline.h
|
||||
getloadavg.c
|
||||
getndelim2.c
|
||||
getndelim2.h
|
||||
getopt.c
|
||||
getopt.h
|
||||
getopt1.c
|
||||
getopt_.h
|
||||
getopt_int.h
|
||||
getpagesize.h
|
||||
getpass.c
|
||||
getpass.h
|
||||
gettext.h
|
||||
gettime.c
|
||||
gettimeofday.c
|
||||
getugroups.c
|
||||
getusershell.c
|
||||
gnulib.mk
|
||||
group-member.c
|
||||
group-member.h
|
||||
hard-locale.c
|
||||
hard-locale.h
|
||||
hash-pjw.c
|
||||
hash-pjw.h
|
||||
hash.c
|
||||
hash.h
|
||||
human.c
|
||||
human.h
|
||||
i-ring.c
|
||||
i-ring.h
|
||||
idcache.c
|
||||
imaxtostr.c
|
||||
inet_ntop.c
|
||||
inet_ntop.h
|
||||
intprops.h
|
||||
inttostr.c
|
||||
inttostr.h
|
||||
inttypes.h
|
||||
inttypes_.h
|
||||
isapipe.c
|
||||
isapipe.h
|
||||
lchmod.h
|
||||
lchown.c
|
||||
lchown.h
|
||||
linebuffer.c
|
||||
linebuffer.h
|
||||
localcharset.c
|
||||
localcharset.h
|
||||
long-options.c
|
||||
long-options.h
|
||||
lstat.c
|
||||
lstat.h
|
||||
malloc.c
|
||||
mbchar.c
|
||||
mbchar.h
|
||||
mbscasecmp.c
|
||||
mbswidth.c
|
||||
mbswidth.h
|
||||
mbuiter.h
|
||||
md5.c
|
||||
md5.h
|
||||
memcasecmp.c
|
||||
memcasecmp.h
|
||||
memchr.c
|
||||
memcmp.c
|
||||
memcoll.c
|
||||
memcoll.h
|
||||
memcpy.c
|
||||
memmove.c
|
||||
mempcpy.c
|
||||
memrchr.c
|
||||
memset.c
|
||||
mkancesdirs.c
|
||||
mkancesdirs.h
|
||||
mkdir-p.c
|
||||
mkdir-p.h
|
||||
mkdir.c
|
||||
mkdirat.c
|
||||
mkstemp-safer.c
|
||||
mkstemp.c
|
||||
mkstemp.h
|
||||
mktime.c
|
||||
modechange.c
|
||||
modechange.h
|
||||
mountlist.c
|
||||
mountlist.h
|
||||
mpsort.c
|
||||
mpsort.h
|
||||
nanosleep.c
|
||||
netinet_in.h
|
||||
netinet_in_.h
|
||||
obstack.c
|
||||
obstack.h
|
||||
offtostr.c
|
||||
open-safer.c
|
||||
openat-die.c
|
||||
openat-priv.h
|
||||
openat-proc.c
|
||||
openat.c
|
||||
openat.h
|
||||
pathmax.h
|
||||
pathname.h
|
||||
physmem.c
|
||||
physmem.h
|
||||
pipe-safer.c
|
||||
poll.h
|
||||
posixtm.c
|
||||
posixtm.h
|
||||
posixver.c
|
||||
posixver.h
|
||||
printf-args.c
|
||||
printf-args.h
|
||||
printf-parse.h
|
||||
putenv.c
|
||||
quote.c
|
||||
quote.h
|
||||
quotearg.c
|
||||
quotearg.h
|
||||
raise.c
|
||||
readlink.c
|
||||
readtokens.c
|
||||
readtokens.h
|
||||
readtokens0.c
|
||||
readtokens0.h
|
||||
readutmp.c
|
||||
readutmp.h
|
||||
realloc.c
|
||||
ref-add.sed
|
||||
ref-add.sin
|
||||
ref-del.sed
|
||||
ref-del.sin
|
||||
regcomp.c
|
||||
regex.c
|
||||
regex.h
|
||||
regex_internal.c
|
||||
regex_internal.h
|
||||
regexec.c
|
||||
rename-dest-slash.c
|
||||
rename.c
|
||||
rmdir.c
|
||||
root-dev-ino.c
|
||||
root-dev-ino.h
|
||||
rpmatch.c
|
||||
safe-read.c
|
||||
safe-read.h
|
||||
safe-write.c
|
||||
safe-write.h
|
||||
same-inode.h
|
||||
same.c
|
||||
same.h
|
||||
save-cwd.c
|
||||
save-cwd.h
|
||||
savedir.c
|
||||
savedir.h
|
||||
savewd.c
|
||||
savewd.h
|
||||
se-context.h
|
||||
se-context_.h
|
||||
se-selinux.h
|
||||
se-selinux_.h
|
||||
search.h
|
||||
selinux
|
||||
selinux-at.c
|
||||
selinux-at.h
|
||||
setenv.c
|
||||
setenv.h
|
||||
settime.c
|
||||
sha1.c
|
||||
sha1.h
|
||||
sig2str.c
|
||||
sig2str.h
|
||||
snprintf.c
|
||||
snprintf.h
|
||||
socket.h
|
||||
socket_.h
|
||||
stamp-h1
|
||||
stat-macros.h
|
||||
stat-time.h
|
||||
stat.h
|
||||
stat_.h
|
||||
stdbool.h
|
||||
stdbool_.h
|
||||
stdint.h
|
||||
stdint_.h
|
||||
stdio--.h
|
||||
stdio-safer.h
|
||||
stdio.h
|
||||
stdio_.h
|
||||
stdlib--.h
|
||||
stdlib-safer.h
|
||||
stdlib.h
|
||||
stdlib_.h
|
||||
stpcpy.c
|
||||
strcasecmp.c
|
||||
strcspn.c
|
||||
strdup.c
|
||||
strftime.c
|
||||
strftime.h
|
||||
string.h
|
||||
string_.h
|
||||
stripslash.c
|
||||
strncasecmp.c
|
||||
strndup.c
|
||||
strnlen.c
|
||||
strnlen1.c
|
||||
strnlen1.h
|
||||
strpbrk.c
|
||||
strtod.c
|
||||
strtoimax.c
|
||||
strtol.c
|
||||
strtoll.c
|
||||
strtoul.c
|
||||
strtoull.c
|
||||
strtoumax.c
|
||||
strverscmp.c
|
||||
strverscmp.h
|
||||
sys
|
||||
sys_time.h
|
||||
sys_time_.h
|
||||
t-fpending
|
||||
tempname.c
|
||||
tempname.h
|
||||
time.h
|
||||
time_.h
|
||||
time_r.c
|
||||
time_r.h
|
||||
timespec.h
|
||||
uinttostr.c
|
||||
umaxtostr.c
|
||||
unicodeio.h
|
||||
unistd--.h
|
||||
unistd-safer.h
|
||||
unistd.h
|
||||
unistd_.h
|
||||
unlinkdir.c
|
||||
unlinkdir.h
|
||||
unlocked-io.h
|
||||
unsetenv.c
|
||||
userspec.c
|
||||
userspec.h
|
||||
utime.c
|
||||
utimecmp.c
|
||||
utimecmp.h
|
||||
utimens.c
|
||||
utimens.h
|
||||
vasnprintf.h
|
||||
vasprintf.c
|
||||
vasprintf.h
|
||||
verify.h
|
||||
version-etc-fsf.c
|
||||
version-etc.c
|
||||
version-etc.h
|
||||
wchar.h
|
||||
wchar_.h
|
||||
wctype.h
|
||||
wctype_.h
|
||||
wcwidth.h
|
||||
xalloc-die.c
|
||||
xalloc.h
|
||||
xgetcwd.c
|
||||
xgetcwd.h
|
||||
xgethostname.c
|
||||
xgethostname.h
|
||||
xmalloc.c
|
||||
xmemcoll.c
|
||||
xmemcoll.h
|
||||
xnanosleep.c
|
||||
xnanosleep.h
|
||||
xreadlink-with-size.c
|
||||
xreadlink.c
|
||||
xreadlink.h
|
||||
xstrndup.c
|
||||
xstrndup.h
|
||||
xstrtod.c
|
||||
xstrtod.h
|
||||
xstrtoimax.c
|
||||
xstrtol.c
|
||||
xstrtol.h
|
||||
xstrtold.c
|
||||
xstrtoul.c
|
||||
xstrtoumax.c
|
||||
xtime.h
|
||||
yesno.c
|
||||
yesno.h
|
||||
340
lib/.gdb-history
Normal file
340
lib/.gdb-history
Normal file
@@ -0,0 +1,340 @@
|
||||
# GDB history for debugging coreutils.
|
||||
#
|
||||
# Copyright (C) 1999, 2000, 2001, 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; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
#
|
||||
r 206.65.212.10
|
||||
b main
|
||||
r
|
||||
n
|
||||
s
|
||||
n
|
||||
p addr
|
||||
p addr
|
||||
p he->h_name
|
||||
n
|
||||
q
|
||||
b canon_host
|
||||
r 206.65.212.10
|
||||
n
|
||||
p he
|
||||
p *he
|
||||
n
|
||||
n
|
||||
p (he->h_addrtype)
|
||||
n
|
||||
q
|
||||
r a:b
|
||||
b main
|
||||
r a:b
|
||||
n
|
||||
s
|
||||
n
|
||||
p separator
|
||||
n
|
||||
l 128
|
||||
c
|
||||
q
|
||||
r meyering:store
|
||||
p *username
|
||||
p *username[separator - name]
|
||||
p separator - name
|
||||
p username[separator - name]
|
||||
r ''
|
||||
l
|
||||
q
|
||||
r ''
|
||||
l
|
||||
q
|
||||
r meyering
|
||||
b main
|
||||
r meyering
|
||||
n
|
||||
r
|
||||
n
|
||||
s
|
||||
n
|
||||
p u
|
||||
n
|
||||
n
|
||||
q
|
||||
r ''
|
||||
r meyering
|
||||
up
|
||||
l
|
||||
q
|
||||
b main
|
||||
b a.out 1
|
||||
r a.out 1
|
||||
n
|
||||
s
|
||||
fin
|
||||
s
|
||||
n
|
||||
p uid
|
||||
p gid
|
||||
p euid
|
||||
p egid
|
||||
n
|
||||
p mode
|
||||
p path
|
||||
fin
|
||||
r -v -c 10 -n 20 -x 80 < in-2
|
||||
up
|
||||
up
|
||||
p &dummy
|
||||
p *ovp
|
||||
p *(int*)*ovp
|
||||
p ((struct item*)*ovp)->key
|
||||
p old_vec@10
|
||||
r -v -c 10 -n 20 -x 80 < in-3
|
||||
p *(int*)*ovp
|
||||
up
|
||||
dow
|
||||
p *(int*)*ovp
|
||||
up
|
||||
p *(int*)*ovp
|
||||
i loca
|
||||
dow
|
||||
p key
|
||||
p dummy
|
||||
p &dummy
|
||||
up
|
||||
p old_vec
|
||||
p *ovp
|
||||
p ovp
|
||||
p ovp - old_vec
|
||||
p *old_vec@10
|
||||
p *old_vec@13
|
||||
b hash_insert_item
|
||||
r
|
||||
b hash_insert_item_at
|
||||
r
|
||||
n
|
||||
p fail
|
||||
p *(ht->vec)@13
|
||||
p *(ht->ht_vec)@13
|
||||
p ((struct item*)(ht->ht_vec)[10])->key
|
||||
b hash_delete_item
|
||||
b hash_delete_item_at
|
||||
c
|
||||
n
|
||||
p slot
|
||||
p item
|
||||
n
|
||||
n
|
||||
p *(ht->ht_vec)@13
|
||||
p &dummy
|
||||
p dummy
|
||||
n
|
||||
s
|
||||
n
|
||||
n
|
||||
p *(ht->ht_vec)@13
|
||||
n
|
||||
p new_size
|
||||
n
|
||||
p *old_vec@13
|
||||
p old_vec@13
|
||||
n
|
||||
p *old_vec@13
|
||||
n
|
||||
p *old_vec@13
|
||||
n
|
||||
l
|
||||
n
|
||||
p ovp - old_vec
|
||||
n
|
||||
p ovp - old_vec
|
||||
n
|
||||
p ovp - old_vec
|
||||
p *old_vec@13
|
||||
p &dummy
|
||||
q
|
||||
r 444444444444 44444444444
|
||||
b human_readable
|
||||
r
|
||||
n
|
||||
q
|
||||
b main
|
||||
r 444444444444 44444444444
|
||||
n
|
||||
p a
|
||||
p b
|
||||
r 34343434 3434343434
|
||||
c
|
||||
r
|
||||
n
|
||||
n
|
||||
p a
|
||||
p b
|
||||
r 343434343 343434343
|
||||
c
|
||||
q
|
||||
b posixtime
|
||||
r
|
||||
n
|
||||
s
|
||||
n
|
||||
p len
|
||||
n
|
||||
p pair
|
||||
p len
|
||||
n
|
||||
b year
|
||||
y
|
||||
c
|
||||
c
|
||||
p n
|
||||
up
|
||||
p len
|
||||
q
|
||||
complete b user
|
||||
complete b user
|
||||
complete b pars
|
||||
b parse_user_spec
|
||||
r a.b
|
||||
n
|
||||
n
|
||||
p u
|
||||
n
|
||||
p u
|
||||
n
|
||||
r -r .aa > k
|
||||
pwd
|
||||
q
|
||||
b main
|
||||
r
|
||||
b get_date
|
||||
c
|
||||
n
|
||||
p tm
|
||||
n
|
||||
p tm
|
||||
n
|
||||
p pc
|
||||
n
|
||||
p tm
|
||||
n
|
||||
p tm
|
||||
n
|
||||
p delta
|
||||
n
|
||||
p Start
|
||||
q
|
||||
b dir_name
|
||||
r
|
||||
n
|
||||
p slash
|
||||
n
|
||||
n
|
||||
n
|
||||
p slash
|
||||
p slash - path + 1
|
||||
q
|
||||
q
|
||||
r
|
||||
b asprintf
|
||||
q
|
||||
b main
|
||||
r
|
||||
n
|
||||
s
|
||||
q
|
||||
r
|
||||
q
|
||||
b asprintf
|
||||
r
|
||||
n
|
||||
s
|
||||
s
|
||||
s
|
||||
b 515
|
||||
fin
|
||||
b 515
|
||||
c
|
||||
p length
|
||||
c
|
||||
p length
|
||||
c
|
||||
p length
|
||||
n
|
||||
p maxlen
|
||||
p allocated
|
||||
n
|
||||
n
|
||||
p arg
|
||||
p maxlen
|
||||
n
|
||||
p count
|
||||
p result
|
||||
b 153
|
||||
r
|
||||
c
|
||||
c
|
||||
c
|
||||
p length
|
||||
b 147
|
||||
r
|
||||
c
|
||||
p cp
|
||||
cp dp->dir_start
|
||||
p dp->dir_start
|
||||
p cp
|
||||
p length
|
||||
n
|
||||
n
|
||||
q
|
||||
r
|
||||
q
|
||||
b vasnprintf
|
||||
n 20
|
||||
r
|
||||
n 29
|
||||
n
|
||||
p allocated
|
||||
n 20
|
||||
n
|
||||
complete p alloca
|
||||
p allocated
|
||||
p length
|
||||
n
|
||||
p maxlen
|
||||
n
|
||||
p maxlen
|
||||
n
|
||||
p arg
|
||||
n
|
||||
p result
|
||||
q
|
||||
complete b vasnp
|
||||
b vasnprintf
|
||||
r
|
||||
n 30
|
||||
n
|
||||
p buf
|
||||
p result
|
||||
complete p alloc
|
||||
p allocated
|
||||
n
|
||||
n
|
||||
n
|
||||
n
|
||||
p count
|
||||
p maxlen
|
||||
n
|
||||
n
|
||||
407
lib/.gitignore
vendored
Normal file
407
lib/.gitignore
vendored
Normal file
@@ -0,0 +1,407 @@
|
||||
__fpending.c
|
||||
__fpending.h
|
||||
acl.c
|
||||
acl.h
|
||||
alloca.c
|
||||
alloca.h
|
||||
alloca_.h
|
||||
allocsa.c
|
||||
allocsa.h
|
||||
allocsa.valgrind
|
||||
argmatch.c
|
||||
argmatch.h
|
||||
asnprintf.c
|
||||
asprintf.c
|
||||
at-func.c
|
||||
atexit.c
|
||||
backupfile.c
|
||||
backupfile.h
|
||||
base64.c
|
||||
base64.h
|
||||
basename.c
|
||||
c-ctype.c
|
||||
c-ctype.h
|
||||
c-strcase.h
|
||||
c-strcasecmp.c
|
||||
c-strncasecmp.c
|
||||
c-strtod.c
|
||||
c-strtod.h
|
||||
c-strtold.c
|
||||
calloc.c
|
||||
canon-host.c
|
||||
canon-host.h
|
||||
canonicalize.c
|
||||
canonicalize.h
|
||||
charset.alias
|
||||
chdir-long.c
|
||||
chdir-long.h
|
||||
chown.c
|
||||
cloexec.c
|
||||
cloexec.h
|
||||
close-stream.c
|
||||
close-stream.h
|
||||
closeout.c
|
||||
closeout.h
|
||||
concatpath.c
|
||||
config.charset
|
||||
configmake.h
|
||||
creat-safer.c
|
||||
cycle-check.c
|
||||
cycle-check.h
|
||||
dev-ino.h
|
||||
diacrit.c
|
||||
diacrit.h
|
||||
dirchownmod.c
|
||||
dirchownmod.h
|
||||
dirent.h
|
||||
dirent_.h
|
||||
dirfd.c
|
||||
dirfd.h
|
||||
dirname.c
|
||||
dirname.h
|
||||
dup-safer.c
|
||||
dup2.c
|
||||
error.c
|
||||
error.h
|
||||
euidaccess.c
|
||||
euidaccess.h
|
||||
exclude.c
|
||||
exclude.h
|
||||
exit.h
|
||||
exitfail.c
|
||||
exitfail.h
|
||||
fchdir.c
|
||||
fchmodat.c
|
||||
fchown-stub.c
|
||||
fchownat.c
|
||||
fcntl--.h
|
||||
fcntl-safer.h
|
||||
fcntl.h
|
||||
fcntl_.h
|
||||
fd-safer.c
|
||||
file-type.c
|
||||
file-type.h
|
||||
fileblocks.c
|
||||
filemode.c
|
||||
filemode.h
|
||||
filenamecat.c
|
||||
filenamecat.h
|
||||
findprog.c
|
||||
findprog.h
|
||||
fnmatch.c
|
||||
fnmatch.h
|
||||
fnmatch_.h
|
||||
fnmatch_loop.c
|
||||
fopen-safer.c
|
||||
fprintftime.c
|
||||
fprintftime.h
|
||||
free.c
|
||||
fstatat.c
|
||||
fsusage.c
|
||||
fsusage.h
|
||||
ftruncate.c
|
||||
fts-cycle.c
|
||||
fts.c
|
||||
fts.h
|
||||
fts_.h
|
||||
full-read.c
|
||||
full-read.h
|
||||
full-write.c
|
||||
full-write.h
|
||||
gai_strerror.c
|
||||
getaddrinfo.c
|
||||
getaddrinfo.h
|
||||
getcwd.c
|
||||
getcwd.h
|
||||
getdate.c
|
||||
getdate.h
|
||||
getdate.y
|
||||
getdelim.c
|
||||
getdelim.h
|
||||
getgroups.c
|
||||
gethostname.c
|
||||
gethrxtime.c
|
||||
gethrxtime.h
|
||||
getline.c
|
||||
getline.h
|
||||
getloadavg.c
|
||||
getndelim2.c
|
||||
getndelim2.h
|
||||
getopt.c
|
||||
getopt.h
|
||||
getopt1.c
|
||||
getopt_.h
|
||||
getopt_int.h
|
||||
getpagesize.h
|
||||
getpass.c
|
||||
getpass.h
|
||||
gettext.h
|
||||
gettime.c
|
||||
gettimeofday.c
|
||||
getugroups.c
|
||||
getusershell.c
|
||||
gnulib.mk
|
||||
group-member.c
|
||||
group-member.h
|
||||
hard-locale.c
|
||||
hard-locale.h
|
||||
hash-pjw.c
|
||||
hash-pjw.h
|
||||
hash.c
|
||||
hash.h
|
||||
human.c
|
||||
human.h
|
||||
i-ring.c
|
||||
i-ring.h
|
||||
idcache.c
|
||||
imaxtostr.c
|
||||
inet_ntop.c
|
||||
inet_ntop.h
|
||||
intprops.h
|
||||
inttostr.c
|
||||
inttostr.h
|
||||
inttypes.h
|
||||
inttypes_.h
|
||||
isapipe.c
|
||||
isapipe.h
|
||||
lchmod.h
|
||||
lchown.c
|
||||
lchown.h
|
||||
libcoreutils.a
|
||||
linebuffer.c
|
||||
linebuffer.h
|
||||
localcharset.c
|
||||
localcharset.h
|
||||
long-options.c
|
||||
long-options.h
|
||||
lstat.c
|
||||
lstat.h
|
||||
malloc.c
|
||||
mbchar.c
|
||||
mbchar.h
|
||||
mbscasecmp.c
|
||||
mbswidth.c
|
||||
mbswidth.h
|
||||
mbuiter.h
|
||||
md5.c
|
||||
md5.h
|
||||
memcasecmp.c
|
||||
memcasecmp.h
|
||||
memchr.c
|
||||
memcmp.c
|
||||
memcoll.c
|
||||
memcoll.h
|
||||
memcpy.c
|
||||
memmove.c
|
||||
mempcpy.c
|
||||
memrchr.c
|
||||
memset.c
|
||||
mkancesdirs.c
|
||||
mkancesdirs.h
|
||||
mkdir-p.c
|
||||
mkdir-p.h
|
||||
mkdir.c
|
||||
mkdirat.c
|
||||
mkstemp-safer.c
|
||||
mkstemp.c
|
||||
mkstemp.h
|
||||
mktime.c
|
||||
modechange.c
|
||||
modechange.h
|
||||
mountlist.c
|
||||
mountlist.h
|
||||
mpsort.c
|
||||
mpsort.h
|
||||
nanosleep.c
|
||||
netinet_in.h
|
||||
netinet_in_.h
|
||||
obstack.c
|
||||
obstack.h
|
||||
offtostr.c
|
||||
open-safer.c
|
||||
openat-die.c
|
||||
openat-priv.h
|
||||
openat-proc.c
|
||||
openat.c
|
||||
openat.h
|
||||
pathmax.h
|
||||
pathname.h
|
||||
physmem.c
|
||||
physmem.h
|
||||
pipe-safer.c
|
||||
posixtm.c
|
||||
posixtm.h
|
||||
posixver.c
|
||||
posixver.h
|
||||
printf-args.c
|
||||
printf-args.h
|
||||
printf-parse.h
|
||||
putenv.c
|
||||
quote.c
|
||||
quote.h
|
||||
quotearg.c
|
||||
quotearg.h
|
||||
raise.c
|
||||
readlink.c
|
||||
readtokens.c
|
||||
readtokens.h
|
||||
readtokens0.c
|
||||
readtokens0.h
|
||||
readutmp.c
|
||||
readutmp.h
|
||||
realloc.c
|
||||
ref-add.sed
|
||||
ref-add.sin
|
||||
ref-del.sed
|
||||
ref-del.sin
|
||||
regcomp.c
|
||||
regex.c
|
||||
regex.h
|
||||
regex_internal.c
|
||||
regex_internal.h
|
||||
regexec.c
|
||||
rename-dest-slash.c
|
||||
rename.c
|
||||
rmdir.c
|
||||
root-dev-ino.c
|
||||
root-dev-ino.h
|
||||
rpmatch.c
|
||||
safe-read.c
|
||||
safe-read.h
|
||||
safe-write.c
|
||||
safe-write.h
|
||||
same-inode.h
|
||||
same.c
|
||||
same.h
|
||||
save-cwd.c
|
||||
save-cwd.h
|
||||
savedir.c
|
||||
savedir.h
|
||||
savewd.c
|
||||
savewd.h
|
||||
se-context.h
|
||||
se-context_.h
|
||||
se-selinux.h
|
||||
se-selinux_.h
|
||||
selinux
|
||||
selinux-at.c
|
||||
selinux-at.h
|
||||
setenv.c
|
||||
setenv.h
|
||||
settime.c
|
||||
sha1.c
|
||||
sha1.h
|
||||
sig2str.c
|
||||
sig2str.h
|
||||
snprintf.c
|
||||
snprintf.h
|
||||
socket.h
|
||||
socket_.h
|
||||
stat-macros.h
|
||||
stat-time.h
|
||||
stat.h
|
||||
stat_.h
|
||||
stdbool.h
|
||||
stdbool_.h
|
||||
stdint.h
|
||||
stdint_.h
|
||||
stdio--.h
|
||||
stdio-safer.h
|
||||
stdio.h
|
||||
stdio_.h
|
||||
stdlib--.h
|
||||
stdlib-safer.h
|
||||
stdlib.h
|
||||
stdlib_.h
|
||||
stpcpy.c
|
||||
strcasecmp.c
|
||||
strcspn.c
|
||||
strdup.c
|
||||
strftime.c
|
||||
strftime.h
|
||||
string.h
|
||||
string_.h
|
||||
stripslash.c
|
||||
strncasecmp.c
|
||||
strndup.c
|
||||
strnlen.c
|
||||
strnlen1.c
|
||||
strnlen1.h
|
||||
strpbrk.c
|
||||
strtod.c
|
||||
strtoimax.c
|
||||
strtol.c
|
||||
strtoll.c
|
||||
strtoul.c
|
||||
strtoull.c
|
||||
strtoumax.c
|
||||
strverscmp.c
|
||||
strverscmp.h
|
||||
sys
|
||||
sys_time.h
|
||||
sys_time_.h
|
||||
t-fpending
|
||||
tempname.c
|
||||
tempname.h
|
||||
time.h
|
||||
time_.h
|
||||
time_r.c
|
||||
time_r.h
|
||||
timespec.h
|
||||
uinttostr.c
|
||||
umaxtostr.c
|
||||
unicodeio.h
|
||||
unistd--.h
|
||||
unistd-safer.h
|
||||
unistd.h
|
||||
unistd_.h
|
||||
unlinkdir.c
|
||||
unlinkdir.h
|
||||
unlocked-io.h
|
||||
unsetenv.c
|
||||
userspec.c
|
||||
userspec.h
|
||||
utime.c
|
||||
utimecmp.c
|
||||
utimecmp.h
|
||||
utimens.c
|
||||
utimens.h
|
||||
vasnprintf.h
|
||||
vasprintf.c
|
||||
vasprintf.h
|
||||
verify.h
|
||||
version-etc-fsf.c
|
||||
version-etc.c
|
||||
version-etc.h
|
||||
wchar.h
|
||||
wchar_.h
|
||||
wctype.h
|
||||
wctype_.h
|
||||
wcwidth.h
|
||||
xalloc-die.c
|
||||
xalloc.h
|
||||
xgetcwd.c
|
||||
xgetcwd.h
|
||||
xgethostname.c
|
||||
xgethostname.h
|
||||
xmalloc.c
|
||||
xmemcoll.c
|
||||
xmemcoll.h
|
||||
xnanosleep.c
|
||||
xnanosleep.h
|
||||
xreadlink-with-size.c
|
||||
xreadlink.c
|
||||
xreadlink.h
|
||||
xstrndup.c
|
||||
xstrndup.h
|
||||
xstrtod.c
|
||||
xstrtod.h
|
||||
xstrtoimax.c
|
||||
xstrtol.c
|
||||
xstrtol.h
|
||||
xstrtold.c
|
||||
xstrtoul.c
|
||||
xstrtoumax.c
|
||||
xtime.h
|
||||
yesno.c
|
||||
yesno.h
|
||||
@@ -1,14 +1,3 @@
|
||||
2007-05-31 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* printf-parse.c, vasnprintf.c, unicodeio.c: Remove local
|
||||
copies, so we now get these files from gnulib.
|
||||
|
||||
2007-03-20 Jim Meyering <jim@meyering.net>
|
||||
|
||||
Fix a typo in the handling of %x and %X.
|
||||
* vasnprintf.c (VASNPRINTF): When adding 2 to buffer length,
|
||||
don't double it.
|
||||
|
||||
2007-03-04 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* vasnprintf.c (VASNPRINTF): Add missing semicolon.
|
||||
@@ -8746,7 +8735,8 @@
|
||||
|
||||
-----
|
||||
|
||||
Copyright (C) 2000-2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without
|
||||
modification, are permitted provided the copyright notice
|
||||
@@ -1,23 +1,28 @@
|
||||
## Makefile for gnulib/lib -*-Makefile-*-
|
||||
|
||||
# Copyright (C) 1995-2007, 2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1995-2006 Free Software Foundation, Inc.
|
||||
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## 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, see <http://www.gnu.org/licenses/>.
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
## 02110-1301, USA.
|
||||
|
||||
include gnulib.mk
|
||||
|
||||
AM_CFLAGS += $(WARN_CFLAGS) # $(WERROR_CFLAGS)
|
||||
AM_CFLAGS = $(WARNING_CFLAGS) $(WERROR_CFLAGS)
|
||||
|
||||
noinst_PROGRAMS = t-fpending
|
||||
LDADD = $(noinst_LIBRARIES)
|
||||
|
||||
libcoreutils_a_SOURCES += \
|
||||
buffer-lcm.c buffer-lcm.h \
|
||||
@@ -25,3 +30,9 @@ libcoreutils_a_SOURCES += \
|
||||
|
||||
libcoreutils_a_LIBADD += $(LIBOBJS)
|
||||
libcoreutils_a_DEPENDENCIES += $(LIBOBJS)
|
||||
|
||||
check: unit-test
|
||||
|
||||
.PHONY: unit-test
|
||||
unit-test: t-fpending
|
||||
./t-fpending > /dev/null
|
||||
|
||||
40
lib/TODO
Normal file
40
lib/TODO
Normal file
@@ -0,0 +1,40 @@
|
||||
Things to do to hash.c:
|
||||
|
||||
Always use curly braces around statements in if/else/while/do/etc.
|
||||
that span more than a line -- even around multiline simple statements
|
||||
or single-line simple statements preceded by a comment line.
|
||||
|
||||
Never have lines longer than 80 chars.
|
||||
|
||||
Remove ^L characters. We don't want/need such crutches.
|
||||
Get a good (smart) pagination filter. I have one (a perl script)
|
||||
that usually does a decent job for me -- I called it something
|
||||
like stdc-print and think I sent you an early verison.
|
||||
|
||||
I don't like the name `cursor'. I much prefer short names
|
||||
like `p' for index variables. I doubt I'll change all of them,
|
||||
but thought you should know why some will probably end up changing.
|
||||
|
||||
#define USE_OBSTACK somewhere
|
||||
|
||||
Fix this comment. Depending on system and application...
|
||||
Mention fragmentation.
|
||||
+#if USE_OBSTACK
|
||||
+ /* Whenever obstacks are used, it is possible to allocate all overflowed
|
||||
+ entries into a single stack, so they all can be freed in a single
|
||||
+ operation. It is not clear if the speedup is worth the trouble. */
|
||||
+ struct obstack entry_stack;
|
||||
+#endif
|
||||
|
||||
|
||||
assert (bucket_limit - bucket == n_buckets) ?
|
||||
|
||||
remove.c: s/done/successful or ok
|
||||
|
||||
|
||||
-----
|
||||
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without
|
||||
modification, are permitted provided the copyright notice
|
||||
and this notice are preserved.
|
||||
@@ -1,11 +1,11 @@
|
||||
/* buffer-lcm.c - compute a good buffer size for dealing with two files
|
||||
|
||||
Copyright (C) 2002, 2005, 2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
@@ -13,7 +13,8 @@
|
||||
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, see <http://www.gnu.org/licenses/>. */
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* Written by Paul Eggert. */
|
||||
|
||||
@@ -34,22 +35,22 @@ buffer_lcm (size_t a, size_t b, size_t lcm_max)
|
||||
else
|
||||
{
|
||||
if (b)
|
||||
{
|
||||
/* Return lcm (A, B) if it is in range; otherwise, fall back
|
||||
on A. */
|
||||
{
|
||||
/* Return lcm (A, B) if it is in range; otherwise, fall back
|
||||
on A. */
|
||||
|
||||
size_t lcm, m, n, q, r;
|
||||
size_t lcm, m, n, q, r;
|
||||
|
||||
/* N = gcd (A, B). */
|
||||
for (m = a, n = b; (r = m % n) != 0; m = n, n = r)
|
||||
continue;
|
||||
/* N = gcd (A, B). */
|
||||
for (m = a, n = b; (r = m % n) != 0; m = n, n = r)
|
||||
continue;
|
||||
|
||||
/* LCM = lcm (A, B), if in range. */
|
||||
q = a / n;
|
||||
lcm = q * b;
|
||||
if (lcm <= lcm_max && lcm / b == q)
|
||||
return lcm;
|
||||
}
|
||||
/* LCM = lcm (A, B), if in range. */
|
||||
q = a / n;
|
||||
lcm = q * b;
|
||||
if (lcm <= lcm_max && lcm / b == q)
|
||||
return lcm;
|
||||
}
|
||||
|
||||
size = a;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user