[Toybox] sort.c patch, was: Re: PM: code style, was: Re: New Subscriber

Frank Bergmann toybox at tuxad.com
Wed Feb 8 02:36:26 PST 2012


On Wed, Feb 08, 2012 at 09:00:10AM +0100, Frank Bergmann wrote:
> clone done. Patches submit to the list?
> My first make did throw the nasty "dereferencing type-punned pointer will
> break strict-aliasing rules". In sort.c you use TT.lines as char* and not
> char**.

Here's the stuff:

Repository:
Make generated/config.h from .config.
Compile toybox...
toys/sort.c: In function ‘sort_read’:
toys/sort.c:311: warning: dereferencing type-punned pointer will break strict-aliasing rules
[fwb at vdr toybox-cloned-1328632507]$ cd ../toybox

Local:
Make generated/config.h from .config.
Compile toybox...
[fwb at vdr toybox]$ ln -s toybox sort
[fwb at vdr toybox]$ echo -e '1\n2\n4\n3' >1
[fwb at vdr toybox]$ ./sort -c 1
sort: 1: Check line 3

[fwb at vdr toybox]$ diff -u ../toybox-cloned-1328632507/toys/sort.c toys/sort.c
--- ../toybox-cloned-1328632507/toys/sort.c     2012-02-07 17:35:07.000000000 +0100
+++ toys/sort.c 2012-02-07 17:37:41.000000000 +0100
@@ -308,7 +308,7 @@
         if (CFG_SORT_BIG && (toys.optflags&FLAG_c)) {
             int j = (toys.optflags&FLAG_u) ? -1 : 0;
 
-            if (TT.lines && compare_keys((char **)&TT.lines, &line)>j)
+            if (TT.lines && compare_keys((void *)&TT.lines, &line)>j)
                 error_exit("%s: Check line %d\n", name, TT.linecount);
             free(TT.lines);
             TT.lines = (char **)line;

Your last patch which maybe introduced the warning:
diff -r 87edfe8ae99e -r 9e7aaecf0683 toys/sort.c
--- a/toys/sort.c	Mon Feb 06 21:14:22 2012 -0600
+++ b/toys/sort.c	Tue Feb 07 00:31:37 2012 -0600
@@ -308,11 +308,9 @@
         if (CFG_SORT_BIG && (toys.optflags&FLAG_c)) {
             int j = (toys.optflags&FLAG_u) ? -1 : 0;
 
-            if (TT.linecount && compare_keys((char *)TT.lines,line)>j)
+            if (TT.lines && compare_keys((char **)&TT.lines, &line)>j)
                 error_exit("%s: Check line %d\n", name, TT.linecount);
-
-            if (TT.lines) free(TT.lines);
-            else TT.linecount = 0;
+            free(TT.lines);
             TT.lines = (char **)line;
         } else {
             if (!(TT.linecount&63))

-- 
EDV Frank Bergmann                           Tel.     05221-9249753
LPIC-3 Linux Professional                    Fax      05221-9249754
Pödinghauser Str. 5                          email    iservice at tuxad.com
32051 Herford                                USt-IdNr DE237314606

 1328697386.0


More information about the Toybox mailing list