Compare commits

...

92 Commits

Author SHA1 Message Date
Jim Meyering
b32c1f0696 *** empty log message *** 1998-08-16 04:24:38 +00:00
Jim Meyering
94d7c5b58c *** empty log message *** 1998-08-16 04:23:22 +00:00
Jim Meyering
0cb7d9a409 . 1998-08-16 04:22:49 +00:00
Jim Meyering
81bb7f1df3 . 1998-08-16 03:56:27 +00:00
Jim Meyering
7fc3b4cf7d *** empty log message *** 1998-08-16 03:56:15 +00:00
Jim Meyering
cef050f076 Use the new AC_CHECK_TYPE(ssize_t, int) instead of jm_TYPE_SSIZE_T. 1998-08-16 03:55:49 +00:00
Jim Meyering
919b805380 . 1998-08-16 03:55:36 +00:00
Jim Meyering
0e48a577b5 . 1998-08-16 03:53:30 +00:00
Jim Meyering
b0ead8f2d6 *** empty log message *** 1998-08-16 03:20:13 +00:00
Jim Meyering
5614a7d282 (do_move): Fail upon attempt to move a directory into itself.
With prodding from Franois Pinard :-)
1998-08-16 03:09:56 +00:00
Jim Meyering
9c5fb99864 Update for changed behavior of mv. 1998-08-16 03:05:01 +00:00
Jim Meyering
1145211d6b fix typos 1998-08-16 01:44:40 +00:00
Jim Meyering
0c35411a4f *** empty log message *** 1998-08-16 01:38:38 +00:00
Jim Meyering
8bd9ea509e *** empty log message *** 1998-08-16 01:37:02 +00:00
Jim Meyering
bddb246b90 *** empty log message *** 1998-08-16 01:28:55 +00:00
Jim Meyering
e646635206 *** empty log message *** 1998-08-16 00:03:06 +00:00
Jim Meyering
ea9e600f58 *** empty log message *** 1998-08-15 23:59:12 +00:00
Jim Meyering
78c34dee50 *** empty log message *** 1998-08-15 23:58:05 +00:00
Jim Meyering
56949aaebd . 1998-08-15 23:55:00 +00:00
Jim Meyering
18d7d6b082 . 1998-08-15 23:53:59 +00:00
Jim Meyering
0cb75a1a07 *** empty log message *** 1998-08-15 23:53:07 +00:00
Jim Meyering
cc271ce8f3 *** empty log message *** 1998-08-15 23:52:39 +00:00
Jim Meyering
bf73df9811 *** empty log message *** 1998-08-15 23:51:58 +00:00
Jim Meyering
b07a5a108e *** empty log message *** 1998-08-15 23:43:37 +00:00
Jim Meyering
2db8ef7c55 . 1998-08-15 23:29:09 +00:00
Jim Meyering
634ff11428 *** empty log message *** 1998-08-15 22:00:47 +00:00
Jim Meyering
c3b1ab8af1 *** empty log message *** 1998-08-15 21:57:55 +00:00
Jim Meyering
327a21114a *** empty log message *** 1998-08-15 21:57:17 +00:00
Jim Meyering
df91781926 *** empty log message *** 1998-08-15 21:54:10 +00:00
Jim Meyering
4431579378 *** empty log message *** 1998-08-15 21:52:09 +00:00
Jim Meyering
19afd110b3 *** empty log message *** 1998-08-15 21:51:44 +00:00
Jim Meyering
5b02046b20 *** empty log message *** 1998-08-15 21:41:49 +00:00
Jim Meyering
97a44fbdf0 *** empty log message *** 1998-08-15 21:40:06 +00:00
Jim Meyering
49d59ad66b *** empty log message *** 1998-08-15 21:39:17 +00:00
Jim Meyering
c2bbdeab6d *** empty log message *** 1998-08-15 21:38:08 +00:00
Jim Meyering
0d33861999 (copy_internal) [one-file-system]: Do copy mount point
directories (but none of their entries).  This makes
`cp --one-file-system' work the same way tar does.
From Marty Leisner.
1998-08-15 21:16:34 +00:00
Jim Meyering
9c38d004ec *** empty log message *** 1998-08-15 21:09:20 +00:00
Jim Meyering
a302182ac8 *** empty log message *** 1998-08-15 20:33:18 +00:00
Jim Meyering
6b0411ab47 *** empty log message *** 1998-08-15 20:23:33 +00:00
Jim Meyering
65ce4687f5 *** empty log message *** 1998-08-15 20:05:59 +00:00
Jim Meyering
363847ca74 *** empty log message *** 1998-08-15 19:55:35 +00:00
Jim Meyering
d223f01b43 *** empty log message *** 1998-08-15 19:50:54 +00:00
Jim Meyering
3a2b528573 *** empty log message *** 1998-08-15 19:30:32 +00:00
Jim Meyering
14717b8618 *** empty log message *** 1998-08-15 19:23:40 +00:00
Jim Meyering
dc8cd6e39a . 1998-08-15 18:40:41 +00:00
Jim Meyering
6db0107e71 *** empty log message *** 1998-08-15 18:39:45 +00:00
Jim Meyering
a6f74451d3 . 1998-08-15 18:39:38 +00:00
Jim Meyering
8d2302724c . 1998-08-15 18:38:04 +00:00
Jim Meyering
8fa35e89ca . 1998-08-15 18:37:55 +00:00
Jim Meyering
baad4b697c . 1998-08-15 18:37:36 +00:00
Jim Meyering
79d411ceba (qmark_funny_chars): Add comment from Paul eggert. 1998-08-15 16:43:13 +00:00
Jim Meyering
52070d3e4a *** empty log message *** 1998-08-15 14:48:36 +00:00
Jim Meyering
85cc6dedf8 *** empty log message *** 1998-08-15 14:47:50 +00:00
Jim Meyering
e3869f58ad (usage): Reformat a little. 1998-08-15 14:45:19 +00:00
Jim Meyering
c34fd6b4a7 (long_options): Add long names for all options.
(usage): Update help string.
(main): Handle the special options --pages and --columns.
1998-08-15 14:22:01 +00:00
Jim Meyering
63d64851b1 Add braces to suppress warning about ambiguous `else'. 1998-08-15 14:21:00 +00:00
Jim Meyering
d68269bb55 Add braces to suppress warning about ambiguous `else'. 1998-08-15 14:20:16 +00:00
Jim Meyering
2aa62088a3 Work around another bug in Ultrix4.3a's /bin/sh.
Reported by Christian von Roques.
1998-08-15 03:24:56 +00:00
Jim Meyering
f2d4fc8016 Avoid bug in Ultrix4.3a /bin/sh,
not initializing output redirection of : command.
1998-08-15 03:04:06 +00:00
Jim Meyering
bf57f4af46 Avoid bug in Ultrix4.3a /bin/sh,
not initializing output redirection of : command.
1998-08-15 03:03:44 +00:00
Jim Meyering
dc43a7bb60 *** empty log message *** 1998-08-15 03:01:44 +00:00
Jim Meyering
9d7c2d4f7d (read_filesystem_list) [MOUNTED_GETMNT]: Don't infloop on getmnt(2) returning 0.
Christian von Roques
1998-08-15 03:01:13 +00:00
Jim Meyering
888da5c359 *** empty log message *** 1998-08-14 14:14:07 +00:00
Jim Meyering
7b0caffd31 . 1998-08-14 14:09:05 +00:00
Jim Meyering
ed2a7b4e53 . 1998-08-13 18:08:14 +00:00
Jim Meyering
2a6a20ae20 . 1998-08-13 15:25:02 +00:00
Jim Meyering
1dce9a3295 . 1998-08-13 04:54:41 +00:00
Jim Meyering
f6da9983e4 *** empty log message *** 1998-08-13 04:12:33 +00:00
Jim Meyering
e6bc93f49a (DISTFILES): Remove ChangeLog. 1998-08-13 04:06:52 +00:00
Jim Meyering
88c0b8d630 Provide automake-style DESTDIR support.
From Johan Danielsson.
1998-08-13 04:01:46 +00:00
Jim Meyering
669ff7331b . 1998-08-13 02:11:10 +00:00
Jim Meyering
54667de765 . 1998-08-13 02:09:24 +00:00
Jim Meyering
736ea546d9 (noinst_HEADERS): Add filemode.h. 1998-08-13 02:07:54 +00:00
Jim Meyering
461aea548a Include filemode.h. 1998-08-13 02:06:41 +00:00
Jim Meyering
e31691fc1d Protoize. Tsort function definitions and remove prototypes of
static functions.
(mode_string): Remove prototype.
1998-08-13 02:05:56 +00:00
Jim Meyering
8e576e0036 . 1998-08-13 02:05:29 +00:00
Jim Meyering
b9fa91a205 (ftypelet): Add comments for Cray DMF support.
From Johan Danielsson.
1998-08-13 01:52:01 +00:00
Jim Meyering
ff438ee87f *** empty log message *** 1998-08-13 01:48:05 +00:00
Jim Meyering
34cd17408c . 1998-08-13 01:41:38 +00:00
Jim Meyering
138bad1512 add commented `diff -u' command 1998-08-12 17:14:34 +00:00
Jim Meyering
f0604f17d6 *** empty log message *** 1998-08-11 19:10:43 +00:00
Jim Meyering
3fce6c3270 . 1998-08-11 18:53:19 +00:00
Jim Meyering
ba36aa0602 *** empty log message *** 1998-08-11 18:40:21 +00:00
Jim Meyering
58a54666a7 *** empty log message *** 1998-08-11 18:17:01 +00:00
Jim Meyering
40178d3a77 *** empty log message *** 1998-08-11 17:35:57 +00:00
Jim Meyering
b9ca4fe720 . 1998-08-11 17:30:46 +00:00
Jim Meyering
c6afbb198c (rel-check): New rule. 1998-08-11 15:53:55 +00:00
Jim Meyering
c267424d7b automatically generate template for test release announcement 1998-08-11 15:23:01 +00:00
Jim Meyering
053a0e3a8e *** empty log message *** 1998-08-11 13:21:31 +00:00
Jim Meyering
39b1c602aa (usage): Correct description. Reported by John Murphy. 1998-08-11 13:16:24 +00:00
Jim Meyering
2df9108f70 *** empty log message *** 1998-08-11 13:16:11 +00:00
Jim Meyering
a2d2353f0d add comment from glibc version 1998-08-11 01:52:38 +00:00
54 changed files with 3632 additions and 350 deletions

