History log of /freebsd-10.0-release/usr.bin/uniq/
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
259065 07-Dec-2013 gjb

- Copy stable/10 (r259064) to releng/10.0 as part of the
10.0-RELEASE cycle.
- Update __FreeBSD_version [1]
- Set branch name to -RC1

[1] 10.0-CURRENT __FreeBSD_version value ended at '55', so
start releng/10.0 at '100' so the branch is started with
a value ending in zero.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

256281 10-Oct-2013 gjb

Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


255219 05-Sep-2013 pjd

Change the cap_rights_t type from uint64_t to a structure that we can extend
in the future in a backward compatible (API and ABI) way.

The cap_rights_t represents capability rights. We used to use one bit to
represent one right, but we are running out of spare bits. Currently the new
structure provides place for 114 rights (so 50 more than the previous
cap_rights_t), but it is possible to grow the structure to hold at least 285
rights, although we can make it even larger if 285 rights won't be enough.

The structure definition looks like this:

struct cap_rights {
uint64_t cr_rights[CAP_RIGHTS_VERSION + 2];
};

The initial CAP_RIGHTS_VERSION is 0.

The top two bits in the first element of the cr_rights[] array contain total
number of elements in the array - 2. This means if those two bits are equal to
0, we have 2 array elements.

The top two bits in all remaining array elements should be 0.
The next five bits in all array elements contain array index. Only one bit is
used and bit position in this five-bits range defines array index. This means
there can be at most five array elements in the future.

To define new right the CAPRIGHT() macro must be used. The macro takes two
arguments - an array index and a bit to set, eg.

#define CAP_PDKILL CAPRIGHT(1, 0x0000000000000800ULL)

We still support aliases that combine few rights, but the rights have to belong
to the same array element, eg:

#define CAP_LOOKUP CAPRIGHT(0, 0x0000000000000400ULL)
#define CAP_FCHMOD CAPRIGHT(0, 0x0000000000002000ULL)

#define CAP_FCHMODAT (CAP_FCHMOD | CAP_LOOKUP)

There is new API to manage the new cap_rights_t structure:

cap_rights_t *cap_rights_init(cap_rights_t *rights, ...);
void cap_rights_set(cap_rights_t *rights, ...);
void cap_rights_clear(cap_rights_t *rights, ...);
bool cap_rights_is_set(const cap_rights_t *rights, ...);

bool cap_rights_is_valid(const cap_rights_t *rights);
void cap_rights_merge(cap_rights_t *dst, const cap_rights_t *src);
void cap_rights_remove(cap_rights_t *dst, const cap_rights_t *src);
bool cap_rights_contains(const cap_rights_t *big, const cap_rights_t *little);

Capability rights to the cap_rights_init(), cap_rights_set(),
cap_rights_clear() and cap_rights_is_set() functions are provided by
separating them with commas, eg:

cap_rights_t rights;

cap_rights_init(&rights, CAP_READ, CAP_WRITE, CAP_FSTAT);

There is no need to terminate the list of rights, as those functions are
actually macros that take care of the termination, eg:

#define cap_rights_set(rights, ...) \
__cap_rights_set((rights), __VA_ARGS__, 0ULL)
void __cap_rights_set(cap_rights_t *rights, ...);

Thanks to using one bit as an array index we can assert in those functions that
there are no two rights belonging to different array elements provided
together. For example this is illegal and will be detected, because CAP_LOOKUP
belongs to element 0 and CAP_PDKILL to element 1:

cap_rights_init(&rights, CAP_LOOKUP | CAP_PDKILL);

Providing several rights that belongs to the same array's element this way is
correct, but is not advised. It should only be used for aliases definition.

This commit also breaks compatibility with some existing Capsicum system calls,
but I see no other way to do that. This should be fine as Capsicum is still
experimental and this change is not going to 9.x.

Sponsored by: The FreeBSD Foundation


253457 18-Jul-2013 pjd

Close uniq(1) in the capability mode sandbox and limit descriptors using
capability rights.


227193 06-Nov-2011 ed

