Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Nov 2012 11:38:34 +0000 (UTC)
From:      Gabor Kovesdan <gabor@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r242430 - head/usr.bin/sort
Message-ID:  <201211011138.qA1BcYxU082884@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gabor
Date: Thu Nov  1 11:38:34 2012
New Revision: 242430
URL: http://svn.freebsd.org/changeset/base/242430

Log:
  - Portability changes for ARM
  - Allow larger sort memory on 64-bit platforms
  
  Submitted by:	Oleg Moskalenko <oleg.moskalenko@citrix.com>

Modified:
  head/usr.bin/sort/bwstring.c
  head/usr.bin/sort/bwstring.h
  head/usr.bin/sort/coll.c
  head/usr.bin/sort/coll.h
  head/usr.bin/sort/file.c
  head/usr.bin/sort/file.h
  head/usr.bin/sort/radixsort.c
  head/usr.bin/sort/sort.c
  head/usr.bin/sort/sort.h

Modified: head/usr.bin/sort/bwstring.c
==============================================================================
--- head/usr.bin/sort/bwstring.c	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/bwstring.c	Thu Nov  1 11:38:34 2012	(r242430)
@@ -69,7 +69,7 @@ initialise_months(void)
 					continue;
 				if (debug_sort)
 					printf("month[%d]=%s\n", i, tmp);
-				len = strlen(tmp);
+				len = strlen((char*)tmp);
 				if (len < 1)
 					continue;
 				while (isblank(*tmp))
@@ -95,13 +95,13 @@ initialise_months(void)
 					continue;
 				if (debug_sort)
 					printf("month[%d]=%s\n", i, tmp);
-				len = strlen(tmp);
+				len = strlen((char*)tmp);
 				if (len < 1)
 					continue;
 				while (isblank(*tmp))
 					++tmp;
 				m = sort_malloc(SIZEOF_WCHAR_STRING(len + 1));
-				if (mbstowcs(m, tmp, len) == ((size_t) -1))
+				if (mbstowcs(m, (char*)tmp, len) == ((size_t) -1))
 					continue;
 				m[len] = L'\0';
 				for (unsigned int j = 0; j < len; j++)