View File

@@ -42,3 +42,39 @@ my-distcheck: dist
@echo "========================"; \
echo "$(distdir).tar.gz is ready for distribution"; \
echo "========================"
THIS_VERSION_REGEXP := $(shell echo $(VERSION)|sed 's/\./\\./g')
# FIXME: this works only for test releases.
PREV_VERSION := $(shell echo $(VERSION)|tr a-z Xa-y)
PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
v = Version
url = ftp://alpha.gnu.org/gnu/$(distdir).tar.gz
md5 = $(shell md5sum < $(distdir).tar.gz|sed 's/ -//')
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 -q --output-document=$$tarz $(url); \
echo "$(md5) -" > $$md5_tmp; \
md5sum -c $$md5_tmp < $$tarz
announcement: NEWS ChangeLog $(distdir).tar.gz
@( \
echo Subject: $(distdir) released; \
echo; \
echo FIXME: put comments here; \
echo; \
echo " $(url)"; \
echo; \
echo "$(md5) $(distdir).tar.gz"; \
echo; \
echo NEWS:; \
sed -n "/$(THIS_VERSION_REGEXP)/,/$(PREV_VERSION_REGEXP)/p" NEWS \
| grep -v '^\['; \
echo; \
echo ChangeLog entries:; \
sed -n "/$v $(THIS_VERSION_REGEXP)/,/$v $(PREV_VERSION_REGEXP)/p" \
ChangeLog | grep -v '\* $v'; \
)

1
THANKS
View File

@@ -8,6 +8,7 @@ Bauke Jan Douma: bjdouma@xs4all.nl
Bengt Martensson: bengt@mathematik.uni-Bremen.de
Bjorn Helgaas: helgaas@rsn.hp.com
Charles Karney: karney@pppl.gov
Christian von Roques: roques@pond.sub.org
Dirk Lattermann: dlatt@t-online.de
Don Parsons: dparsons@synapse.kent.edu
Eirik Fuller: eirik@netcom.com

View File

@@ -18,7 +18,7 @@ libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
error.h exclude.h fnmatch.h fsusage.h \
error.h exclude.h filemode.h fnmatch.h fsusage.h \
getdate.h getline.h getopt.h group-member.h human.h lchown.h long-options.h \
makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h \
quotearg.h regex.h safe-read.h save-cwd.h savedir.h strverscmp.h \

View File

@@ -107,7 +107,7 @@ libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
error.h exclude.h fnmatch.h fsusage.h \
error.h exclude.h filemode.h fnmatch.h fsusage.h \
getdate.h getline.h getopt.h group-member.h human.h lchown.h long-options.h \
makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h \
quotearg.h regex.h safe-read.h save-cwd.h savedir.h strverscmp.h \

63
lib/bumpalloc.h Normal file
View File

@@ -0,0 +1,63 @@
/* BUMP_ALLOC macro - increase table allocation by one element.
Copyright (C) 1990, 1991, 1993, 1998 Free Software Foundation, Inc.
François Pinard <pinard@iro.umontreal.ca>, 1990.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*-------------------------------------------------------------------------.
| Bump the allocation of the array pointed to by TABLE whenever required. |
| The table already has already COUNT elements in it, this macro ensure it |
| has enough space to accommodate at least one more element. Space is |
| allocated (2 ^ EXPONENT) elements at a time. Each element of the array |
| is of type TYPE. |
`-------------------------------------------------------------------------*/
/* Routines `xmalloc' and `xrealloc' are called to do the actual memory
management. This implies that the program will abort with an `Memory
exhausted!' error if any problem arise.
To work correctly, at least EXPONENT and TYPE should always be the
same for all uses of this macro for any given TABLE. A secure way to
achieve this is to never use this macro directly, but use it to define
other macros, which would then be TABLE-specific.
The first time through, COUNT is usually zero. Note that COUNT is not
updated by this macro, but it should be update elsewhere, later. This
is convenient, because it allows TABLE[COUNT] to refer to the new
element at the end. Once its construction is completed, COUNT++ will
record it in the table. Calling this macro several times in a row
without updating COUNT is a bad thing to do. */
#define BUMP_ALLOC(Table, Count, Exponent, Type) \
BUMP_ALLOC_WITH_SIZE ((Table), (Count), (Exponent), Type, sizeof (Type))
/* In cases `sizeof TYPE' would not always yield the correct value for
the size of each element entry, this macro accepts a supplementary
SIZE argument. The EXPONENT, TYPE and SIZE parameters should still
have the same value for all macro calls related to a specific TABLE. */
#define BUMP_ALLOC_WITH_SIZE(Table, Count, Exponent, Type, Size) \
do \
{ \
if (((Count) & (~(~0 << (Exponent)))) == 0) \
{ \
if ((Count) == 0) \
(Table) = (Type *) xmalloc ((1 << (Exponent)) * (Size)); \
else \
(Table) = (Type *) \
xrealloc ((Table), ((Count) + (1 << (Exponent))) * (Size)); \
} \
} \
while (0)

148
lib/diacrit.c Normal file
View File

@@ -0,0 +1,148 @@
/* Diacritics processing for a few character codes.
Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
François Pinard <pinard@iro.umontreal.ca>, 1988.
All this file is a temporary hack, waiting for locales in GNU.
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "diacrit.h"
/* ISO 8859-1 Latin-1 code is used as the underlying character set. If
MSDOS is defined, IBM-PC's character set code is used instead. */
/*--------------------------------------------------------------------.
| For each alphabetic character, returns what it would be without its |
| possible diacritic symbol. |
`--------------------------------------------------------------------*/
const char diacrit_base[256] =
{
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', 0, 0, 0, 0, 0,
0, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', 0, 0, 0, 0, 0,
#ifdef MSDOS
'C', 'u', 'e', 'a', 'a', 'a', 'a', 'c',
'e', 'e', 'e', 'i', 'i', 'i', 'A', 'A',
'E', 'e', 'E', 'o', 'o', 'o', 'u', 'u',
'y', 'O', 'U', 0, 0, 0, 0, 0,
'a', 'i', 'o', 'u', 'n', 'N', 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
#else /* not MSDOS */
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C',
'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I',
0, 'N', 'O', 'O', 'O', 'O', 'O', 0,
'O', 'U', 'U', 'U', 'U', 'Y', 0, 0,
'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c',
'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i',
0, 'n', 'o', 'o', 'o', 'o', 'o', 0,
'o', 'u', 'u', 'u', 'u', 'y', 0, 'y',
#endif /* not MSDOS */
};
/*------------------------------------------------------------------------.
| For each alphabetic character, returns a code of what its diacritic is, |
| according to the following codes: 1 (eE) over aA for latin diphtongs; 2 |
| (') acute accent; 3 (`) grave accent; 4 (^) circumflex accent; 5 (") |
| umlaut or diaraesis; 6 (~) tilda; 7 (,) cedilla; 8 (o) covering degree |
| symbol; 9 (|) slashed character. |
`------------------------------------------------------------------------*/
const char diacrit_diac[256] =
{
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 4, 0,
3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 6, 0,
#ifdef MSDOS
7, 5, 2, 4, 5, 3, 8, 7,
4, 5, 3, 5, 4, 3, 5, 8,
2, 1, 1, 4, 5, 3, 4, 3,
5, 5, 5, 0, 0, 0, 0, 0,
2, 2, 2, 2, 6, 6, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
#else /* not MSDOS */
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
3, 2, 4, 6, 5, 8, 1, 7,
3, 2, 4, 5, 3, 2, 4, 5,
0, 6, 3, 2, 4, 6, 5, 0,
9, 3, 2, 4, 5, 2, 0, 0,
3, 2, 4, 6, 5, 8, 1, 7,
3, 2, 4, 5, 3, 2, 4, 5,
0, 6, 3, 2, 4, 6, 5, 0,
9, 3, 2, 4, 5, 2, 0, 0,
#endif /* not MSDOS */
};

16
lib/diacrit.h Normal file
View File

@@ -0,0 +1,16 @@
/* Diacritics processing for a few character codes.
Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
François Pinard <pinard@iro.umontreal.ca>, 1988.
All this file is a temporary hack, waiting for locales in GNU.
*/
extern const char diacrit_base[]; /* characters without diacritics */
extern const char diacrit_diac[]; /* diacritic code for each character */
/* Returns CHAR without its diacritic. CHAR is known to be alphabetic. */
#define tobase(Char) (diacrit_base[(unsigned char) (Char)])
/* Returns a diacritic code for CHAR. CHAR is known to be alphabetic. */
#define todiac(Char) (diacrit_diac[(unsigned char) (Char)])

View File