Add missing static keywords to uniq(1)


216370 11-Dec-2010 joel

Remove the advertising clause from UCB copyrighted files in usr.bin. This
is in accordance with the information provided at
ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change

Also add $FreeBSD$ to a few files to keep svn happy.

Discussed with: imp, rwatson


204927 09-Mar-2010 ache

Add SIZE_MAX overflow check


204876 08-Mar-2010 ache

1) Reimplement (differently) unlimited line length restricted in prev.
commit.

2) Honor missing the very last \n (if absent) on output.


204811 06-Mar-2010 ache

Remove vestiges of old %-format which prevents build on amd64


204803 06-Mar-2010 ache

1) Rewrite input processing to not exit with error on the first EILSEQ found
in the input data but fallback to "binary equal" check instead.

POSIX says: "The input file shall be a text file", nothing more,
so the text file with illegal sequence is valid input.
BTW, GNU sort does not fails on EILSEQ too.

2) Speedup input processing a bit in complex cases like skipping fields,
chars or ignore case.

3) Enforce the implied LINE_MAX limit (from POSIX definition of "text file"
and POSIX uniq(1) description).


200633 17-Dec-2009 jh

Sync getline() with comm(1):

- Prevent overflowing of the buffer length variable in getline() by
limiting its maximum value.
- Exit if reallocf(3) fails in getline(). Failure was silently
considered as end-of-file.

Reviewed by: ghelmer
Approved by: trasz (mentor)


200632 17-Dec-2009 jh

The input line length limit mentioned on the manual page was removed by
r176119.

Approved by: trasz (mentor)


176119 08-Feb-2008 ghelmer

Fix truncation of lines at LINE_MAX characters by dynamically
extending line buffers.

PR: bin/76578


169639 17-May-2007 jmallett

Fix typo.


169638 17-May-2007 jmallett

o) Correct for missing whitespace.
o) We don't need to check if ifp == stdin to give the filename, since we already
know that ifn will be "stdin" if it is.


169636 17-May-2007 jmallett

Fix confusing misindentation of a closing-brace. (It goes with the switch, not
with the while.)


166035 15-Jan-2007 keramida

Document that uniq(1) limits input line length to LINE_MAX characters.

PR: docs/107578
Submitted by: Jan Schaumann, jschauma.at.netmeister.org
MFC after: 3 days


140368 17-Jan-2005 ru

Added the EXIT STATUS section where appropriate.


135214 14-Sep-2004 tjr

Remove a bogus check that caused empty lines not to be counted when the
-c option was given.

Noticed by: sf


131502 02-Jul-2004 tjr

Add support for multibyte characters.


131491 02-Jul-2004 ru

Mechanically kill hard sentence breaks.


131060 24-Jun-2004 tjr

Document the fact that uniq(1) does not recognize multibyte characters.


113382 12-Apr-2003 tjr

Mention the environment variables that affect the execution of uniq.
Of particular interest is the fact that LC_COLLATE affects how uniq
determines whether lines are equal. This was the subject of a fairly heated
debate a year or so ago, and it turns out that the current behaviour is
correct and that the standard contained an error.

Now that the standard has been corrected by Cor. 1-2002, refer to 1003.1-2001
instead of the 1992 edition in the Standards section.


107276 26-Nov-2002 ru

mdoc(7) police: markup polishing.

Approved by: re


102944 04-Sep-2002 dwmalone

ANSIify function definitions.
Add some constness to avoid some warnings.
Remove use register keyword.
Deal with missing/unneeded extern/prototypes.
Some minor type changes/casts to avoid warnings.

Reviewed by: md5


99435 05-Jul-2002 tjr

Correct the History section; uniq(1) appeared at least as early as V3.
Move the section to after Standards.


99434 05-Jul-2002 tjr

Remove redundant description of input_file and output_file arguments.


99433 05-Jul-2002 tjr

Use err instead of errx when malloc fails. "malloc" is not a helpful
error message.


98547 21-Jun-2002 tjr

Skip fields in the manner required by POSIX, and the way V7 did it.

MFC after: 1 week


