SHA256
1
0
forked from pool/coreutils
OBS User unknown 2008-06-21 23:50:00 +00:00 committed by Git OBS Bridge
parent 769ab9e681
commit 0f9cd3e7de
7 changed files with 288 additions and 118 deletions

View File

@ -1,5 +1,5 @@
--- coreutils-6.11/lib/linebuffer.h
+++ coreutils-6.11/lib/linebuffer.h
--- coreutils-6.12/lib/linebuffer.h
+++ coreutils-6.12/lib/linebuffer.h
@@ -21,6 +21,11 @@
# include <stdio.h>
@ -22,8 +22,8 @@
};
/* Initialize linebuffer LINEBUFFER for use. */
--- coreutils-6.11/src/cut.c
+++ coreutils-6.11/src/cut.c
--- coreutils-6.12/src/cut.c
+++ coreutils-6.12/src/cut.c
@@ -28,6 +28,12 @@
#include <assert.h>
#include <getopt.h>
@ -51,7 +51,7 @@
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "cut"
@@ -74,6 +87,54 @@ struct range_pair
@@ -77,6 +90,54 @@ struct range_pair
size_t hi;
};
@ -106,7 +106,7 @@
/* This buffer is used to support the semantics of the -s option
(or lack of same) when the specified field list includes (does
not include) the first field. In both of those cases, the entire
@@ -86,7 +147,7 @@ static char *field_1_buffer;
@@ -89,7 +150,7 @@ static char *field_1_buffer;
/* The number of bytes allocated for FIELD_1_BUFFER. */
static size_t field_1_bufsize;
@ -115,7 +115,7 @@
or degenerate range specification; this doesn't include the starting
index of right-open-ended ranges. For example, with either range spec
`2-5,9-', `2-3,5,9-' this variable would be set to 5. */
@@ -98,10 +159,11 @@ static size_t eol_range_start;
@@ -101,10 +162,11 @@ static size_t eol_range_start;
/* This is a bit vector.
In byte mode, which bytes to output.
@ -129,7 +129,7 @@
(K <= MAX_RANGE_ENDPOINT and is_printable_field(K))
|| (EOL_RANGE_START > 0 && K >= EOL_RANGE_START). */
static unsigned char *printable_field;
@@ -110,9 +172,12 @@ enum operating_mode
@@ -113,9 +175,12 @@ enum operating_mode
{
undefined_mode,
@ -143,7 +143,7 @@
/* Output the given delimeter-separated fields. */
field_mode
};
@@ -122,6 +187,13 @@ char *program_name;
@@ -125,6 +190,13 @@ char *program_name;
static enum operating_mode operating_mode;
@ -157,7 +157,7 @@
/* If true do not output lines containing no delimeter characters.
Otherwise, all such lines are printed. This option is valid only
with field mode. */
@@ -133,6 +205,9 @@ static bool complement;
@@ -136,6 +208,9 @@ static bool complement;
/* The delimeter character for field mode. */
static unsigned char delim;
@ -167,7 +167,7 @@
/* True if the --output-delimiter=STRING option was specified. */
static bool output_delimiter_specified;
@@ -206,7 +281,7 @@ Mandatory arguments to long options are
@@ -209,7 +284,7 @@ Mandatory arguments to long options are
-f, --fields=LIST select only these fields; also print any line\n\
that contains no delimiter character, unless\n\
the -s option is specified\n\
@ -176,7 +176,7 @@
"), stdout);
fputs (_("\
--complement complement the set of selected bytes, characters\n\
@@ -365,7 +440,7 @@ set_fields (const char *fieldstr)
@@ -368,7 +443,7 @@ set_fields (const char *fieldstr)
in_digits = false;
/* Starting a range. */
if (dash_found)
@ -185,7 +185,7 @@
dash_found = true;
fieldstr++;
@@ -388,7 +463,9 @@ set_fields (const char *fieldstr)
@@ -392,7 +467,9 @@ set_fields (const char *fieldstr)
if (!rhs_specified)
{
/* `n-'. From `initial' to end of line. */
@ -196,7 +196,7 @@
field_found = true;
}
else
@@ -485,7 +562,7 @@ set_fields (const char *fieldstr)
@@ -489,7 +566,7 @@ set_fields (const char *fieldstr)
fieldstr++;
}
else
@ -205,7 +205,7 @@
}
max_range_endpoint = 0;
@@ -578,6 +655,81 @@ cut_bytes (FILE *stream)
@@ -582,6 +659,81 @@ cut_bytes (FILE *stream)
}
}
@ -287,7 +287,7 @@
/* Read from stream STREAM, printing to standard output any selected fields. */
static void
@@ -700,13 +852,190 @@ cut_fields (FILE *stream)
@@ -704,13 +856,190 @@ cut_fields (FILE *stream)
}
}
@ -481,7 +481,7 @@
}
/* Process file FILE to standard output.
@@ -756,6 +1085,8 @@ main (int argc, char **argv)
@@ -760,6 +1089,8 @@ main (int argc, char **argv)
bool ok;
bool delim_specified = false;
char *spec_list_string IF_LINT(= NULL);
@ -490,7 +490,7 @@
initialize_main (&argc, &argv);
program_name = argv[0];
@@ -778,7 +1109,6 @@ main (int argc, char **argv)
@@ -782,7 +1113,6 @@ main (int argc, char **argv)
switch (optc)
{
case 'b':
@ -498,7 +498,7 @@
/* Build the byte list. */
if (operating_mode != undefined_mode)
FATAL_ERROR (_("only one type of list may be specified"));
@@ -786,6 +1116,14 @@ main (int argc, char **argv)
@@ -790,6 +1120,14 @@ main (int argc, char **argv)
spec_list_string = optarg;
break;
@ -513,7 +513,7 @@
case 'f':
/* Build the field list. */
if (operating_mode != undefined_mode)
@@ -797,9 +1135,32 @@ main (int argc, char **argv)
@@ -801,9 +1139,32 @@ main (int argc, char **argv)
case 'd':
/* New delimiter. */
/* Interpret -d '' to mean `use the NUL byte as the delimiter.' */
@ -549,7 +549,7 @@
delim_specified = true;
break;
@@ -813,6 +1174,7 @@ main (int argc, char **argv)
@@ -817,6 +1178,7 @@ main (int argc, char **argv)
break;
case 'n':
@ -557,7 +557,7 @@
break;
case 's':
@@ -835,7 +1197,7 @@ main (int argc, char **argv)
@@ -839,7 +1201,7 @@ main (int argc, char **argv)
if (operating_mode == undefined_mode)
FATAL_ERROR (_("you must specify a list of bytes, characters, or fields"));
@ -566,7 +566,7 @@
FATAL_ERROR (_("an input delimiter may be specified only\
when operating on fields"));
@@ -862,15 +1224,34 @@ main (int argc, char **argv)
@@ -866,15 +1228,34 @@ main (int argc, char **argv)
}
if (!delim_specified)
@ -607,8 +607,8 @@
}
if (optind == argc)
--- coreutils-6.11/src/expand.c
+++ coreutils-6.11/src/expand.c
--- coreutils-6.12/src/expand.c
+++ coreutils-6.12/src/expand.c
@@ -37,11 +37,31 @@
#include <stdio.h>
#include <getopt.h>
@ -837,8 +837,8 @@
if (have_read_stdin && fclose (stdin) != 0)
error (EXIT_FAILURE, errno, "-");
--- coreutils-6.11/src/fold.c
+++ coreutils-6.11/src/fold.c
--- coreutils-6.12/src/fold.c
+++ coreutils-6.12/src/fold.c
@@ -22,6 +22,19 @@
#include <getopt.h>
#include <sys/types.h>
@ -886,7 +886,7 @@
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "fold"
#define AUTHORS "David MacKenzie"
#define AUTHORS proper_name ("David MacKenzie")
+#define FATAL_ERROR(Message) \
+ do \
@ -1254,8 +1254,8 @@
break;
case 's': /* Break at word boundaries. */
--- coreutils-6.11/src/join.c
+++ coreutils-6.11/src/join.c
--- coreutils-6.12/src/join.c
+++ coreutils-6.12/src/join.c
@@ -22,6 +22,16 @@
#include <sys/types.h>
#include <getopt.h>
@ -1694,8 +1694,8 @@
}
break;
--- coreutils-6.11/src/pr.c
+++ coreutils-6.11/src/pr.c
--- coreutils-6.12/src/pr.c
+++ coreutils-6.12/src/pr.c
@@ -312,6 +312,32 @@
#include <getopt.h>
@ -1748,7 +1748,7 @@
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "pr"
@@ -413,8 +451,21 @@ struct COLUMN
@@ -415,8 +453,21 @@ struct COLUMN
typedef struct COLUMN COLUMN;
#define NULLCOL (COLUMN *)0
@ -1771,7 +1771,7 @@
static bool read_line (COLUMN *p);
static bool print_page (void);
static bool print_stored (COLUMN *p);
@@ -424,6 +475,7 @@ static void print_header (void);
@@ -426,6 +477,7 @@ static void print_header (void);
static void pad_across_to (int position);
static void add_line_number (COLUMN *p);
static void getoptarg (char *arg, char switch_char, char *character,
@ -1779,7 +1779,7 @@
int *number);
void usage (int status);
static void print_files (int number_of_files, char **av);
@@ -438,7 +490,6 @@ static void store_char (char c);
@@ -440,7 +492,6 @@ static void store_char (char c);
static void pad_down (int lines);
static void read_rest_of_line (COLUMN *p);
static void skip_read (COLUMN *p, int column_number);
@ -1787,7 +1787,7 @@
static void cleanup (void);
static void print_sep_string (void);
static void separator_string (const char *optarg_S);
@@ -453,7 +504,7 @@ static COLUMN *column_vector;
@@ -455,7 +506,7 @@ static COLUMN *column_vector;
we store the leftmost columns contiguously in buff.
To print a line from buff, get the index of the first character
from line_vector[i], and print up to line_vector[i + 1]. */
@ -1796,7 +1796,7 @@
/* Index of the position in buff where the next character
will be stored. */
@@ -557,7 +608,7 @@ static int chars_per_column;
@@ -559,7 +610,7 @@ static int chars_per_column;
static bool untabify_input = false;
/* (-e) The input tab character. */
@ -1805,7 +1805,7 @@
/* (-e) Tabstops are at chars_per_tab, 2*chars_per_tab, 3*chars_per_tab, ...
where the leftmost column is 1. */
@@ -567,7 +618,10 @@ static int chars_per_input_tab = 8;
@@ -569,7 +620,10 @@ static int chars_per_input_tab = 8;
static bool tabify_output = false;
/* (-i) The output tab character. */
@ -1817,7 +1817,7 @@
/* (-i) The width of the output tab. */
static int chars_per_output_tab = 8;
@@ -641,7 +695,13 @@ static int power_10;
@@ -643,7 +697,13 @@ static int power_10;
static bool numbered_lines = false;
/* (-n) Character which follows each line number. */
@ -1832,7 +1832,7 @@
/* (-n) line counting starts with 1st line of input file (not with 1st
line of 1st page printed). */
@@ -694,6 +754,7 @@ static bool use_col_separator = false;
@@ -696,6 +756,7 @@ static bool use_col_separator = false;
-a|COLUMN|-m is a `space' and with the -J option a `tab'. */
static char *col_sep_string = "";
static int col_sep_length = 0;
@ -1840,7 +1840,7 @@
static char *column_separator = " ";
static char *line_separator = "\t";
@@ -850,6 +911,13 @@ separator_string (const char *optarg_S)
@@ -852,6 +913,13 @@ separator_string (const char *optarg_S)
col_sep_length = (int) strlen (optarg_S);
col_sep_string = xmalloc (col_sep_length + 1);
strcpy (col_sep_string, optarg_S);
@ -1854,7 +1854,7 @@
}
int
@@ -874,6 +942,21 @@ main (int argc, char **argv)
@@ -876,6 +944,21 @@ main (int argc, char **argv)
atexit (close_stdout);
@ -1876,7 +1876,7 @@
n_files = 0;
file_names = (argc > 1
? xmalloc ((argc - 1) * sizeof (char *))
@@ -950,8 +1033,12 @@ main (int argc, char **argv)
@@ -952,8 +1035,12 @@ main (int argc, char **argv)
break;
case 'e':
if (optarg)
@ -1891,7 +1891,7 @@
/* Could check tab width > 0. */
untabify_input = true;
break;
@@ -964,8 +1051,12 @@ main (int argc, char **argv)
@@ -966,8 +1053,12 @@ main (int argc, char **argv)
break;
case 'i':
if (optarg)
@ -1906,7 +1906,7 @@
/* Could check tab width > 0. */
tabify_output = true;
break;
@@ -992,8 +1083,8 @@ main (int argc, char **argv)
@@ -994,8 +1085,8 @@ main (int argc, char **argv)
case 'n':
numbered_lines = true;
if (optarg)
@ -1917,7 +1917,7 @@
break;
case 'N':
skip_count = false;
@@ -1032,7 +1123,7 @@ main (int argc, char **argv)
@@ -1034,7 +1125,7 @@ main (int argc, char **argv)
old_s = false;
/* Reset an additional input of -s, -S dominates -s */
col_sep_string = "";
@ -1926,7 +1926,7 @@
use_col_separator = true;
if (optarg)
separator_string (optarg);
@@ -1189,10 +1280,45 @@ main (int argc, char **argv)
@@ -1191,10 +1282,45 @@ main (int argc, char **argv)
a number. */
static void
@ -1974,7 +1974,7 @@
if (*arg)
{
long int tmp_long;
@@ -1251,7 +1377,7 @@ init_parameters (int number_of_files)
@@ -1253,7 +1379,7 @@ init_parameters (int number_of_files)
else
col_sep_string = column_separator;
@ -1983,7 +1983,7 @@
use_col_separator = true;
}
/* It's rather pointless to define a TAB separator with column
@@ -1282,11 +1408,11 @@ init_parameters (int number_of_files)
@@ -1284,11 +1410,11 @@ init_parameters (int number_of_files)
TAB_WIDTH (chars_per_input_tab, chars_per_number); */
/* Estimate chars_per_text without any margin and keep it constant. */
@ -1997,7 +1997,7 @@
/* The number is part of the column width unless we are
printing files in parallel. */
@@ -1301,7 +1427,7 @@ init_parameters (int number_of_files)
@@ -1303,7 +1429,7 @@ init_parameters (int number_of_files)
}
chars_per_column = (chars_per_line - chars_used_by_number -
@ -2006,7 +2006,7 @@
if (chars_per_column < 1)
error (EXIT_FAILURE, 0, _("page width too narrow"));
@@ -1426,7 +1552,7 @@ init_funcs (void)
@@ -1428,7 +1554,7 @@ init_funcs (void)
/* Enlarge p->start_position of first column to use the same form of
padding_not_printed with all columns. */
@ -2015,7 +2015,7 @@
/* This loop takes care of all but the rightmost column. */
@@ -1460,7 +1586,7 @@ init_funcs (void)
@@ -1462,7 +1588,7 @@ init_funcs (void)
}
else
{
@ -2024,7 +2024,7 @@
h_next = h + chars_per_column;
}
}
@@ -1750,9 +1876,9 @@ static void
@@ -1752,9 +1878,9 @@ static void
align_column (COLUMN *p)
{
padding_not_printed = p->start_position;
@ -2036,7 +2036,7 @@
padding_not_printed = ANYWHERE;
}
@@ -2023,13 +2149,13 @@ store_char (char c)
@@ -2025,13 +2151,13 @@ store_char (char c)
/* May be too generous. */
buff = X2REALLOC (buff, &buff_allocated);
}
@ -2052,7 +2052,7 @@
char *s;
int left_cut;
@@ -2052,22 +2178,24 @@ add_line_number (COLUMN *p)
@@ -2054,22 +2180,24 @@ add_line_number (COLUMN *p)
/* Tabification is assumed for multiple columns, also for n-separators,
but `default n-separator = TAB' hasn't been given priority over
equal column_width also specified by POSIX. */
@ -2081,7 +2081,7 @@
output_position = POS_AFTER_TAB (chars_per_output_tab,
output_position);
}
@@ -2228,7 +2356,7 @@ print_white_space (void)
@@ -2230,7 +2358,7 @@ print_white_space (void)
while (goal - h_old > 1
&& (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal)
{
@ -2090,7 +2090,7 @@
h_old = h_new;
}
while (++h_old <= goal)
@@ -2248,6 +2376,7 @@ print_sep_string (void)
@@ -2250,6 +2378,7 @@ print_sep_string (void)
{
char *s;
int l = col_sep_length;
@ -2098,7 +2098,7 @@
s = col_sep_string;
@@ -2261,6 +2390,7 @@ print_sep_string (void)
@@ -2263,6 +2392,7 @@ print_sep_string (void)
{
for (; separators_not_printed > 0; --separators_not_printed)
{
@ -2106,7 +2106,7 @@
while (l-- > 0)
{
/* 3 types of sep_strings: spaces only, spaces and chars,
@@ -2274,12 +2404,15 @@ print_sep_string (void)
@@ -2276,12 +2406,15 @@ print_sep_string (void)
}
else
{
@ -2123,7 +2123,7 @@
/* sep_string ends with some spaces */
if (spaces_not_printed > 0)
print_white_space ();
@@ -2306,8 +2439,9 @@ print_clump (COLUMN *p, int n, char *clu
@@ -2308,8 +2441,9 @@ print_clump (COLUMN *p, int n, char *clu
a nonspace is encountered, call print_white_space() to print the
required number of tabs and spaces. */
@ -2134,7 +2134,7 @@
{
if (tabify_output)
{
@@ -2331,6 +2465,75 @@ print_char (char c)
@@ -2333,6 +2467,75 @@ print_char (char c)
putchar (c);
}
@ -2210,7 +2210,7 @@
/* Skip to page PAGE before printing.
PAGE may be larger than total number of pages. */
@@ -2508,9 +2711,9 @@ read_line (COLUMN *p)
@@ -2510,9 +2713,9 @@ read_line (COLUMN *p)
align_empty_cols = false;
}
@ -2222,7 +2222,7 @@
padding_not_printed = ANYWHERE;
}
@@ -2611,9 +2814,9 @@ print_stored (COLUMN *p)
@@ -2613,9 +2816,9 @@ print_stored (COLUMN *p)
}
}
@ -2234,7 +2234,7 @@
padding_not_printed = ANYWHERE;
}
@@ -2626,8 +2829,8 @@ print_stored (COLUMN *p)
@@ -2628,8 +2831,8 @@ print_stored (COLUMN *p)
if (spaces_not_printed == 0)
{
output_position = p->start_position + end_vector[line];
@ -2245,7 +2245,7 @@
}
return true;
@@ -2645,8 +2848,9 @@ print_stored (COLUMN *p)
@@ -2647,8 +2850,9 @@ print_stored (COLUMN *p)
characters in clump_buff. (e.g, the width of '\b' is -1, while the
number of characters is 1.) */
@ -2256,7 +2256,7 @@
{
unsigned char uc = c;
char *s = clump_buff;
@@ -2656,10 +2860,10 @@ char_to_clump (char c)
@@ -2658,10 +2862,10 @@ char_to_clump (char c)
int chars;
int chars_per_c = 8;
@ -2269,7 +2269,7 @@
{
width = TAB_WIDTH (chars_per_c, input_position);
@@ -2740,6 +2944,155 @@ char_to_clump (char c)
@@ -2742,6 +2946,155 @@ char_to_clump (char c)
return chars;
}
@ -2425,8 +2425,8 @@
/* We've just printed some files and need to clean up things before
looking for more options and printing the next batch of files.
--- coreutils-6.11/src/sort.c
+++ coreutils-6.11/src/sort.c
--- coreutils-6.12/src/sort.c
+++ coreutils-6.12/src/sort.c
@@ -26,6 +26,19 @@
#include <sys/types.h>
#include <sys/wait.h>
@ -2465,7 +2465,7 @@
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "sort"
@@ -115,14 +139,38 @@ static int decimal_point;
@@ -117,14 +141,38 @@ static int decimal_point;
/* Thousands separator; if -1, then there isn't one. */
static int thousands_sep;
@ -2505,7 +2505,7 @@
/* The kind of blanks for '-b' to skip in various options. */
enum blanktype { bl_start, bl_end, bl_both };
@@ -260,13 +308,11 @@ static bool reverse;
@@ -262,13 +310,11 @@ static bool reverse;
they were read if all keys compare equal. */
static bool stable;
@ -2523,7 +2523,7 @@
/* Flag to remove consecutive duplicate lines from the output.
Only the last of a sequence of equal lines will be output. */
@@ -653,6 +699,43 @@ reap_some (void)
@@ -655,6 +701,43 @@ reap_some (void)
update_proc (pid);
}
@ -2567,7 +2567,7 @@
/* Clean up any remaining temporary files. */
static void
@@ -992,7 +1075,7 @@ zaptemp (const char *name)
@@ -994,7 +1077,7 @@ zaptemp (const char *name)
free (node);
}
@ -2576,7 +2576,7 @@
static int
struct_month_cmp (const void *m1, const void *m2)
@@ -1019,7 +1102,7 @@ inittables (void)
@@ -1021,7 +1104,7 @@ inittables (void)
fold_toupper[i] = toupper (i);
}
@ -2585,7 +2585,7 @@
/* If we're not in the "C" locale, read different names for months. */
if (hard_LC_TIME)
{
@@ -1045,6 +1128,71 @@ inittables (void)
@@ -1047,6 +1130,71 @@ inittables (void)
#endif
}
@ -2657,7 +2657,7 @@
/* Specify the amount of main memory to use when sorting. */
static void
specify_sort_size (int oi, char c, char const *s)
@@ -1255,7 +1403,7 @@ buffer_linelim (struct buffer const *buf
@@ -1257,7 +1405,7 @@ buffer_linelim (struct buffer const *buf
by KEY in LINE. */
static char *
@ -2666,7 +2666,7 @@
{
char *ptr = line->text, *lim = ptr + line->length - 1;
size_t sword = key->sword;
@@ -1265,10 +1413,10 @@ begfield (const struct line *line, const
@@ -1267,10 +1415,10 @@ begfield (const struct line *line, const
/* The leading field separator itself is included in a field when -t
is absent. */
@ -2679,7 +2679,7 @@
++ptr;
if (ptr < lim)
++ptr;
@@ -1296,11 +1444,70 @@ begfield (const struct line *line, const
@@ -1298,11 +1446,70 @@ begfield (const struct line *line, const
return ptr;
}
@ -2751,7 +2751,7 @@
{
char *ptr = line->text, *lim = ptr + line->length - 1;
size_t eword = key->eword, echar = key->echar;
@@ -1313,10 +1520,10 @@ limfield (const struct line *line, const
@@ -1315,10 +1522,10 @@ limfield (const struct line *line, const
`beginning' is the first character following the delimiting TAB.
Otherwise, leave PTR pointing at the first `blank' character after
the preceding field. */
@ -2764,7 +2764,7 @@
++ptr;
if (ptr < lim && (eword | echar))
++ptr;
@@ -1362,7 +1569,7 @@ limfield (const struct line *line, const
@@ -1364,7 +1571,7 @@ limfield (const struct line *line, const
*/
/* Make LIM point to the end of (one byte past) the current field. */
@ -2773,7 +2773,7 @@
{
char *newlim;
newlim = memchr (ptr, tab, lim - ptr);
@@ -1398,6 +1605,107 @@ limfield (const struct line *line, const
@@ -1400,6 +1607,107 @@ limfield (const struct line *line, const
return ptr;
}
@ -2881,7 +2881,7 @@
/* Fill BUF reading from FP, moving buf->left bytes from the end
of buf->buf to the beginning first. If EOF is reached and the
file wasn't terminated by a newline, supply one. Set up BUF's line
@@ -1480,8 +1788,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
@@ -1482,8 +1790,22 @@ fillbuf (struct buffer *buf, FILE *fp, c
else
{
if (key->skipsblanks)
@ -2906,7 +2906,7 @@
line->keybeg = line_start;
}
}
@@ -1536,15 +1858,59 @@ general_numcompare (const char *sa, cons
@@ -1538,15 +1860,59 @@ general_numcompare (const char *sa, cons
/* FIXME: maybe add option to try expensive FP conversion
only if A and B can't be compared more cheaply/accurately. */
@ -2973,7 +2973,7 @@
return 1;
/* Sort numbers in the usual way, where -0 == +0. Put NaNs after
@@ -1562,7 +1928,7 @@ general_numcompare (const char *sa, cons
@@ -1564,7 +1930,7 @@ general_numcompare (const char *sa, cons
Return 0 if the name in S is not recognized. */
static int
@ -2982,7 +2982,7 @@
{
size_t lo = 0;
size_t hi = MONTHS_PER_YEAR;
@@ -1717,11 +2083,79 @@ compare_random (char *restrict texta, si
@@ -1719,11 +2085,79 @@ compare_random (char *restrict texta, si
return diff;
}
@ -3063,7 +3063,7 @@
{
struct keyfield const *key = keylist;
@@ -1888,12 +2322,189 @@ keycompare (const struct line *a, const
@@ -1890,12 +2324,189 @@ keycompare (const struct line *a, const
return 0;
@ -3255,7 +3255,7 @@
/* Compare two lines A and B, returning negative, zero, or positive
depending on whether A compares less than, equal to, or greater than B. */
@@ -2710,6 +3321,11 @@ set_ordering (const char *s, struct keyf
@@ -2712,6 +3323,11 @@ set_ordering (const char *s, struct keyf
break;
case 'M':
key->month = true;
@ -3267,7 +3267,7 @@
break;
case 'n':
key->numeric = true;
@@ -2763,7 +3379,7 @@ main (int argc, char **argv)
@@ -2765,7 +3381,7 @@ main (int argc, char **argv)
initialize_exit_failure (SORT_FAILURE);
hard_LC_COLLATE = hard_locale (LC_COLLATE);
@ -3276,7 +3276,7 @@
hard_LC_TIME = hard_locale (LC_TIME);
#endif
@@ -2776,14 +3392,40 @@ main (int argc, char **argv)
@@ -2778,14 +3394,40 @@ main (int argc, char **argv)
add support for multibyte decimal points. */
decimal_point = to_uchar (locale->decimal_point[0]);
if (! decimal_point || locale->decimal_point[1])
@ -3319,7 +3319,7 @@
have_read_stdin = false;
inittables ();
@@ -3035,13 +3677,32 @@ main (int argc, char **argv)
@@ -3037,13 +3679,32 @@ main (int argc, char **argv)
case 't':
{
@ -3356,7 +3356,7 @@
else
{
/* Provoke with `sort -txx'. Complain about
@@ -3052,9 +3713,12 @@ main (int argc, char **argv)
@@ -3054,9 +3715,12 @@ main (int argc, char **argv)
quote (optarg));
}
}
@ -3370,8 +3370,8 @@
}
break;
--- coreutils-6.11/src/unexpand.c
+++ coreutils-6.11/src/unexpand.c
--- coreutils-6.12/src/unexpand.c
+++ coreutils-6.12/src/unexpand.c
@@ -38,11 +38,34 @@
#include <stdio.h>
#include <getopt.h>
@ -3659,8 +3659,8 @@
if (have_read_stdin && fclose (stdin) != 0)
error (EXIT_FAILURE, errno, "-");
--- coreutils-6.11/src/uniq.c
+++ coreutils-6.11/src/uniq.c
--- coreutils-6.12/src/uniq.c
+++ coreutils-6.12/src/uniq.c
@@ -22,6 +22,16 @@
#include <getopt.h>
#include <sys/types.h>
@ -3692,7 +3692,7 @@
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "uniq"
@@ -108,6 +125,12 @@ static enum delimit_method const delimit
@@ -110,6 +127,12 @@ static enum delimit_method const delimit
/* Select whether/how to delimit groups of duplicate lines. */
static enum delimit_method delimit_groups;
@ -3705,7 +3705,7 @@
static struct option const longopts[] =
{
{"count", no_argument, NULL, 'c'},
@@ -204,7 +227,7 @@ size_opt (char const *opt, char const *m
@@ -206,7 +229,7 @@ size_opt (char const *opt, char const *m
return a pointer to the beginning of the line's field to be compared. */
static char *
@ -3714,7 +3714,7 @@
{
size_t count;
char *lp = line->buffer;
@@ -225,6 +248,83 @@ find_field (const struct linebuffer *lin
@@ -227,6 +250,83 @@ find_field (const struct linebuffer *lin
return lp + i;
}
@ -3798,7 +3798,7 @@
/* Return false if two strings OLD and NEW match, true if not.
OLD and NEW point not to the beginnings of the lines
but rather to the beginnings of the fields to compare.
@@ -249,6 +349,73 @@ different (char *old, char *new, size_t
@@ -251,6 +351,73 @@ different (char *old, char *new, size_t
return oldlen != newlen || memcmp (old, new, oldlen);
}
@ -3872,7 +3872,7 @@
/* Output the line in linebuffer LINE to standard output
provided that the switches say it should be output.
MATCH is true if the line matches the previous line.
@@ -301,15 +468,42 @@ check_file (const char *infile, const ch
@@ -303,15 +470,42 @@ check_file (const char *infile, const ch
{
char *prevfield IF_LINT (= NULL);
size_t prevlen IF_LINT (= 0);
@ -3915,7 +3915,7 @@
if (prevline->length == 0
|| different (thisfield, prevfield, thislen, prevlen))
{
@@ -328,17 +522,26 @@ check_file (const char *infile, const ch
@@ -330,17 +524,26 @@ check_file (const char *infile, const ch
size_t prevlen;
uintmax_t match_count = 0;
bool first_delimiter = true;
@ -3942,7 +3942,7 @@
if (readlinebuffer_delim (thisline, stdin, delimiter) == 0)
{
if (ferror (stdin))
@@ -347,6 +550,15 @@ check_file (const char *infile, const ch
@@ -349,6 +552,15 @@ check_file (const char *infile, const ch
}
thisfield = find_field (thisline);
thislen = thisline->length - 1 - (thisfield - thisline->buffer);
@ -3958,7 +3958,7 @@
match = !different (thisfield, prevfield, thislen, prevlen);
match_count += match;
@@ -379,6 +591,9 @@ check_file (const char *infile, const ch
@@ -381,6 +593,9 @@ check_file (const char *infile, const ch
SWAP_LINES (prevline, thisline);
prevfield = thisfield;
prevlen = thislen;
@ -3968,7 +3968,7 @@
if (!match)
match_count = 0;
}
@@ -424,6 +639,18 @@ main (int argc, char **argv)
@@ -426,6 +641,18 @@ main (int argc, char **argv)
atexit (close_stdout);
@ -3987,3 +3987,14 @@
skip_chars = 0;
skip_fields = 0;
check_chars = SIZE_MAX;
--- coreutils-6.12/tests/misc/cut
+++ coreutils-6.12/tests/misc/cut
@@ -26,7 +26,7 @@ use strict;
my $prog = 'cut';
my $try = "Try \`$prog --help' for more information.\n";
my $from_1 = "$prog: fields and positions are numbered from 1\n$try";
-my $inval = "$prog: invalid byte or field list\n$try";
+my $inval = "$prog: invalid byte, character or field list\n$try";
my $no_endpoint = "$prog: invalid range with no endpoint: -\n$try";
my @Tests =

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:eb9976291aad92dd586c9ac41669024de065772cc2f2608200d50643ea3a8bce
size 9095150

View File

@ -1,6 +1,6 @@
--- doc/coreutils.texi
+++ doc/coreutils.texi
@@ -65,8 +65,6 @@
@@ -67,8 +67,6 @@
* fold: (coreutils)fold invocation. Wrap long input lines.
* groups: (coreutils)groups invocation. Print group names a user is in.
* head: (coreutils)head invocation. Output the first part of files.
@ -9,7 +9,7 @@
* id: (coreutils)id invocation. Print user identity.
* install: (coreutils)install invocation. Copy and change attributes.
* join: (coreutils)join invocation. Join lines on a common field.
@@ -400,8 +398,6 @@ System context
@@ -402,8 +400,6 @@ System context
* arch invocation:: Print machine hardware name
* date invocation:: Print or set system date and time
* uname invocation:: Print system information
@ -18,7 +18,7 @@
@command{date}: Print or set system date and time
@@ -12515,8 +12511,6 @@ information.
@@ -12523,8 +12519,6 @@ information.
* arch invocation:: Print machine hardware name.
* date invocation:: Print or set system date and time.
* uname invocation:: Print system information.
@ -27,7 +27,7 @@
@end menu
@@ -13296,55 +13290,6 @@ Print the kernel version.
@@ -13304,55 +13298,6 @@ Print the kernel version.
@exitstatus
@ -112,14 +112,14 @@
}
--- m4/gnulib-comp.m4
+++ m4/gnulib-comp.m4
@@ -248,7 +248,6 @@ AC_DEFUN([gl_INIT],
@@ -260,7 +260,6 @@ AC_DEFUN([gl_INIT],
gl_POSIXVER
gl_FUNC_PRINTF_FREXP
gl_FUNC_PRINTF_FREXPL
- m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes])
gl_FUNC_PUTENV
gl_STDLIB_MODULE_INDICATOR([putenv])
gl_QUOTE
m4_ifdef([AM_XGETTEXT_OPTION],
[AM_XGETTEXT_OPTION([--keyword='proper_name:1,\"This is a proper name. See the gettext manual, section Names.\"'])
AM_XGETTEXT_OPTION([--keyword='proper_name_utf8:1,\"This is a proper name. See the gettext manual, section Names.\"'])])
--- man/Makefile.am
+++ man/Makefile.am
@@ -179,7 +179,7 @@ check-x-vs-1:
@ -144,7 +144,7 @@
/* Extract or fake data from a `struct stat'.
--- tests/misc/help-version
+++ tests/misc/help-version
@@ -180,6 +180,7 @@ lbracket_args=": ]"
@@ -178,6 +178,7 @@ lbracket_args=": ]"
for i in $built_programs; do
# Skip these.
case $i in chroot|stty|tty|false|chcon|runcon) continue;; esac

3
coreutils-6.12.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:49d2f703e2310e6328cb6f9d9bae3612c42b3ee5175f449692c5b95e453cf18a
size 9001890

View File

@ -1,3 +1,27 @@
-------------------------------------------------------------------
Wed Jun 4 14:10:05 CEST 2008 - schwab@suse.de
- Update to coreutils 6.12.
** 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 &nbsp) 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]
-------------------------------------------------------------------
Sun Apr 20 00:19:07 CEST 2008 - schwab@suse.de

View File

@ -1,5 +1,5 @@
#
# spec file for package coreutils (Version 6.11)
# spec file for package coreutils (Version 6.12)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@ -16,7 +16,7 @@ BuildRequires: help2man libacl-devel pam-devel
Url: http://www.gnu.org/software/coreutils/
License: GNU Free Documentation License, Version 1.2 (GFDL 1.2); GPL v2 or later; GPL v3 or later
Group: System/Base
Version: 6.11
Version: 6.12
Release: 1
Provides: fileutils sh-utils stat textutils mktemp
Obsoletes: fileutils sh-utils stat textutils mktemp
@ -41,6 +41,7 @@ Patch20: coreutils-6.8-su.diff
Patch21: coreutils-6.8.0-pie.diff
Patch22: coreutils-5.3.0-sbin4su.diff
Patch23: coreutils-getaddrinfo.diff
Patch24: utimens.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@ -110,6 +111,7 @@ Authors:
%patch21
%patch22
%patch23 -p1
%patch24 -p1
%build
AUTOPOINT=true autoreconf -fi
@ -178,6 +180,27 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root)
%changelog
* Wed Jun 04 2008 schwab@suse.de
- Update to coreutils 6.12.
** 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 &nbsp) 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]
* Sun Apr 20 2008 schwab@suse.de
- Update to coreutils 6.11.
** Bug fixes

112
utimens.diff Normal file
View File

@ -0,0 +1,112 @@
2008-06-02 Eric Blake <ebb9@byu.net>
Provide fallback for older kernels.
* lib/utimens.c (gl_futimens) [HAVE_UTIMENSAT, HAVE_FUTIMENS]:
Provide runtime fallback if kernel lacks support.
Reported by Mike Frysinger.
diff --git a/lib/utimens.c b/lib/utimens.c
index 25bc965..134310b 100644
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -96,20 +96,30 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
#endif
/* POSIX 200x added two interfaces to set file timestamps with
- nanosecond resolution. */
+ nanosecond resolution. We provide a fallback for ENOSYS (for
+ example, compiling against Linux 2.6.25 kernel headers and glibc
+ 2.7, but running on Linux 2.6.18 kernel). */
#if HAVE_UTIMENSAT
if (fd < 0)
- return utimensat (AT_FDCWD, file, timespec, 0);
+ {
+ int result = utimensat (AT_FDCWD, file, timespec, 0);
+ if (result == 0 || errno != ENOSYS)
+ return result;
+ }
#endif
#if HAVE_FUTIMENS
- return futimens (fd, timespec);
-#else
+ {
+ int result = futimens (fd, timespec);
+ if (result == 0 || errno != ENOSYS)
+ return result;
+ }
+#endif
/* The platform lacks an interface to set file timestamps with
nanosecond resolution, so do the best we can, discarding any
fractional part of the timestamp. */
{
-# if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES
+#if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES
struct timeval timeval[2];
struct timeval const *t;
if (timespec)
@@ -125,9 +135,9 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
if (fd < 0)
{
-# if HAVE_FUTIMESAT
+# if HAVE_FUTIMESAT
return futimesat (AT_FDCWD, file, t);
-# endif
+# endif
}
else
{
@@ -141,21 +151,21 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
worth optimizing, and who knows what other messed-up systems
are out there? So play it safe and fall back on the code
below. */
-# if HAVE_FUTIMESAT
+# if HAVE_FUTIMESAT
if (futimesat (fd, NULL, t) == 0)
return 0;
-# elif HAVE_FUTIMES
+# elif HAVE_FUTIMES
if (futimes (fd, t) == 0)
return 0;
-# endif
+# endif
}
-# endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */
+#endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */
if (!file)
{
-# if ! (HAVE_FUTIMESAT || (HAVE_WORKING_UTIMES && HAVE_FUTIMES))
+#if ! (HAVE_FUTIMESAT || (HAVE_WORKING_UTIMES && HAVE_FUTIMES))
errno = ENOSYS;
-# endif
+#endif
/* Prefer EBADF to ENOSYS if both error numbers apply. */
if (errno == ENOSYS)
@@ -170,9 +180,9 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
return -1;
}
-# if HAVE_WORKING_UTIMES
+#if HAVE_WORKING_UTIMES
return utimes (file, t);
-# else
+#else
{
struct utimbuf utimbuf;
struct utimbuf const *ut;
@@ -187,9 +197,8 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
return utime (file, ut);
}
-# endif /* !HAVE_WORKING_UTIMES */
+#endif /* !HAVE_WORKING_UTIMES */
}
-#endif /* !HAVE_FUTIMENS */
}
/* Set the access and modification time stamps of FILE to be
--
1.5.5.1