@@ -22,6 +22,8 @@
#include <sys/types.h>
#include <sys/stat.h>
#include "filemode.h"
#if !S_IRUSR
# if S_IREAD
# define S_IRUSR S_IREAD
@@ -88,10 +90,132 @@
# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
#endif
void mode_string ();
static char ftypelet ();
static void rwx ();
static void setst ();
/* Look at read, write, and execute bits in BITS and set
flags in CHARS accordingly. */
static void
rwx (short unsigned int bits, char *chars)
{
chars[0] = (bits & S_IRUSR) ? 'r' : '-';
chars[1] = (bits & S_IWUSR) ? 'w' : '-';
chars[2] = (bits & S_IXUSR) ? 'x' : '-';
}
/* Set the 's' and 't' flags in file attributes string CHARS,
according to the file mode BITS. */
static void
setst (short unsigned int bits, char *chars)
{
#ifdef S_ISUID
if (bits & S_ISUID)
{
if (chars[3] != 'x')
/* Set-uid, but not executable by owner. */
chars[3] = 'S';
else
chars[3] = 's';
}
#endif
#ifdef S_ISGID
if (bits & S_ISGID)
{
if (chars[6] != 'x')
/* Set-gid, but not executable by group. */
chars[6] = 'S';
else
chars[6] = 's';
}
#endif
#ifdef S_ISVTX
if (bits & S_ISVTX)
{
if (chars[9] != 'x')
/* Sticky, but not executable by others. */
chars[9] = 'T';
else
chars[9] = 't';
}
#endif
}
/* Return a character indicating the type of file described by
file mode BITS:
'd' for directories
'b' for block special files
'c' for character special files
'm' for multiplexor files
'M' for an off-line (regular) file
'l' for symbolic links
's' for sockets
'p' for fifos
'-' for regular files
'?' for any other file type. */
static char
ftypelet (long int bits)
{
#ifdef S_ISBLK
if (S_ISBLK (bits))
return 'b';
#endif
if (S_ISCHR (bits))
return 'c';
if (S_ISDIR (bits))
return 'd';
if (S_ISREG (bits))
return '-';
#ifdef S_ISFIFO
if (S_ISFIFO (bits))
return 'p';
#endif
#ifdef S_ISLNK
if (S_ISLNK (bits))
return 'l';
#endif
#ifdef S_ISSOCK
if (S_ISSOCK (bits))
return 's';
#endif
#ifdef S_ISMPC
if (S_ISMPC (bits))
return 'm';
#endif
#ifdef S_ISNWK
if (S_ISNWK (bits))
return 'n';
#endif
/* The following two tests are for Cray DMF (Data Migration
Facility), which is a HSM file system. A migrated file has a
`st_dm_mode' that is different from the normal `st_mode', so any
tests for migrated files should use the former. */
#ifdef S_ISOFD
if (S_ISOFD (bits))
/* off line, with data */
return 'M';
#endif
#ifdef S_ISOFL
/* off line, with no data */
if (S_ISOFL (bits))
return 'M';
#endif
return '?';
}
/* Like filemodestring, but only the relevant part of the `struct stat'
is given as an argument. */
void
mode_string (short unsigned int mode, char *str)
{
str[0] = ftypelet ((long) mode);
rwx ((mode & 0700) << 0, &str[1]);
rwx ((mode & 0070) << 3, &str[4]);
rwx ((mode & 0007) << 6, &str[7]);
setst (mode, str);
}
/* filemodestring - fill in string STR with an ls-style ASCII
representation of the st_mode field of file stats block STATP.
@@ -130,137 +254,7 @@ static void setst ();
'T' if the file is sticky but not executable. */
void
filemodestring (statp, str)
struct stat *statp;
char *str;
filemodestring (struct stat *statp, char *str)
{
mode_string (statp->st_mode, str);
}
/* Like filemodestring, but only the relevant part of the `struct stat'
is given as an argument. */
void
mode_string (mode, str)
unsigned short mode;
char *str;
{
str[0] = ftypelet ((long) mode);
rwx ((mode & 0700) << 0, &str[1]);
rwx ((mode & 0070) << 3, &str[4]);
rwx ((mode & 0007) << 6, &str[7]);
setst (mode, str);
}
/* Return a character indicating the type of file described by
file mode BITS:
'd' for directories
'b' for block special files
'c' for character special files
'm' for multiplexor files
'l' for symbolic links
's' for sockets
'p' for fifos
'-' for regular files
'?' for any other file type. */
static char
ftypelet (bits)
long bits;
{
#ifdef S_ISBLK
if (S_ISBLK (bits))
return 'b';
#endif
if (S_ISCHR (bits))
return 'c';
if (S_ISDIR (bits))
return 'd';
if (S_ISREG (bits))
return '-';
#ifdef S_ISFIFO
if (S_ISFIFO (bits))
return 'p';
#endif
#ifdef S_ISLNK
if (S_ISLNK (bits))
return 'l';
#endif
#ifdef S_ISSOCK
if (S_ISSOCK (bits))
return 's';
#endif
#ifdef S_ISMPC
if (S_ISMPC (bits))
return 'm';
#endif
#ifdef S_ISNWK
if (S_ISNWK (bits))
return 'n';
#endif
#ifdef S_ISOFD
/* Cray migrated dmf file. */
if (S_ISOFD (bits))
return 'M';
#endif
#ifdef S_ISOFL
/* Cray migrated dmf file. */
if (S_ISOFL (bits))
return 'M';
#endif
return '?';
}
/* Look at read, write, and execute bits in BITS and set
flags in CHARS accordingly. */
static void
rwx (bits, chars)
unsigned short bits;
char *chars;
{
chars[0] = (bits & S_IRUSR) ? 'r' : '-';
chars[1] = (bits & S_IWUSR) ? 'w' : '-';
chars[2] = (bits & S_IXUSR) ? 'x' : '-';
}
/* Set the 's' and 't' flags in file attributes string CHARS,
according to the file mode BITS. */
static void
setst (bits, chars)
unsigned short bits;
char *chars;
{
#ifdef S_ISUID
if (bits & S_ISUID)
{
if (chars[3] != 'x')
/* Set-uid, but not executable by owner. */
chars[3] = 'S';
else
chars[3] = 's';
}
#endif
#ifdef S_ISGID
if (bits & S_ISGID)
{
if (chars[6] != 'x')
/* Set-gid, but not executable by group. */
chars[6] = 'S';
else
chars[6] = 's';
}
#endif
#ifdef S_ISVTX
if (bits & S_ISVTX)
{
if (chars[9] != 'x')
/* Sticky, but not executable by others. */
chars[9] = 'T';
else
chars[9] = 't';
}
#endif
}

1
lib/filemode.h Normal file
View File

@@ -0,0 +1 @@
void mode_string (short unsigned int mode, char *str);

View File

