Summary: 0001591: inconsistent behavior of sort -z

URL: http://busybox.net/bugs/view.php?id=1591
http://www.busybox.net/cgi-bin/viewcvs.cgi/trunk/busybox/coreutils/sort.c?rev=21004&r1=20435&r2=21004&makepatch=1&diff_format=u

Description:

busybox sort -z does:
use NUL instead of EOL on input

GNU sort -z does:
use NUL instead of EOL on input and output

GNU sort -z documents:
use NUL instead of EOL on input

Additional Information:

Note that sort -z is not part of any standard. But several applications
(e. g. GNU findutils updatedb) depends on the NUL-on-output behavior.

GNU sort documentation bug was reported to coreutils maintainers.

Notes: 

vda 02-13-08 06:30 (0004364)
Fixed in revision 21004. Thanks!

--- busybox/coreutils/sort.c	2007/11/16 12:39:16	20435
+++ busybox/coreutils/sort.c	2008/02/13 14:30:33	21004
@@ -32,7 +32,7 @@
 	FLAG_u  = 8,            /* Unique */
 	FLAG_c  = 0x10,         /* Check: no output, exit(!ordered) */
 	FLAG_s  = 0x20,         /* Stable sort, no ascii fallback at end */
-	FLAG_z  = 0x40,         /* Input is null terminated, not \n */
+	FLAG_z  = 0x40,         /* Input and output is NUL terminated, not \n */
 /* These can be applied to search keys, the previous four can't */
 	FLAG_b  = 0x80,         /* Ignore leading blanks */
 	FLAG_r  = 0x100,        /* Reverse */
@@ -396,8 +396,9 @@
 		if (linecount) linecount = flag+1;
 	}
 	/* Print it */
+	flag = (option_mask32 & FLAG_z) ? '\0' : '\n';
 	for (i = 0; i < linecount; i++)
-		fprintf(outfile, "%s\n", lines[i]);
+		fprintf(outfile, "%s%c", lines[i], flag);
 
 	fflush_stdout_and_exit(EXIT_SUCCESS);
 }