@@ -421,7 +421,7 @@ bwsnocpy(struct bwstring *dst, const str
  * The output is ended either with '\n' (nl == true)
  * or '\0' (nl == false).
  */
-int
+size_t
 bwsfwrite(struct bwstring *bws, FILE *f, bool zero_ended)
 {
 
@@ -442,11 +442,11 @@ bwsfwrite(struct bwstring *bws, FILE *f,
 
 	} else {
 		wchar_t eols;
-		int printed = 0;
+		size_t printed = 0;
 
 		eols = zero_ended ? btowc('\0') : btowc('\n');
 
-		while (printed < (int) BWSLEN(bws)) {
+		while (printed < BWSLEN(bws)) {
 			const wchar_t *s = bws->data.wstr + printed;
 
 			if (*s == L'\0') {
@@ -479,7 +479,7 @@ bwsfwrite(struct bwstring *bws, FILE *f,
 struct bwstring *
 bwsfgetln(FILE *f, size_t *len, bool zero_ended, struct reader_buffer *rb)
 {
-	wchar_t eols;
+	wint_t eols;
 
 	eols = zero_ended ? btowc('\0') : btowc('\n');
 
@@ -494,7 +494,7 @@ bwsfgetln(FILE *f, size_t *len, bool zer
 			return (NULL);
 		}
 		if (*len > 0) {
-			if (ret[*len - 1] == eols)
+			if (ret[*len - 1] == (wchar_t)eols)
 				--(*len);
 		}
 		return (bwssbdup(ret, *len));
@@ -513,11 +513,9 @@ bwsfgetln(FILE *f, size_t *len, bool zer
 			if (ret[*len - 1] == '\n')
 				--(*len);
 		}
-		return (bwscsbdup(ret, *len));
+		return (bwscsbdup((unsigned char*)ret, *len));
 
 	} else {
-		wchar_t c = 0;
-
 		*len = 0;
 
 		if (feof(f))
@@ -532,6 +530,8 @@ bwsfgetln(FILE *f, size_t *len, bool zer
 
 		if (MB_CUR_MAX == 1)
 			while (!feof(f)) {
+				int c;
+
 				c = fgetc(f);
 
 				if (c == EOF) {
@@ -553,6 +553,8 @@ bwsfgetln(FILE *f, size_t *len, bool zer
 			}
 		else
 			while (!feof(f)) {
+				wint_t c = 0;
+
 				c = fgetwc(f);
 
 				if (c == WEOF) {
@@ -750,7 +752,7 @@ bwscoll(const struct bwstring *bws1, con
 						} else if (s2[i] == 0)
 							return (+1);
 
-						res = strcoll(s1 + i, s2 + i);
+						res = strcoll((const char*)(s1 + i), (const char*)(s2 + i));
 						if (res)
 							return (res);
 
@@ -872,7 +874,7 @@ bwstod(struct bwstring *s0, bool *empty)
 			return (0);
 		}
 
-		ret = strtod(s, &ep);
+		ret = strtod((char*)s, &ep);
 		if ((unsigned char*) ep == s) {
 			*empty = true;
 			return (0);
@@ -923,11 +925,11 @@ bws_month_score(const struct bwstring *s
 		while (isblank(*s) && s < end)
 			++s;
 
-		len = strlen(s);
+		len = strlen((const char*)s);
 
 		for (int i = 11; i >= 0; --i) {
 			if (cmonths[i] &&
-			    (s == (unsigned char*)strstr(s, cmonths[i])))
+			    (s == (unsigned char*)strstr((const char*)s, (char*)(cmonths[i]))))
 				return (i);
 		}
 

Modified: head/usr.bin/sort/bwstring.h
==============================================================================
--- head/usr.bin/sort/bwstring.h	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/bwstring.h	Thu Nov  1 11:38:34 2012	(r242430)
@@ -93,7 +93,7 @@ struct bwstring *bwsnocpy(struct bwstrin
 int bwscmp(const struct bwstring *bws1, const struct bwstring *bws2, size_t offset);
 int bwsncmp(const struct bwstring *bws1, const struct bwstring *bws2, size_t offset, size_t len);
 int bwscoll(const struct bwstring *bws1, const struct bwstring *bws2, size_t offset);
-int bwsfwrite(struct bwstring *bws, FILE *f, bool zero_ended);
+size_t bwsfwrite(struct bwstring *bws, FILE *f, bool zero_ended);
 struct bwstring *bwsfgetln(FILE *file, size_t *len, bool zero_ended, struct reader_buffer *rb);
 
 static inline bwstring_iterator

Modified: head/usr.bin/sort/coll.c
==============================================================================
--- head/usr.bin/sort/coll.c	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/coll.c	Thu Nov  1 11:38:34 2012	(r242430)
@@ -47,11 +47,11 @@ __FBSDID("$FreeBSD$");
 struct key_specs *keys;
 size_t keys_num = 0;
 
-wchar_t symbol_decimal_point = L'.';
+wint_t symbol_decimal_point = L'.';
 /* there is no default thousands separator in collate rules: */
-wchar_t symbol_thousands_sep = 0;
-wchar_t symbol_negative_sign = L'-';
-wchar_t symbol_positive_sign = L'+';
+wint_t symbol_thousands_sep = 0;
+wint_t symbol_negative_sign = L'-';
+wint_t symbol_positive_sign = L'+';
 
 static int wstrcoll(struct key_value *kv1, struct key_value *kv2, size_t offset);
 static int gnumcoll(struct key_value*, struct key_value *, size_t offset);
@@ -260,7 +260,7 @@ skip_fields_to_start(const struct bwstri
 		while (cpos < BWSLEN(s)) {
 			bool isblank;
 
-			isblank = iswblank(BWS_GET(s,cpos));
+			isblank = iswblank(BWS_GET(s, cpos));
 
 			if (isblank && !pb) {
 				--fields;
@@ -277,7 +277,7 @@ skip_fields_to_start(const struct bwstri
 		size_t cpos = 0;
 
 		while (cpos < BWSLEN(s)) {
-			if (BWS_GET(s,cpos) == sort_opts_vals.field_sep) {
+			if (BWS_GET(s,cpos) == (wchar_t)sort_opts_vals.field_sep) {
 				--fields;
 				if (fields <= 1)
 					return (cpos + 1);
@@ -328,7 +328,7 @@ find_field_end(const struct bwstring *s,
 			next_field_start = skip_fields_to_start(s, f2 + 1,
 			    &empty_field);
 			if ((next_field_start > 0) && sort_opts_vals.tflag &&
-			    (sort_opts_vals.field_sep == BWS_GET(s,
+			    ((wchar_t)sort_opts_vals.field_sep == BWS_GET(s,
 			    next_field_start - 1)))
 				--next_field_start;
 		} else
@@ -699,7 +699,7 @@ static void setsuffix(wchar_t c, unsigne
  * point is in sfrac, tail is the pointer to the remainder of the string.
  */
 static int
-read_number(struct bwstring *s0, int *sign, wchar_t *smain, int *main_len, wchar_t *sfrac, int *frac_len, unsigned char *si)
+read_number(struct bwstring *s0, int *sign, wchar_t *smain, size_t *main_len, wchar_t *sfrac, size_t *frac_len, unsigned char *si)
 {
 	bwstring_iterator s;
 
@@ -711,7 +711,7 @@ read_number(struct bwstring *s0, int *si
 	while (iswblank(bws_get_iter_value(s)))
 		s = bws_iterator_inc(s, 1);
 
-	if (bws_get_iter_value(s) == symbol_negative_sign) {
+	if (bws_get_iter_value(s) == (wchar_t)symbol_negative_sign) {
 		*sign = -1;
 		s = bws_iterator_inc(s, 1);
 	}
@@ -727,7 +727,7 @@ read_number(struct bwstring *s0, int *si
 			s = bws_iterator_inc(s, 1);
 			*main_len += 1;
 		} else if (symbol_thousands_sep &&
-		    (bws_get_iter_value(s) == symbol_thousands_sep))
+		    (bws_get_iter_value(s) == (wchar_t)symbol_thousands_sep))
 			s = bws_iterator_inc(s, 1);
 		else
 			break;
@@ -735,7 +735,7 @@ read_number(struct bwstring *s0, int *si
 
 	smain[*main_len] = 0;
 
-	if (bws_get_iter_value(s) == symbol_decimal_point) {
+	if (bws_get_iter_value(s) == (wchar_t)symbol_decimal_point) {
 		s = bws_iterator_inc(s, 1);
 		while (iswdigit(bws_get_iter_value(s)) &&
 		    *frac_len < MAX_NUM_SIZE) {
@@ -798,7 +798,8 @@ numcoll_impl(struct key_value *kv1, stru
 	struct bwstring *s1, *s2;
 	wchar_t sfrac1[MAX_NUM_SIZE + 1], sfrac2[MAX_NUM_SIZE + 1];
 	wchar_t smain1[MAX_NUM_SIZE + 1], smain2[MAX_NUM_SIZE + 1];
-	int cmp_res, frac1, frac2, main1, main2, sign1, sign2;
+	int cmp_res, sign1, sign2;
+	size_t frac1, frac2, main1, main2;
 	unsigned char SI1, SI2;
 	bool e1, e2, key1_read, key2_read;
 

Modified: head/usr.bin/sort/coll.h
==============================================================================
--- head/usr.bin/sort/coll.h	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/coll.h	Thu Nov  1 11:38:34 2012	(r242430)
@@ -133,12 +133,12 @@ extern struct key_specs *keys;
 extern size_t keys_num;
 
 /*
- * Main localised symbols
+ * Main localised symbols. These must be wint_t as they may hold WEOF.
  */
-extern wchar_t symbol_decimal_point;
-extern wchar_t symbol_thousands_sep;
-extern wchar_t symbol_negative_sign;
-extern wchar_t symbol_positive_sign;
+extern wint_t symbol_decimal_point;
+extern wint_t symbol_thousands_sep;
+extern wint_t symbol_negative_sign;
+extern wint_t symbol_positive_sign;
 
 /* funcs */
 

Modified: head/usr.bin/sort/file.c
==============================================================================
--- head/usr.bin/sort/file.c	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/file.c	Thu Nov  1 11:38:34 2012	(r242430)
@@ -229,7 +229,7 @@ read_file0_line(struct file0_reader *f0r
 char *
 new_tmp_file_name(void)
 {
-	static unsigned int tfcounter = 0;
+	static size_t tfcounter = 0;
 	static const char *fn = ".bsdsort.";
 	char *ret;
 	size_t sz;
@@ -237,7 +237,7 @@ new_tmp_file_name(void)
 	sz = strlen(tmpdir) + 1 + strlen(fn) + 32 + 1;
 	ret = sort_malloc(sz);
 
-	sprintf(ret, "%s/%s%d.%u", tmpdir, fn, (int) getpid(), tfcounter++);
+	sprintf(ret, "%s/%s%d.%lu", tmpdir, fn, (int) getpid(), (unsigned long)(tfcounter++));
 	tmp_file_atexit(ret);
 	return (ret);
 }
@@ -300,7 +300,7 @@ file_list_clean(struct file_list *fl)
 
 	if (fl) {
 		if (fl->fns) {
-			int i;
+			size_t i;
 
 			for (i = 0; i < fl->count; i++) {
 				if (fl->fns[i]) {
@@ -345,7 +345,7 @@ sort_list_add(struct sort_list *l, struc
 		size_t indx = l->count;
 
 		if ((l->list == NULL) || (indx >= l->size)) {
-			int newsize = (l->size + 1) + 1024;
+			size_t newsize = (l->size + 1) + 1024;
 
 			l->list = sort_realloc(l->list,
 			    sizeof(struct sort_list_item*) * newsize);
@@ -439,7 +439,8 @@ check(const char *fn)
 	struct bwstring *s1, *s2, *s1disorder, *s2disorder;
 	struct file_reader *fr;
 	struct keys_array *ka1, *ka2;
-	int res, pos, posdisorder;
+	int res;
+	size_t pos, posdisorder;
 
 	s1 = s2 = s1disorder = s2disorder = NULL;
 	ka1 = ka2 = NULL;
@@ -979,7 +980,7 @@ file_header_close(struct file_header **f
  * Swap two array elements
  */
 static void
-file_header_swap(struct file_header **fh, int i1, int i2)
+file_header_swap(struct file_header **fh, size_t i1, size_t i2)
 {
 	struct file_header *tmp;
 
@@ -995,11 +996,11 @@ file_header_swap(struct file_header **fh
  * "Raises" last element to its right place
  */
 static void
-file_header_heap_swim(struct file_header **fh, int indx)
+file_header_heap_swim(struct file_header **fh, size_t indx)
 {
 
 	if (indx > 0) {
-		int parent_index;
+		size_t parent_index;
 
 		parent_index = (indx - 1) >> 1;
 
@@ -1015,16 +1016,16 @@ file_header_heap_swim(struct file_header
  * Sink the top element to its correct position
  */
 static void
-file_header_heap_sink(struct file_header **fh, int indx, int size)
+file_header_heap_sink(struct file_header **fh, size_t indx, size_t size)
 {
-	int left_child_index;
-	int right_child_index;
+	size_t left_child_index;
+	size_t right_child_index;
 
 	left_child_index = indx + indx + 1;
 	right_child_index = left_child_index + 1;
 
 	if (left_child_index < size) {
-		int min_child_index;
+		size_t min_child_index;
 
 		min_child_index = left_child_index;
 
@@ -1045,7 +1046,7 @@ file_header_heap_sink(struct file_header
  * Adds element to the "left" end
  */
 static void
-file_header_list_rearrange_from_header(struct file_header **fh, int size)
+file_header_list_rearrange_from_header(struct file_header **fh, size_t size)
 {
 
 	file_header_heap_sink(fh, 0, size);
@@ -1055,7 +1056,7 @@ file_header_list_rearrange_from_header(s
  * Adds element to the "right" end
  */
 static void
-file_header_list_push(struct file_header *f, struct file_header **fh, int size)
+file_header_list_push(struct file_header *f, struct file_header **fh, size_t size)
 {
 
 	fh[size++] = f;
@@ -1118,10 +1119,10 @@ file_header_read_next(struct file_header
  * Merge array of "files headers"
  */
 static void
-file_headers_merge(int fnum, struct file_header **fh, FILE *f_out)
+file_headers_merge(size_t fnum, struct file_header **fh, FILE *f_out)
 {
 	struct last_printed lp;
-	int i;
+	size_t i;
 
 	memset(&lp, 0, sizeof(lp));
 
@@ -1149,13 +1150,13 @@ file_headers_merge(int fnum, struct file
  * stdout.
  */
 static void
-merge_files_array(int argc, char **argv, const char *fn_out)
+merge_files_array(size_t argc, char **argv, const char *fn_out)
 {
 
 	if (argv && fn_out) {
 		struct file_header **fh;
 		FILE *f_out;
-		int i;
+		size_t i;
 
 		f_out = openfile(fn_out, "w");
 
@@ -1189,12 +1190,12 @@ shrink_file_list(struct file_list *fl)
 		return (0);
 	else {
 		struct file_list new_fl;
-		int indx = 0;
+		size_t indx = 0;
 
 		file_list_init(&new_fl, true);
 		while (indx < fl->count) {
 			char *fnew;
-			int num;
+			size_t num;
 
 			num = fl->count - indx;
 			fnew = new_tmp_file_name();
@@ -1203,7 +1204,7 @@ shrink_file_list(struct file_list *fl)
 				num = max_open_files - 1;
 			merge_files_array(num, fl->fns + indx, fnew);
 			if (fl->tmp) {
-				int i;
+				size_t i;
 
 				for (i = 0; i < num; i++)
 					unlink(fl->fns[indx + i]);
@@ -1379,7 +1380,7 @@ sub_list_cmp(struct sort_list *l1, struc
  * Swap two array elements
  */
 static void
-sub_list_swap(struct sort_list **sl, int i1, int i2)
+sub_list_swap(struct sort_list **sl, size_t i1, size_t i2)
 {
 	struct sort_list *tmp;
 
@@ -1395,11 +1396,11 @@ sub_list_swap(struct sort_list **sl, int
  * "Raises" last element to its right place
  */
 static void
-sub_list_swim(struct sort_list **sl, int indx)
+sub_list_swim(struct sort_list **sl, size_t indx)
 {
 
 	if (indx > 0) {
-		int parent_index;
+		size_t parent_index;
 
 		parent_index = (indx - 1) >> 1;
 
@@ -1415,16 +1416,16 @@ sub_list_swim(struct sort_list **sl, int
  * Sink the top element to its correct position
  */
 static void
-sub_list_sink(struct sort_list **sl, int indx, int size)
+sub_list_sink(struct sort_list **sl, size_t indx, size_t size)
 {
-	int left_child_index;
-	int right_child_index;
+	size_t left_child_index;
+	size_t right_child_index;
 
 	left_child_index = indx + indx + 1;
 	right_child_index = left_child_index + 1;
 
 	if (left_child_index < size) {
-		int min_child_index;
+		size_t min_child_index;
 
 		min_child_index = left_child_index;
 
@@ -1445,7 +1446,7 @@ sub_list_sink(struct sort_list **sl, int
  * Adds element to the "right" end
  */
 static void
-sub_list_push(struct sort_list *s, struct sort_list **sl, int size)
+sub_list_push(struct sort_list *s, struct sort_list **sl, size_t size)
 {
 
 	sl[size++] = s;

Modified: head/usr.bin/sort/file.h
==============================================================================
--- head/usr.bin/sort/file.h	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/file.h	Thu Nov  1 11:38:34 2012	(r242430)
@@ -65,8 +65,8 @@ struct file_reader;
 struct file_list
 {
 	char			**fns;
-	int			 count;
-	int			 sz;
+	size_t			 count;
+	size_t			 sz;
 	bool			 tmp;
 };
 

Modified: head/usr.bin/sort/radixsort.c
==============================================================================
--- head/usr.bin/sort/radixsort.c	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/radixsort.c	Thu Nov  1 11:38:34 2012	(r242430)
@@ -203,7 +203,7 @@ pop_ls_mt(void)
 }
 
 static void
-add_to_sublevel(struct sort_level *sl, struct sort_list_item *item, int indx)
+add_to_sublevel(struct sort_level *sl, struct sort_list_item *item, size_t indx)
 {
 	struct sort_level *ssl;
 

Modified: head/usr.bin/sort/sort.c
==============================================================================
--- head/usr.bin/sort/sort.c	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/sort.c	Thu Nov  1 11:38:34 2012	(r242430)
@@ -117,7 +117,7 @@ static bool print_symbols_on_debug;
 /*
  * Arguments from file (when file0-from option is used:
  */
-static int argc_from_file0 = -1;
+static size_t argc_from_file0 = (size_t)-1;
 static char **argv_from_file0;
 
 /*
@@ -244,9 +244,9 @@ read_fns_from_file0(const char *fn)
 			char *line = read_file0_line(&f0r);
 
 			if (line && *line) {
+				if (argc_from_file0 == (size_t)-1)
+					argc_from_file0 = 0;
 				++argc_from_file0;
-				if (argc_from_file0 < 1)
-					argc_from_file0 = 1;
 				argv_from_file0 = sort_realloc(argv_from_file0,
 				    argc_from_file0 * sizeof(char *));
 				if (argv_from_file0 == NULL)
@@ -1221,7 +1221,7 @@ main(int argc, char **argv)
 		ks->sm.func = get_sort_func(&(ks->sm));
 	}
 
-	if (argc_from_file0 >= 0) {
+	if (argv_from_file0) {
 		argc = argc_from_file0;
 		argv = argv_from_file0;
 	}

Modified: head/usr.bin/sort/sort.h
==============================================================================
--- head/usr.bin/sort/sort.h	Thu Nov  1 09:38:28 2012	(r242429)
+++ head/usr.bin/sort/sort.h	Thu Nov  1 11:38:34 2012	(r242430)
@@ -77,7 +77,7 @@ extern MD5_CTX md5_ctx;
  */
 struct sort_opts
 {
-	wchar_t		field_sep;
+	wint_t		field_sep;
 	int		sort_method;
 	bool		cflag;
 	bool		csilentflag;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211011138.qA1BcYxU082884>