@@ -393,8 +393,8 @@ read_filesystem_list (int need_fs_type)
struct fs_data fsd;
while (errno = 0,
0 <= (val = getmnt (&offset, &fsd, sizeof (fsd), NOSTAT_MANY,
(char *) 0)))
0 < (val = getmnt (&offset, &fsd, sizeof (fsd), NOSTAT_MANY,
(char *) 0)))
{
me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
me->me_devname = xstrdup (fsd.fd_req.devname);

View File

@@ -55,6 +55,7 @@
/* For platform which support the ISO C amendement 1 functionality we
support user defined character classes. */
#if WIDE_CHAR_SUPPORT
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
# include <wchar.h>
# include <wctype.h>
#endif

View File

@@ -1,3 +1,14 @@
1998-08-15 Jim Meyering <meyering@ascend.com>
* ssize_t.m4 (jm_TYPE_SSIZE_T): Remove file.
* check-type.m4: New file. Replacement for AC_CHECK_TYPE.
* jm-macros.m4: Use the new AC_CHECK_TYPE(ssize_t, int)
instead of jm_TYPE_SSIZE_T.
1998-08-12 Jim Meyering <meyering@ascend.com>
* st_dm_mode.m4: New file. From Johan Danielsson.
1998-08-02 Jim Meyering <meyering@ascend.com>
* st_mtim.m4: Use hack to avoid having to put #undef HAVE_ST_MTIM

View File

@@ -1,14 +1,14 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
##m4-files-begin
EXTRA_DIST = README Makefile.am.in assert.m4 check-decl.m4 chown.m4 \
const.m4 d-ino.m4 d-type.m4 decl.m4 error.m4 fstypename.m4 getgroups.m4 \
getline.m4 getloadavg.m4 gettext.m4 inttypes_h.m4 isc-posix.m4 \
jm-glibc-io.m4 jm-macros.m4 jm-mktime.m4 jm-winsz1.m4 jm-winsz2.m4 \
lchown.m4 lcmessage.m4 lfs.m4 ls-mntd-fs.m4 lstat.m4 malloc.m4 memcmp.m4 \
perl.m4 prereq.m4 progtest.m4 putenv.m4 readdir.m4 realloc.m4 regex.m4 \
ssize_t.m4 st_mtim.m4 stat.m4 strftime.m4 uintmax_t.m4 uptime.m4 \
utimbuf.m4 utime.m4 utimes.m4
EXTRA_DIST = README Makefile.am.in assert.m4 check-decl.m4 check-type.m4 \
chown.m4 const.m4 d-ino.m4 d-type.m4 decl.m4 error.m4 fstypename.m4 \
getgroups.m4 getline.m4 getloadavg.m4 gettext.m4 inttypes_h.m4 \
isc-posix.m4 jm-glibc-io.m4 jm-macros.m4 jm-mktime.m4 jm-winsz1.m4 \
jm-winsz2.m4 lchown.m4 lcmessage.m4 lfs.m4 ls-mntd-fs.m4 lstat.m4 \
malloc.m4 memcmp.m4 perl.m4 prereq.m4 progtest.m4 putenv.m4 readdir.m4 \
realloc.m4 regex.m4 st_dm_mode.m4 st_mtim.m4 stat.m4 strftime.m4 \
uintmax_t.m4 uptime.m4 utimbuf.m4 utime.m4 utimes.m4
##m4-files-end

View File

@@ -89,14 +89,14 @@ VERSION = @VERSION@
YACC = @YACC@
l = @l@
EXTRA_DIST = README Makefile.am.in assert.m4 check-decl.m4 chown.m4 \
const.m4 d-ino.m4 d-type.m4 decl.m4 error.m4 fstypename.m4 getgroups.m4 \
getline.m4 getloadavg.m4 gettext.m4 inttypes_h.m4 isc-posix.m4 \
jm-glibc-io.m4 jm-macros.m4 jm-mktime.m4 jm-winsz1.m4 jm-winsz2.m4 \
lchown.m4 lcmessage.m4 lfs.m4 ls-mntd-fs.m4 lstat.m4 malloc.m4 memcmp.m4 \
perl.m4 prereq.m4 progtest.m4 putenv.m4 readdir.m4 realloc.m4 regex.m4 \
ssize_t.m4 st_mtim.m4 stat.m4 strftime.m4 uintmax_t.m4 uptime.m4 \
utimbuf.m4 utime.m4 utimes.m4
EXTRA_DIST = README Makefile.am.in assert.m4 check-decl.m4 check-type.m4 \
chown.m4 const.m4 d-ino.m4 d-type.m4 decl.m4 error.m4 fstypename.m4 \
getgroups.m4 getline.m4 getloadavg.m4 gettext.m4 inttypes_h.m4 \
isc-posix.m4 jm-glibc-io.m4 jm-macros.m4 jm-mktime.m4 jm-winsz1.m4 \
jm-winsz2.m4 lchown.m4 lcmessage.m4 lfs.m4 ls-mntd-fs.m4 lstat.m4 \
malloc.m4 memcmp.m4 perl.m4 prereq.m4 progtest.m4 putenv.m4 readdir.m4 \
realloc.m4 regex.m4 st_dm_mode.m4 st_mtim.m4 stat.m4 strftime.m4 \
uintmax_t.m4 uptime.m4 utimbuf.m4 utime.m4 utimes.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =

28
m4/check-type.m4 Normal file
View File

@@ -0,0 +1,28 @@
#serial 1
dnl Just like AC_CHECK_TYPE from autoconf-2.12, but also checks in unistd.h
dnl on systems that have it. Fujitsu UXP/V needs this for ssize_t.
undefine([AC_CHECK_TYPE])
dnl AC_CHECK_TYPE(TYPE, DEFAULT)
AC_DEFUN(AC_CHECK_TYPE,
[AC_REQUIRE([AC_HEADER_STDC])dnl
AC_CHECK_HEADERS(unistd.h)
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(ac_cv_type_$1,
[AC_EGREP_CPP(dnl
changequote(<<,>>)dnl
<<$1[^a-zA-Z_0-9]>>dnl
changequote([,]), [#include <sys/types.h>
#if STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl
AC_MSG_RESULT($ac_cv_type_$1)
if test $ac_cv_type_$1 = no; then
AC_DEFINE($1, $2)
fi
])

View File

@@ -11,7 +11,7 @@ AC_DEFUN(jm_MACROS,
AC_REQUIRE([jm_ASSERT])
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
AC_REQUIRE([jm_TYPE_SSIZE_T])
AC_CHECK_TYPE(ssize_t, int)
AC_REQUIRE([jm_STRUCT_UTIMBUF])
AC_REQUIRE([jm_STRUCT_DIRENT_D_TYPE])
AC_REQUIRE([jm_STRUCT_DIRENT_D_INO])

View File

@@ -1,19 +0,0 @@
#serial 1
dnl From Jim Meyering
# If ssize_t is not defined in sys/types.h, define it to `int'.
AC_DEFUN(jm_TYPE_SSIZE_T,
[AC_CACHE_CHECK(for ssize_t in sys/types.h, jm_ac_cv_type_ssize_t,
[
AC_EGREP_HEADER(ssize_t, sys/types.h,
jm_ac_cv_type_ssize_t=yes,
jm_ac_cv_type_ssize_t=no)
if test $jm_ac_cv_type_ssize_t = no; then
AC_DEFINE(ssize_t, int)
fi
]
)
]
)

25
m4/st_dm_mode.m4 Normal file
View File

@@ -0,0 +1,25 @@
# Define HAVE_ST_DM_MODE if struct stat has an st_dm_mode member.
AC_DEFUN(AC_STRUCT_ST_DM_MODE,
[AC_CACHE_CHECK([for st_dm_mode in struct stat], ac_cv_struct_st_dm_mode,
[AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/stat.h>], [struct stat s; s.st_dm_mode;],
ac_cv_struct_st_dm_mode=yes,
ac_cv_struct_st_dm_mode=no)])
if test $ac_cv_struct_st_dm_mode = yes; then
if test x = y; then
# This code is deliberately never run via ./configure.
# FIXME: this is a hack to make autoheader put the corresponding
# HAVE_* undef for this symbol in config.h.in. This saves me the
# trouble of having to add the #undef in acconfig.h manually.
AC_CHECK_FUNCS(ST_DM_MODE)
fi
# Defining it this way (rather than via AC_DEFINE) short-circuits the
# autoheader check -- autoheader doesn't know it's already been taken
# care of by the hack above.
ac_kludge=HAVE_ST_DM_MODE
AC_DEFINE_UNQUOTED($ac_kludge)
fi
]
)

View File

@@ -1,3 +1,62 @@
1998-08-15 Jim Meyering <meyering@ascend.com>
* Version 3.16u.
* Makefile.maint (announcement): New target.
* tests/mv/into-self: Update to reflect changed behavior of mv.
* src/mv.c (do_move): Fail upon attempt to move a directory into itself.
With prodding from François Pinard :-)
* tests/ls-2/Fetish.pm: New file
* tests/ls-2/run-test: New file
* src/copy.c (copy_internal) [one-file-system]: Do copy mount point
directories (but none of their entries). This makes `cp --archive
--one-file-system' use the same policy `tar --one-file-system' does.
From Marty Leisner.
* src/ls.c (qmark_funny_chars): Add comment from Paul eggert.
1998-08-14 Jim Meyering <meyering@ascend.com>
* tests/mv/setup: Work around another bug in Ultrix4.3a's /bin/sh.
Reported by Christian von Roques.
* configure.in (AC_OUTPUT): Add tests/ls-2/Makefile.
* tests/Makefile.am (SUBDIRS): Add ls-2.
* tests/ls-2: New directory
1998-08-14 Christian von Roques <roques@pond.sub.org>
* lib/mountlist.c (read_filesystem_list) [MOUNTED_GETMNT]: Don't
infloop on getmnt(2) returning 0.
* tests/cp/backup-is-src: Avoid bug in Ultrix4.3a /bin/sh,
not initializing output redirection of : command.
* tests/mv/backup-is-src: Likewise.
* tests/rm/i-1: Likewise.
1998-08-12 Jim Meyering <meyering@ascend.com>
* po/Makefile.in.in: Provide automake-style DESTDIR support.
From Johan Danielsson.
(DISTFILES): Remove ChangeLog.
po/ChangeLog: Remove empty file.
* configure.in (AC_STRUCT_ST_DM_MODE): Use it.
* src/ls.c: Include filemode.h.
* src/chmod.c: Likewise.
* lib/filemode.c (ftypelet): Add comments for Cray DMF support.
From Johan Danielsson.
Protoize. Tsort function definitions and remove prototypes of
static functions.
(mode_string): Remove prototype.
* lib/filemode.h (mode_string): New file.
* lib/Makefile.am (noinst_HEADERS): Add filemode.h.
1998-08-09 Jim Meyering <meyering@ascend.com>
* Version 3.16t.

View File

@@ -1,4 +1,8 @@
Changes in release 3.17:
[3.16u]
* mv now fails (as it should) upon attempt to move a directory into itself
* `cp -a --one-file-system' now copies any mount point directories it
encounters on the selected file system.
[3.16t]
* cp (with --update) and ls compare time stamps with subsecond resolution when
available (e.g., on systems with recent Linux kernels and on Solaris 2.6).

View File

@@ -1,3 +1,7 @@
1998-08-11 Jim Meyering <meyering@ascend.com>
* src/uptime.c (usage): Correct description. Reported by John Murphy.
1998-07-16 Jim Meyering <meyering@ascend.com>
* lib/Makefile.am (noinst_HEADERS): Add lchown.h.

View File

@@ -1,3 +1,24 @@
1998-08-15 Jim Meyering <meyering@ascend.com>
* src/pr.c (usage): Reformat.
* src/ptx.c: Add braces to suppress warning about ambiguous `else'.
* lib/bumpalloc.h: Likewise.
1998-08-13 François Pinard <pinard@iro.umontreal.ca>
* src/ptx.c: New file.
* src/Makefile.am (bin_PROGRAMS): Add ptx.
* lib/bumpalloc.h, lib/diacrit.h, lib/diacrit.c: New files.
* lib/Makefile.am (libtu_a_SOURCES): Add diacrit.c.
(noinst_HEADERS): Add bumpalloc.h and diacrit.h.
1998-08-09 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* src/pr.c (long_options): Add long names for all options.
(usage): Update help string.
(main): Handle the special options --pages and --columns.
1998-08-02 Jim Meyering <meyering@ascend.com>
* lib/linebuffer.c (readline): Return zero upon error as well as upon

View File

@@ -1,4 +1,7 @@
Changes in release 1.23
[1.22g]
* pr accepts long option names (see `pr --help')
* new program: ptx (moved to this package from being its own distribution)
[1.22f]
* cut accepts new --output-delimiter=STR option
* `sort -o no-such-file no-such-file' now fails, as it should

View File

@@ -26,7 +26,7 @@ subdir = po
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
MKINSTALLDIRS = @MKINSTALLDIRS@
CC = @CC@
GENCAT = @GENCAT@
@@ -46,7 +46,7 @@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
SOURCES = cat-id-tbl.c
POFILES = @POFILES@
GMOFILES = @GMOFILES@
DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
DISTFILES = Makefile.in.in POTFILES.in $(PACKAGE).pot \
stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
POTFILES = \
@@ -110,17 +110,17 @@ install-exec:
install-data: install-data-@USE_NLS@
install-data-no: all
install-data-yes: all
if test -r "$(MKINSTALLDIRS)"; then \
$(MKINSTALLDIRS) $(datadir); \
if test -x "$(MKINSTALLDIRS)"; then \
$(MKINSTALLDIRS) $(DESTDIR)$(datadir); \
else \
$(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \
$(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \
fi
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
cat=`basename $$cat`; \
case "$$cat" in \
*.gmo) destdir=$(gnulocaledir);; \
*) destdir=$(localedir);; \
*.gmo) destdir=$(DESTDIR)$(gnulocaledir);; \
*) destdir=$(DESTDIR)$(localedir);; \
esac; \
lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
dir=$$destdir/$$lang/LC_MESSAGES; \
@@ -152,13 +152,13 @@ install-data-yes: all
fi; \
done
if test "$(PACKAGE)" = "gettext"; then \
if test -r "$(MKINSTALLDIRS)"; then \
$(MKINSTALLDIRS) $(gettextsrcdir); \
if test -x "$(MKINSTALLDIRS)"; then \
$(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \
else \
$(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
$(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \
fi; \
$(INSTALL_DATA) $(srcdir)/Makefile.in.in \
$(gettextsrcdir)/Makefile.in.in; \
$(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
else \
: ; \
fi
@@ -171,12 +171,12 @@ uninstall:
for cat in $$catalogs; do \
cat=`basename $$cat`; \
lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
done
rm -f $(gettextsrcdir)/po-Makefile.in.in
rm -f $(DESTDIR)$(gettextsrcdir)/po-Makefile.in.in
check: all

View File

@@ -27,6 +27,7 @@
#include "closeout.h"
#include "error.h"
#include "savedir.h"
#include "filemode.h"
enum Change_status
{
@@ -47,7 +48,6 @@ enum Verbosity
V_off
};
void mode_string ();
void strip_trailing_slashes ();
static int change_dir_mode PARAMS ((const char *dir,

View File

@@ -381,10 +381,6 @@ copy_internal (const char *src_path, const char *dst_path,
return 1;
}
/* Are we crossing a file system boundary? */
if (x->one_file_system && device != 0 && device != src_sb.st_dev)
return 0;
/* We wouldn't insert a node unless nlink > 1, except that we need to
find created files so as to not copy infinitely if a directory is
copied into itself. */
@@ -661,6 +657,10 @@ copy_internal (const char *src_path, const char *dst_path,
if (x->verbose)
printf ("%s -> %s\n", src_path, dst_path);
/* Are we crossing a file system boundary? */
if (x->one_file_system && device != 0 && device != src_sb.st_dev)
return 0;
}
/* Copy the contents of the directory. */

View File

@@ -72,6 +72,7 @@
#include "xstrtol.h"
#include "strverscmp.h"
#include "quotearg.h"
#include "filemode.h"
#define obstack_chunk_alloc malloc
#define obstack_chunk_free free
@@ -132,8 +133,6 @@ struct bin_str
time_t time ();
#endif
void mode_string ();
char *getgroup ();
char *getuser ();
void strip_trailing_slashes ();
@@ -450,8 +449,15 @@ struct ignore_pattern
static struct ignore_pattern *ignore_patterns;
/* Nonzero means output nongraphic chars in file names as `?'. -q */
/* Nonzero means output nongraphic chars in file names as `?'.
(-q, --hide-control-chars)
qmark_funny_chars and the quoting style (-Q, --quoting-style=WORD) are
independent. The algorithm is: first, obey the quoting style to get a
string representing the file name; then, if qmark_funny_chars is set,
replace all nonprintable chars in that string with `?'. It's necessary
to replace nonprintable chars even in quoted strings, because we don't
want to mess up the terminal if control chars get sent to it, and some
quoting methods pass through control chars as-is. */
static int qmark_funny_chars;
/* Quoting options for file and dir name output. */
@@ -821,6 +827,7 @@ decode_switches (int argc, char **argv)
if (isatty (1))
{
format = many_per_line;
/* See description of qmark_funny_chars, above. */
qmark_funny_chars = 1;
}
else
@@ -2183,6 +2190,7 @@ print_long_format (const struct fileinfo *f)
char *user_name;
#if HAVE_ST_DM_MODE
/* Cray DMF: look at the file's migrated, not real, status */
mode_string (f->stat.st_dm_mode, modebuf);
#else
mode_string (f->stat.st_mode, modebuf);

View File

@@ -177,21 +177,34 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
hash_init (INITIAL_HASH_MODULE, INITIAL_ENTRY_TAB_SIZE);
}
fail = copy (source, dest, 0, x,
&copy_into_self, &rename_succeeded);
fail = copy (source, dest, 0, x, &copy_into_self, &rename_succeeded);
if (!fail)
{
const char *dir_to_remove;
if (copy_into_self)
{
/* Do *not* remove SOURCE if it is the same as or a parent
of DEST. Otherwise, mv would be removing the original
*and* the copy. */
/* In general, when copy returns with copy_into_self set, SOURCE is
the same as, or a parent of DEST. In this case we know it's a
parent. It doesn't make sense to move a directory into itself, and
besides in some situations doing so would give highly nonintuitive
results. Run this `mkdir b; touch a c; mv * b' in an empty
directory. Here's the result of running echo `find b -print`:
b b/a b/b b/b/a b/c. Notice that only file `a' was copied
into b/b. Handle this by giving a diagnostic, removing the
copied-into-self directory, DEST (`b/b' in the example),
and failing. */
dir_to_remove = dest;
error (0, 0,
_("cannot move `%s' to a subdirectory of itself, `%s'"),
source, dest);
}
else if (rename_succeeded)
{
/* No need to remove anything. SOURCE was successfully
renamed to DEST. */
dir_to_remove = NULL;
}
else
{
@@ -217,6 +230,11 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
This function used to resort to copying only when rename
failed and set errno to EXDEV. */
dir_to_remove = source;
}
if (dir_to_remove != NULL)
{
struct rm_options rm_options;
struct File_spec fs;
enum RM_status status;
@@ -226,7 +244,7 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
remove_init ();
fspec_init_file (&fs, source);
fspec_init_file (&fs, dir_to_remove);
status = rm (&fs, 1, &rm_options);
assert (VALID_STATUS (status));
if (status == RM_ERROR)
@@ -235,8 +253,11 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
remove_fini ();
if (fail)
error (0, errno, _("cannot remove `%s'"), source);
error (0, errno, _("cannot remove `%s'"), dir_to_remove);
}
if (copy_into_self)
fail = 1;
}
return fail;

View File

@@ -580,6 +580,27 @@ static struct option const long_options[] =
{"help", no_argument, &show_help, 1},
{"version", no_argument, &show_version, 1},
{"test", no_argument, &test_suite, 1},
{"pages", required_argument, NULL, 128},
{"columns", required_argument, NULL, 129},
{"across", no_argument, NULL, 'a'},
{"show-control-chars", no_argument, NULL, 'c'},
{"double-space", no_argument, NULL, 'd'},
{"expand-tabs", optional_argument, NULL, 'e'},
{"form-feed", no_argument, NULL, 'f'},
{"header", required_argument, NULL, 'h'},
{"output-tabs", optional_argument, NULL, 'i'},
{"join-lines", no_argument, NULL, 'j'},
{"length", required_argument, NULL, 'l'},
{"merge", no_argument, NULL, 'm'},
{"number-lines", optional_argument, NULL, 'n'},
{"first-line-number", required_argument, NULL, 'N'},
{"indent", required_argument, NULL, 'o'},
{"no-file-warnings", no_argument, NULL, 'r'},
{"separator", optional_argument, NULL, 's'},
{"omit-header", no_argument, NULL, 't'},
{"omit-pagination", no_argument, NULL, 'T'},
{"show-nonprinting", no_argument, NULL, 'v'},
{"width", required_argument, NULL, 'w'},
{0, 0, 0, 0}
};
@@ -722,6 +743,24 @@ main (int argc, char **argv)
case 0: /* getopt long option */
break;
case 128: /* --pages=FIRST_PAGE[:LAST_PAGE] */
first_last_page (optarg);
break;
case 129: /* --columns=COLUMN */
{
long int tmp_long;
if (xstrtol (optarg, NULL, 10, &tmp_long, "") != LONGINT_OK
|| tmp_long <= 0 || tmp_long > INT_MAX)
{
error (EXIT_FAILURE, 0,
_("`--columns=COLUMN' invalid number of columns: `%s'"),
optarg);
}
columns = (int) tmp_long;
break;
}
case 'a':
print_across_flag = TRUE;
storing_columns = FALSE;
@@ -2416,44 +2455,61 @@ Usage: %s [OPTION]... [FILE]...\n\
Paginate or columnate FILE(s) for printing.\n\
\n\
+FIRST_PAGE[:LAST_PAGE]\n\
--pages=FIRST_PAGE[:LAST_PAGE]\n\
begin [stop] printing with page FIRST_[LAST_]PAGE\n\
-COLUMN produce COLUMN-column output and print columns down,\n\
-COLUMN\n\
--columns=COLUMN produce COLUMN-column output and print columns down,\n\
unless -a is used. Balance number of lines in the\n\
columns on each page.\n\
-a print columns across rather than down, used together\n\
-a, --across print columns across rather than down, used together\n\
with -COLUMN\n\
-c use hat notation (^G) and octal backslash notation\n\
-d double space the output\n\
-e[CHAR[WIDTH]] expand input CHARs (TABs) to tab WIDTH (8)\n\
-F, -f use form feeds instead of newlines to separate pages\n\
-c, --show-control-chars\n\
use hat notation (^G) and octal backslash notation\n\
-d, --double-space\n\
double space the output\n\
-e, --expand-tabs[=CHAR[WIDTH]]\n\
expand input CHARs (TABs) to tab WIDTH (8)\n\
-F, -f, --form-feed\n\
use form feeds instead of newlines to separate pages\n\
(by a 3-line page header with -f or a 5-line header\n\
and trailer without -f)\n\
-h HEADER use a centered HEADER instead of filename in page headers\n\
-h, --header=HEADER\n\
use a centered HEADER instead of filename in page headers\n\
with long headers left-hand-side truncation may occur\n\
-h \"\" prints a blank line. Don't use -h\"\"\n\
-i[CHAR[WIDTH]] replace spaces with CHARs (TABs) to tab WIDTH (8)\n\
-j merge full lines, turns off -w line truncation, no column\n\
-i, --output-tabs[=CHAR[WIDTH]]\n\
replace spaces with CHARs (TABs) to tab WIDTH (8)\n\
-j, --join-lines merge full lines, turns off -w line truncation, no column\n\
alignment, -s[STRING] sets separators\n\
-l PAGE_LENGTH set the page length to PAGE_LENGTH (66) lines\n\
-l, --length PAGE_LENGTH\n\
set the page length to PAGE_LENGTH (66) lines\n\
(default number of lines of text 56, with -f 63)\n"));
printf (_("\
-m print all files in parallel, one in each column,\n\
-m, --merge print all files in parallel, one in each column,\n\
truncate lines, but join lines of full length with -j\n\
-n[SEP[DIGITS]] number lines, use DIGITS (5) digits, then SEP (TAB)\n\
-n, --number-lines[=SEP[DIGITS]]\n\
number lines, use DIGITS (5) digits, then SEP (TAB)\n\
default counting starts with 1st line of input file\n\
-N NUMBER start counting with NUMBER at 1st line of first\n\
-N, --first-line-number=NUMBER\n\
start counting with NUMBER at 1st line of first\n\
page printed (see +FIRST_PAGE)\n\
-o MARGIN offset each line with MARGIN spaces (do not affect -w)\n\
-r inhibit warning when a file cannot be opened\n\
-s[STRING] separate columns by an optional STRING, don't use\n\
-o, --indent=MARGIN\n\
offset each line with MARGIN spaces (do not affect -w)\n\
-r, --no-file-warnings\n\
inhibit warning when a file cannot be opened\n\
-s, --separator[=STRING]\n\
separate columns by an optional STRING, don't use\n\
-s \"STRING\", -s only: No separator used (same as -s\"\"),\n\
without -s: Default separator \'TAB\' with -j and \'space\'\n\
otherwise (same as -s\" \")\n\
-t inhibit page headers and trailers\n\
-T inhibit page headers and trailers, eliminate any page\n\
-t, --omit-header inhibit page headers and trailers\n\
-T, --omit-pagination\n\
inhibit page headers and trailers, eliminate any page\n\
layout by form feeds set in input files\n\
-v use octal backslash notation\n\
-w PAGE_WIDTH set page width to PAGE_WIDTH (72) columns, truncate\n\
-v, --show-nonprinting\n\
use octal backslash notation\n\
-w, --width=PAGE_WIDTH\n\
set page width to PAGE_WIDTH (72) columns, truncate\n\
lines (see also -j option)\n\
--help display this help and exit\n\
--version output version information and exit\n\

2223
src/ptx.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -162,7 +162,9 @@ usage (int status)
{
printf (_("Usage: %s [OPTION]... [ FILE ]\n"), program_name);
printf (_("\
Output who is currently logged in according to FILE.\n\
Print the current time, the length of time the system has been up,\n\
the number of users on the system, and the average number of jobs\n\
in the run queue over the last 1, 5 and 15 minutes.\n\
If FILE is not specified, use %s. %s as FILE is common.\n\
\n\
--help display this help and exit\n\

View File

@@ -10,8 +10,8 @@ fi
framework_failure=0
$RM -f a a~ || framework_failure=1
: > a || framework_failure=1
echo a > a~ || framework_failure=1
echo a > a || framework_failure=1
echo a-tilde > a~ || framework_failure=1
if test $framework_failure = 1; then
echo 'failure in testing framework'

View File

@@ -51,6 +51,7 @@ for args in 'foo symlink' 'symlink foo' 'foo foo' 'sl1 sl2' 'foo hardlink'; do
case "$args" in *sl2*) ln -s foo sl2;; esac
(
(
# echo 1>&2 $CP $options $args
$CP $options $args 2>.err
echo $? $options
@@ -166,5 +167,8 @@ cat <<\EOF > $expected
EOF
# Uncomment this if you see a failure and want to try to diagnose it.
# diff -u $expected $actual 1>&2
cmp $expected $actual
exit $?

View File

@@ -1718,23 +1718,6 @@ else
esac
fi
test -s y.E || rm -f y.E
cat $srcdir/y.I | $xx -s -b4 > y.O 2> y.E
code=$?
if test $code != 1 ; then
$echo "Test y(|) failed: ../../src/cut return code $code differs from expected value 1" 1>&2
errors=`expr $errors + 1`
else
cmp y.O $srcdir/y.X > /dev/null 2>&1
case $? in
0) if test "$VERBOSE" ; then $echo "passed y(|)"; fi ;;
1) $echo "Test y(|) failed: files y.O and $srcdir/y.X differ" 1>&2;
errors=`expr $errors + 1` ;;
2) $echo "Test y(|) may have failed." 1>&2;
$echo The command "cmp y.O $srcdir/y.X" failed. 1>&2 ;
errors=`expr $errors + 1` ;;
esac
fi
test -s y.E || rm -f y.E
$xx -s -b4 < $srcdir/y.I > y.O 2> y.E
code=$?
if test $code != 1 ; then
@@ -1769,23 +1752,6 @@ else
esac
fi
test -s z.E || rm -f z.E
cat $srcdir/z.I | $xx > z.O 2> z.E
code=$?
if test $code != 1 ; then
$echo "Test z(|) failed: ../../src/cut return code $code differs from expected value 1" 1>&2
errors=`expr $errors + 1`
else
cmp z.O $srcdir/z.X > /dev/null 2>&1
case $? in
0) if test "$VERBOSE" ; then $echo "passed z(|)"; fi ;;
1) $echo "Test z(|) failed: files z.O and $srcdir/z.X differ" 1>&2;
errors=`expr $errors + 1` ;;
2) $echo "Test z(|) may have failed." 1>&2;
$echo The command "cmp z.O $srcdir/z.X" failed. 1>&2 ;
errors=`expr $errors + 1` ;;
esac
fi
test -s z.E || rm -f z.E
$xx < $srcdir/z.I > z.O 2> z.E
code=$?
if test $code != 1 ; then
@@ -1820,23 +1786,6 @@ else
esac
fi
test -s empty-fl.E || rm -f empty-fl.E
cat $srcdir/empty-fl.I | $xx -f '' > empty-fl.O 2> empty-fl.E
code=$?
if test $code != 1 ; then
$echo "Test empty-fl(|) failed: ../../src/cut return code $code differs from expected value 1" 1>&2
errors=`expr $errors + 1`
else
cmp empty-fl.O $srcdir/empty-fl.X > /dev/null 2>&1
case $? in
0) if test "$VERBOSE" ; then $echo "passed empty-fl(|)"; fi ;;
1) $echo "Test empty-fl(|) failed: files empty-fl.O and $srcdir/empty-fl.X differ" 1>&2;
errors=`expr $errors + 1` ;;
2) $echo "Test empty-fl(|) may have failed." 1>&2;
$echo The command "cmp empty-fl.O $srcdir/empty-fl.X" failed. 1>&2 ;
errors=`expr $errors + 1` ;;
esac
fi
test -s empty-fl.E || rm -f empty-fl.E
$xx -f '' < $srcdir/empty-fl.I > empty-fl.O 2> empty-fl.E
code=$?
if test $code != 1 ; then
@@ -1871,23 +1820,6 @@ else
esac
fi
test -s missing-fl.E || rm -f missing-fl.E
cat $srcdir/missing-fl.I | $xx -f > missing-fl.O 2> missing-fl.E
code=$?
if test $code != 1 ; then
$echo "Test missing-fl(|) failed: ../../src/cut return code $code differs from expected value 1" 1>&2
errors=`expr $errors + 1`
else
cmp missing-fl.O $srcdir/missing-fl.X > /dev/null 2>&1
case $? in
0) if test "$VERBOSE" ; then $echo "passed missing-fl(|)"; fi ;;
1) $echo "Test missing-fl(|) failed: files missing-fl.O and $srcdir/missing-fl.X differ" 1>&2;
errors=`expr $errors + 1` ;;
2) $echo "Test missing-fl(|) may have failed." 1>&2;
$echo The command "cmp missing-fl.O $srcdir/missing-fl.X" failed. 1>&2 ;
errors=`expr $errors + 1` ;;
esac
fi
test -s missing-fl.E || rm -f missing-fl.E
$xx -f < $srcdir/missing-fl.I > missing-fl.O 2> missing-fl.E
code=$?
if test $code != 1 ; then
@@ -1922,23 +1854,6 @@ else
esac
fi
test -s empty-bl.E || rm -f empty-bl.E
cat $srcdir/empty-bl.I | $xx -b '' > empty-bl.O 2> empty-bl.E
code=$?
if test $code != 1 ; then
$echo "Test empty-bl(|) failed: ../../src/cut return code $code differs from expected value 1" 1>&2
errors=`expr $errors + 1`
else
cmp empty-bl.O $srcdir/empty-bl.X > /dev/null 2>&1
case $? in
0) if test "$VERBOSE" ; then $echo "passed empty-bl(|)"; fi ;;
1) $echo "Test empty-bl(|) failed: files empty-bl.O and $srcdir/empty-bl.X differ" 1>&2;
errors=`expr $errors + 1` ;;
2) $echo "Test empty-bl(|) may have failed." 1>&2;
$echo The command "cmp empty-bl.O $srcdir/empty-bl.X" failed. 1>&2 ;
errors=`expr $errors + 1` ;;
esac
fi
test -s empty-bl.E || rm -f empty-bl.E
$xx -b '' < $srcdir/empty-bl.I > empty-bl.O 2> empty-bl.E
code=$?
if test $code != 1 ; then
@@ -1973,23 +1888,6 @@ else
esac
fi
test -s missing-bl.E || rm -f missing-bl.E
cat $srcdir/missing-bl.I | $xx -b > missing-bl.O 2> missing-bl.E
code=$?
if test $code != 1 ; then
$echo "Test missing-bl(|) failed: ../../src/cut return code $code differs from expected value 1" 1>&2
errors=`expr $errors + 1`
else
cmp missing-bl.O $srcdir/missing-bl.X > /dev/null 2>&1
case $? in
0) if test "$VERBOSE" ; then $echo "passed missing-bl(|)"; fi ;;
1) $echo "Test missing-bl(|) failed: files missing-bl.O and $srcdir/missing-bl.X differ" 1>&2;
errors=`expr $errors + 1` ;;
2) $echo "Test missing-bl(|) may have failed." 1>&2;
$echo The command "cmp missing-bl.O $srcdir/missing-bl.X" failed. 1>&2 ;
errors=`expr $errors + 1` ;;
esac
fi
test -s missing-bl.E || rm -f missing-bl.E
$xx -b < $srcdir/missing-bl.I > missing-bl.O 2> missing-bl.E
code=$?
if test $code != 1 ; then
@@ -2314,7 +2212,7 @@ else
fi
test -s multichar-od.E || rm -f multichar-od.E
if test $errors = 0 ; then
$echo Passed all 135 tests. 1>&2
$echo Passed all 129 tests. 1>&2
else
$echo Failed $errors tests. 1>&2
fi