98545 21-Jun-2002 tjr

Newline characters should not participate in line comparisons. Only apparent
when -s is used or the last line of the file is missing a newline.
Noticed by the textutils test suite.

MFC after: 1 week


98107 10-Jun-2002 jmallett

Note that this appeared at least as early as PWB UNIX.

Use the literal string 'PWB UNIX', as we still have no .At macro for it.


97929 06-Jun-2002 ache

Back out rev 1.19 because

1) It breaks uniq for real life languages when "substitute" directive used in
the collating table.
2) It breaks uniq usage in tool chain with other localized utilities which
use collate.
3) To follow LC_COLLATE it is directly allowed for uniq
by POSIX P1003.1 Draft7 (7.3.2). It means that rev 1.19 gains no additional
POSIX conformance.


97906 06-Jun-2002 tjr

Compare lines with strcmp(), not strcoll(). We are interested only in
equality, not ordering.


97905 06-Jun-2002 tjr

Sync usage() with manual page synopsis.


97529 30-May-2002 tjr

Accept an input file name of "-" to mean standard input, as required by
P1003.2.


97528 29-May-2002 tjr

Fields should be separated by <blank>s, not <space>s according to P1003.2.


97527 29-May-2002 tjr

Don't bother trying to handle "-" arguments ourselves, getopt(3) already
does this for us.


97257 24-May-2002 trhodes

Add the word ``fields'' to the description, and change an instance from
fields to num in the SYNOPSIS

Noticed by: keramida


97070 21-May-2002 trhodes

Reword a small part of the uniq(1) manual page to help reduce word
duplication (ie: fields fields).

PR: 38161
Reviewed by: keramida
MFC after: 3 days


95030 19-Apr-2002 ache

Use LC_ALL to pick collate

Noticed by: tjr


92922 22-Mar-2002 imp

remove __P


87700 11-Dec-2001 markm

WARNS=2 is going to become the default, so remove it from here.


87628 10-Dec-2001 dwmalone

Style improvements recommended by Bruce as a follow up to some
of the recent WARNS commits. The idea is:

1) FreeBSD id tags should follow vendor tags.
2) Vendor tags should not be compiled (though copyrights probably should).
3) There should be no blank line between including cdefs and __FBSDIF.


87303 03-Dec-2001 dwmalone

Warns cleanups. Add FreeBSD ID to Makefile.


81687 15-Aug-2001 ru

mdoc(7) police: utilize the new .Ex macro.


58628 26-Mar-2000 charnier

Add DIAGNOSTICS section name


54401 10-Dec-1999 ache

fix fatal typo


52616 29-Oct-1999 ache

toupper -> tolower to match changed behaviour of new grep case fold


52459 24-Oct-1999 ache

Cosmetique: use standard prototypes scheme
Back out prev. change: toupper is more compatible with sort -f


52457 24-Oct-1999 ache

toupper->tolower to match what strcasecmp does


52455 24-Oct-1999 ache

Use strcoll to provide the same results as sort and comm
Use LINE_MAX for max line size (as comm does)


50477 28-Aug-1999 peter

$Id$ -> $FreeBSD$


44769 15-Mar-1999 billf

Grammar nits, double negatives

PR: docs/10491
Submitted By: Tom Hukins <tom@eborcom.com>


34323 08-Mar-1998 ache

Localize it


29207 07-Sep-1997 joerg

Teach comm(1) and uniq(1) about an option for case-insensitive work.

PR: 3042
Submitted by: graphix@iastate.edu (Kent Vander Velden)


28503 21-Aug-1997 charnier

Use err(3) instead of local redefinition.


24360 29-Mar-1997 imp

compare return value from getopt against -1 rather than EOF, per the final
posix standard on the topic.


23691 11-Mar-1997 peter

This commit was generated by cvs2svn to compensate for changes in r23690,
which included commits to RCS files with non-trunk default branches.


1591 27-May-1994 rgrimes

This commit was generated by cvs2svn to compensate for changes in r1590,
which included commits to RCS files with non-trunk default branches.