View File

@@ -4,7 +4,6 @@
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A

View File

@@ -4,7 +4,6 @@
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A

1
tests/ls-2/.cvsignore Normal file
View File

@@ -0,0 +1 @@
Makefile

275
tests/ls-2/Fetish.pm Normal file
View File

@@ -0,0 +1,275 @@
package Fetish;
# This is a testing framework.
# In case you're wondering about the name, it comes from the
# names of the three packages: FIleutils, SH-utils, TExtutils.
require 5.003;
use strict;
use vars qw($VERSION @ISA @EXPORT);
use FileHandle;
use File::Compare qw(compare);
@ISA = qw(Exporter);
($VERSION = '$Revision: 1.9 $ ') =~ tr/[0-9].//cd;
@EXPORT = qw (run_tests);
my @Types = qw (IN OUT ERR EXIT);
my %Types = map {$_ => 1} @Types;
my %Zero_one_type = map {$_ => 1} qw (OUT ERR EXIT);
my $srcdir = $ENV{srcdir};
my $Global_count = 1;
# A file spec: a scalar or a reference to a single-keyed hash
# ================
# 'contents' contents only (file name is derived from test name)
# {filename => 'contents'} filename and contents
# {filename => undef} filename only -- $(srcdir)/filename must exist
#
# FIXME: If there is more than one input file, the you can't specify REDIRECT.
# PIPE is still ok.
#
# I/O spec: a hash ref with the following properties
# ================
# - one key/value pair
# - the key must be one of these strings: IN, OUT, ERR, EXIT
# - the value must be a file spec
# {OUT => 'data'} put data in a temp file and compare it to stdout from cmd
# {OUT => {'filename'=>undef}} compare contents of existing filename to
# stdout from cmd
# {OUT => {'filename'=>[$CTOR, $DTOR]}} $CTOR and $DTOR are references to
# functions, each which is passed the single argument `filename'.
# $CTOR must create `filename'.
# DTOR may be omitted in which case `sub{unlink @_[0]}' is used.
# FIXME: implement this
# Ditto for `ERR', but compare with stderr
# {EXIT => N} expect exit status of cmd to be N
#
# There may be many input file specs. File names from the input specs
# are concatenated in order on the command line.
# There may be at most one of the OUT-, ERR-, and EXIT-keyed specs.
# If the OUT-(or ERR)-keyed hash ref is omitted, then expect no output
# on stdout (or stderr).
# If the EXIT-keyed one is omitted, then expect the exit status to be zero.
# FIXME: Make sure that no junkfile is also listed as a
# non-junkfile (i.e. with undef for contents)
sub _shell_quote ($)
{
my ($string) = @_;
$string =~ s/\'/\'\\\'\'/g;
return "'$string'";
}
sub _create_file ($$$$)
{
my ($program_name, $test_name, $file_name, $data) = @_;
my $file;
if (defined $file_name)
{
$file = $file_name;
}
else
{
$file = "$test_name-$$.$Global_count";
++$Global_count;
}
# The test spec gave a string.
# Write it to a temp file and return tempfile name.
my $fh = new FileHandle "> $file";
die "$program_name: $file: $!\n" if ! $fh;
print $fh $data;
$fh->close || die "$program_name: $file: $!\n";
return $file;
}
# FIXME: cleanup on interrupt
# FIXME: extract `do_1_test' function
# FIXME: having to include $program_name here is an expedient kludge.
# Library code doesn't `die'.
sub run_tests ($$$$$)
{
my ($program_name, $prog, $t_spec, $save_temps, $verbose) = @_;
# Warn about empty t_spec.
# FIXME
# Remove all temp files upon interrupt.
# FIXME
# Verify that test names are distinct.
my $found_duplicate = 0;
my %seen;
my $t;
foreach $t (@$t_spec)
{
my $test_name = $t->[0];
if ($seen{$test_name})
{
warn "$program_name: $test_name: duplicate test name\n";
$found_duplicate = 1;
}
$seen{$test_name} = 1;
}
return 1 if $found_duplicate;
# FIXME check exit status
system ($prog, '--version');
my @junk_files;
my $fail = 0;
foreach $t (@$t_spec)
{
my $test_name = shift @$t;
my $expect = {};
# FIXME: maybe don't reset this.
$Global_count = 1;
my @args;
my $io_spec;
my %seen_type;
foreach $io_spec (@$t)
{
if (!ref $io_spec)
{
push @args, $io_spec;
next;
}
die "$program_name: $test_name: invalid test spec\n"
if ref $io_spec ne 'HASH';
my $n = keys %$io_spec;
die "$program_name: $test_name: spec has $n elements --"
. " expected 1\n"
if $n != 1;
my ($type, $val) = each %$io_spec;
die "$program_name: $test_name: invalid key `$type' in test spec\n"
if ! $Types{$type};
# Make sure there's no more than one of OUT, ERR, EXIT.
die "$program_name: $test_name: more than one $type spec\n"
if $Zero_one_type{$type} and $seen_type{$type}++;
if ($type eq 'EXIT')
{
die "$program_name: $test_name: invalid EXIT code\n"
if $val !~ /^\d+$/;
# FIXME: make sure $data is numeric
$expect->{EXIT} = $val;
next;
}
my $file_spec = $val;
my ($file_name, $contents);
if (!ref $file_spec)
{
($file_name, $contents) = (undef, $file_spec);
}
elsif (ref $file_spec eq 'HASH')
{
my $n = keys %$file_spec;
die "$program_name: $test_name: $type spec has $n elements --"
. " expected 1\n"
if $n != 1;
($file_name, $contents) = each %$file_spec;
}
else
{
die "$program_name: $test_name: invalid RHS in $type-spec\n"
}
my $is_junk_file = (! defined $file_name
|| ($type eq 'IN' && defined $contents));
my $file = _create_file ($program_name, $test_name,
$file_name, $contents);
if ($type eq 'IN')
{
push @args, _shell_quote $file;
}
else
{
$expect->{$type} = $file;
}
if ($is_junk_file)
{
push @junk_files, $file
}
else
{
# FIXME: put $srcdir in here somewhere
warn "$program_name: $test_name: specified file `$file' does"
. " not exist\n"
if ! -f "$srcdir/$file";
}
}
# Expect an exit status of zero if it's not specified.
$expect->{EXIT} ||= 0;
# Allow ERR to be omitted -- in that case, expect no error output.
my $eo;
foreach $eo (qw (OUT ERR))
{
if (!exists $expect->{$eo})
{
$expect->{$eo} = _create_file ($program_name, $test_name,
undef, '');
push @junk_files, $expect->{$eo};
}
}
# FIXME: Does it ever make sense to specify a filename *and* contents
# in OUT or ERR spec?
warn "$test_name...\n" if $verbose;
my %tmp;
$tmp{OUT} = "$test_name-out";
$tmp{ERR} = "$test_name-err";
push @junk_files, $tmp{OUT}, $tmp{ERR};
my @cmd = ($prog, @args, "> $tmp{OUT}", "2> $tmp{ERR}");
my $cmd_str = join ' ', @cmd;
warn "Running command: `$cmd_str'\n" if $verbose;
my $rc = 0xffff & system $cmd_str;
if ($rc == 0xff00)
{
warn "$program_name: test $test_name failed: command failed:\n"
. " `$cmd_str': $!\n";
$fail = 1;
next;
}
$rc >>= 8 if $rc > 0x80;
if ($expect->{EXIT} != $rc)
{
warn "$program_name: test $test_name failed: exit status mismatch:"
. " expected $expect->{EXIT}, got $rc\n";
$fail = 1;
next;
}
foreach $eo (qw (OUT ERR))
{
my $eo_lower = lc $eo;
if (compare ($expect->{$eo}, $tmp{$eo}))
{
warn "$program_name: test $test_name: std$eo_lower mismatch,"
. " comparing $expect->{$eo} and $tmp{$eo}\n";
$fail = 1;
}
}
}
# FIXME: maybe unlink files inside the big foreach loop?
unlink @junk_files if ! $save_temps;
return $fail;
}
## package return
1;

12
tests/ls-2/Makefile.am Normal file
View File

@@ -0,0 +1,12 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-.
EXTRA_DIST = $(TESTS) Fetish.pm quoting
TESTS_ENVIRONMENT = \
top_srcdir=$(top_srcdir) \
srcdir=$(srcdir) \
PERL="@PERL@" \
PATH=../../src:$$PATH \
LS=ls
TESTS = run-test

221
tests/ls-2/Makefile.in Normal file
View File

@@ -0,0 +1,221 @@
# Makefile.in generated automatically by automake 1.3 from Makefile.am
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = /bin/sh
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DISTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CPP = @CPP@
DATADIRNAME = @DATADIRNAME@
DF_PROG = @DF_PROG@
GENCAT = @GENCAT@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GT_NO = @GT_NO@
GT_YES = @GT_YES@
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
INSTOBJEXT = @INSTOBJEXT@
INTLDEPS = @INTLDEPS@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
LIBOBJS = @LIBOBJS@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MVDIR_PROG = @MVDIR_PROG@
PACKAGE = @PACKAGE@
PERL = @PERL@
POFILES = @POFILES@
POSUB = @POSUB@
RANLIB = @RANLIB@
U = @U@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
YACC = @YACC@
l = @l@
EXTRA_DIST = $(TESTS) Fetish.pm quoting
TESTS_ENVIRONMENT = \
top_srcdir=$(top_srcdir) \
srcdir=$(srcdir) \
PERL="@PERL@" \
PATH=../../src:$$PATH \
LS=ls
TESTS = run-test
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../../config.h
CONFIG_CLEAN_FILES =
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP = --best
all: Makefile
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/ls-2/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
cd $(top_builddir) \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
tags: TAGS
TAGS:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = tests/ls-2
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
distdir=`cd $(distdir) && pwd`; \
cd $(top_srcdir) \
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits tests/ls-2/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file; \
done
check-TESTS: $(TESTS)
@failed=0; all=0; \
srcdir=$(srcdir); export srcdir; \
for tst in $(TESTS); do \
if test -f $$tst; then dir=.; \
else dir="$(srcdir)"; fi; \
if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \
all=`expr $$all + 1`; \
echo "PASS: $$tst"; \
elif test $$? -ne 77; then \
all=`expr $$all + 1`; \
failed=`expr $$failed + 1`; \
echo "FAIL: $$tst"; \
fi; \
done; \
if test "$$failed" -eq 0; then \
banner="All $$all tests passed"; \
else \
banner="$$failed of $$all tests failed"; \
fi; \
dashes=`echo "$$banner" | sed s/./=/g`; \
echo "$$dashes"; \
echo "$$banner"; \
echo "$$dashes"; \
test "$$failed" -eq 0
info:
dvi:
check: all
$(MAKE) check-TESTS
installcheck:
install-exec:
@$(NORMAL_INSTALL)
install-data:
@$(NORMAL_INSTALL)
install: install-exec install-data all
@:
uninstall:
install-strip:
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
installdirs:
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f Makefile $(DISTCLEANFILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
mostlyclean: mostlyclean-generic
clean: clean-generic mostlyclean
distclean: distclean-generic clean
-rm -f config.status
maintainer-clean: maintainer-clean-generic distclean
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
.PHONY: tags distdir check-TESTS info dvi installcheck install-exec \
install-data install uninstall all installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

31
tests/ls-2/Test.pm Normal file
View File

@@ -0,0 +1,31 @@
# -*-perl-*-
package Test;
require 5.002;
use strict;
# Always copy filename arguments from $srcdir to current directory
# before running ls on them. Otherwise, we'd have to factor out
# differences in $srcdir from the expected output.
$Test::copy_fileargs_default = 1;
sub test_vector
{
my @tv =
(
# test-name options input expected-output expected-return-code
#
['q-', '', {"q\a" => 'contents'}, "q\a\n", 0],
['q-N', '-N', {"q\a" => ''}, "q\a\n", 0],
['q-q', '-q', {"q\a" => ''}, "q?\n", 0],
['q-Q', '-Q', {"q\a" => ''}, "\"q\\a\"\n", 0],
['q-qs-lit', '--quoting=literal', {"q\a" => ''}, "q\a\n", 0],
['q-qs-sh', '--quoting=shell', {"q\a" => ''}, "q\a\n", 0],
['q-qs-sh-a', '--quoting=shell-always', {"q\a" => ''}, "'q\a'\n", 0],
['q-qs-c', '--quoting=c', {"q\a" => ''}, "\"q\\a\"\n", 0],
['q-qs-esc', '--quoting=escape', {"q\a" => ''}, "q\\a\n", 0],
);
return @tv;
}
1;

35
tests/ls-2/quoting Executable file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/perl -w
require 5.003;
use strict;
(my $program_name = $0) =~ s|.*/||;
# Make sure the tools use the expected locale.
$ENV{LANGUAGE} = 'C';
$ENV{LC_ALL} = 'C';
$ENV{LANG} = 'C';
my $q_bell = {IN => {"q\a" => ''}};
my @Tests =
(
# test-name options input expected-output
#
['q-', $q_bell, {OUT => "q\a\n"}, {EXIT => 0}],
['q-N', '-N', $q_bell, {OUT => "q\a\n"}, {ERR => ''}],
['q-q', '-q', $q_bell, {OUT => "q?\n"}],
['q-Q', '-Q', $q_bell, {OUT => "\"q\\a\"\n"}],
['q-lit-q', '--quoting=literal -q', $q_bell, {OUT => "q?\n"}],
['q-qs-lit', '--quoting=literal', $q_bell, {OUT => "q\a\n"}],
['q-qs-sh', '--quoting=shell', $q_bell, {OUT => "q\a\n"}],
['q-qs-sh-a', '--quoting=shell-always', $q_bell, {OUT => "'q\a'\n"}],
['q-qs-c', '--quoting=c', $q_bell, {OUT => "\"q\\a\"\n"}],
['q-qs-esc', '--quoting=escape', $q_bell, {OUT => "q\\a\n"}],
);
my $save_temps = 0;
my $verbose = $ENV{VERBOSE};
my $prog = $ENV{LS} || 'ls';
my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
exit $fail;

13
tests/ls-2/run-test Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/sh
: ${PERL=perl}
: ${srcdir=.}
case "$PERL" in
*'missing perl')
echo 1>&2 "$0: configure didn't find a usable version of Perl, so can't run this test"
exit 77
;;
esac
exec $PERL -w -I$srcdir -MFetish -- $srcdir/quoting

View File

@@ -4,7 +4,6 @@
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A

View File

@@ -20,8 +20,8 @@ a2="$other_partition_tmpdir/a~"
framework_failure=0
$RM -f $a $a2 || framework_failure=1
: > $a || framework_failure=1
echo a > $a2 || framework_failure=1
echo a > $a || framework_failure=1
echo a2 > $a2 || framework_failure=1
if test $framework_failure = 1; then
echo 'failure in testing framework'

View File

@@ -1,4 +1,5 @@
#! /bin/sh
# Demonstrate how mv fails when it tries to move a directory into itself.
: ${MV=mv}
: ${MKDIR=mkdir}
@@ -20,13 +21,37 @@ if test $test_failure = 1; then
fi
fail=0
$MV $dir $file $dir || fail=1
# Make sure we get English translations.
LANGUAGE=C
export LANGUAGE
LC_ALL=C
export LC_ALL
LANG=C
export LANG
# This mv command should fail.
$MV $dir $file $dir > out 2>&1 && fail=1
sed \
-e "s,$MV:,XXX:," \
-e "s,$dir,SRC," \
-e "s,$dir/$dir,DEST," \
out > out2
cat > exp <<\EOF
XXX: cannot move `SRC' to a subdirectory of itself, `DEST'
EOF
cmp out2 exp || fail=1
# Make sure the file is gone.
test -f $file && fail=1
# Make sure the directory is *not* gone.
test -d $dir/$dir/a/b || fail=1
# Make sure the directory is *not* moved.
test -d $dir || fail=1
test -d $dir/$dir && fail=1
# Make sure the file has been moved to the right place.
test -f $dir/$file || fail=1
$RM -rf $dir $file
$RM -rf $dir $file out out2 exp
exit $fail

View File

@@ -7,8 +7,12 @@
: ${DF=df}
: ${MKDIR=mkdir}
# Try these
: ${CANDIDATE_TMP_DIRS="$TMPDIR /tmp /var/tmp /usr/tmp $HOME"}
: ${CANDIDATE_TMP_DIRS=not_set}
# Work around a bug in the way Ultrix4.3a's /bin/sh handles multi-word
# variables set with ${VAR="VALUE"}
test "$CANDIDATE_TMP_DIRS" = not_set \
&& CANDIDATE_TMP_DIRS="$TMPDIR /tmp /var/tmp /usr/tmp $HOME"
other_partition_tmpdir=

View File

@@ -4,7 +4,6 @@
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A

View File

@@ -15,7 +15,7 @@ tmp=$RM_TMPDIR/t-rm.$$
test_failure=0
mkdir $tmp || test_failure=1
: > $tmp/a || test_failure=1
echo > $tmp/a || test_failure=1
test -f $tmp/a || test_failure=1
if test $test_failure = 1; then

65
tests/stty/basic-1 Executable file
View File

@@ -0,0 +1,65 @@
#! /bin/sh
# Make sure stty can parse most of its options.
: ${STTY=stty}
if test "$VERBOSE" = yes; then
set -x
$RM --version
fi
# The following list of reversible options was generated with
# grep -w REV stty.c|sed -n '/^ {"/{s//REV_/;s/".*/=1/;p;}'|fmt
REV_parenb=1 REV_parodd=1 REV_hupcl=1 REV_hup=1 REV_cstopb=1 REV_cread=1
REV_clocal=1 REV_crtscts=1 REV_ignbrk=1 REV_brkint=1 REV_ignpar=1
REV_parmrk=1 REV_inpck=1 REV_istrip=1 REV_inlcr=1 REV_igncr=1 REV_icrnl=1
REV_ixon=1 REV_ixoff=1 REV_tandem=1 REV_iuclc=1 REV_ixany=1 REV_imaxbel=1
REV_opost=1 REV_olcuc=1 REV_ocrnl=1 REV_onlcr=1 REV_onocr=1 REV_onlret=1
REV_ofill=1 REV_ofdel=1 REV_isig=1 REV_icanon=1 REV_iexten=1 REV_echo=1
REV_echoe=1 REV_crterase=1 REV_echok=1 REV_echonl=1 REV_noflsh=1
REV_xcase=1 REV_tostop=1 REV_echoprt=1 REV_prterase=1 REV_echoctl=1
REV_ctlecho=1 REV_echoke=1 REV_crtkill=1 REV_evenp=1 REV_parity=1
REV_oddp=1 REV_nl=1 REV_cooked=1 REV_raw=1 REV_pass8=1 REV_litout=1
REV_cbreak=1 REV_decctlq=1 REV_tabs=1 REV_lcase=1 REV_LCASE=1
saved_state=.saved-state
$STTY --save > $saved_state || exit 1
trap "status=$?; $STTY `cat $saved_state`; exit $status" 0 1 2 3 15
$STTY `cat $saved_state` || exit 1
# Build a list of all boolean options stty accepts on this system.
options=`stty -a|tail +2|tr ';' '\012'|sed '/ = /d;s/^ //'|tr -s ' -' '\012'`
# Take them one at a time, with and without the leading `-'.
for opt in $options; do
$STTY $opt || exit 1
rev=`eval echo "\\\$REV_$opt"`
if test -n "$rev"; then
$STTY -$opt || exit 1
fi
done
if test -n "$RUN_LONG_TESTS"; then
# Take them in pairs.
for opt1 in $options; do
echo .|tr -d '\012'
for opt2 in $options; do
$STTY $opt1 $opt2 || exit 1
rev1=`eval echo "\\\$REV_$opt1"`
rev2=`eval echo "\\\$REV_$opt2"`
if test -n "$rev1"; then
$STTY -$opt1 $opt2 || exit 1
fi
if test -n "$rev2"; then
$STTY $opt1 -$opt2 || exit 1
fi
if test "$rev1$rev2" = 11; then
$STTY -$opt1 -$opt2 || exit 1
fi
done
done
fi
exit 0

View File

@@ -4,7 +4,6 @@
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A

View File

@@ -4,7 +4,6 @@
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A

View File

@@ -4,7 +4,6 @@
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A

View File

@@ -4,7 +4,6 @@
# This Makefile.in 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.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A