bug-recutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug-recutils] Re: recutils 1.1 and portability


From: Bruno Haible
Subject: [bug-recutils] Re: recutils 1.1 and portability
Date: Sun, 19 Dec 2010 16:57:38 +0100
User-agent: KMail/1.9.9

Hi José,

> You should be able to get it now.

Got it now.

1) Before portability testing, I usually do a compilation with
   ./configure CPPFLAGS=-Wall
on a glibc system. Results:

1.1) Portability problems of printf statements on platforms where
     'size_t' is larger than 'unsigned int':

rec-field.c: In function 'rec_field_set_location':
rec-field.c:255: warning: format '%d' expects type 'int', but argument 3 has 
type 'size_t'
rec-field.c: In function 'rec_field_set_char_location':
rec-field.c:293: warning: format '%d' expects type 'int', but argument 3 has 
type 'size_t'

rec-record.c: In function 'rec_record_set_location':
rec-record.c:782: warning: format '%d' expects type 'int', but argument 3 has 
type 'size_t'
rec-record.c: In function 'rec_record_set_char_location':
rec-record.c:821: warning: format '%d' expects type 'int', but argument 3 has 
type 'size_t'

rec-parser.c: In function 'rec_parser_perror':
rec-parser.c:180: warning: format '%d' expects type 'int', but argument 3 has 
type 'size_t'

rec-types.c: In function 'rec_type_check_size':
rec-types.c:955: warning: format '%d' expects type 'int', but argument 3 has 
type 'size_t'

Recommended workaround: If you are using gnulib *printf functions here,
then use "%zu" to print a size_t argument, or "%zd" for an ssize_t argument.
If not, then cast the argument to 'unsigned long', and use "%lu" in the format
string. You can assume that sizeof(size_t) <= sizeof(unsigned long).

1.2) Maintainability problems: If you modify the definition of a function
and forget to update some other source files, it will compile and BOOOM at
runtime.

rec-sex-parser.c: In function 'rec_sex_parser_new':
rec-sex-parser.c:65: warning: implicit declaration of function 'sexlex_init'
rec-sex-parser.c:66: warning: implicit declaration of function 'sexset_extra'
rec-sex-parser.c: In function 'rec_sex_parser_destroy':
rec-sex-parser.c:83: warning: implicit declaration of function 'sexlex_destroy'
rec-sex-parser.c: In function 'rec_sex_parser_run':
rec-sex-parser.c:152: warning: implicit declaration of function 'sexparse'

rec-sex-tab.c: In function 'sexparse':
rec-sex-tab.c:1398: warning: implicit declaration of function 'sexlex'

Recommended fix: Declare these 5 functions in .h files.

2) Test on MacOS X:

2.1)

rec.c:32:21: error: libintl.h: No such file or directory
rec.c: In function 'rec_init':
rec.c:39: warning: implicit declaration of function 'bindtextdomain'
make[2]: *** [rec.lo] Error 1

The reason is that there is no libintl.dylib and no <libintl.h> installed on
MacOS X by default.

Recommended fix: Request module 'gettext-h' from gnulib, and change all
occurrences of
  #include <libintl.h>
to
  #include "gettext.h"

2.2)

recutl.c: In function 'recutl_init':
recutl.c:60: warning: implicit declaration of function 'setlocale'
recutl.c:60: error: 'LC_ALL' undeclared (first use in this function)

Obvious fix: #include <locale.h>

2.3) Warnings:

rec-writer.c:152: warning: implicit declaration of function 'strdupa'
rec-writer.c:152: warning: assignment makes pointer from integer without a cast

Problem: strdupa() is glibc specific and relies on alloca().

Recommended workaround: Unless this code is very speed-critical, use
strdup() instead of strdupa(). Also take a deep look at the free(str)
statement in line 165. You should apply it to the string returned
by strdup(), not to a tail string of it (that's what strsep() changes it
to), otherwise you'll get a crash in that free() statement or later.

2.4) Warnings:

recutl.c:185: warning: passing argument 1 of 'recutl_fatal' discards qualifiers 
from pointer target type
recutl.c:223: warning: passing argument 1 of 'recutl_fatal' discards qualifiers 
from pointer target type
recutl.c:287: warning: passing argument 1 of 'recutl_fatal' discards qualifiers 
from pointer target type
recutl.c:330: warning: passing argument 1 of 'recutl_fatal' discards qualifiers 
from pointer target type
recutl.c:351: warning: passing argument 1 of 'recutl_fatal' discards qualifiers 
from pointer target type

Obvious fix: Change the first argument of 'recutl_fatal' from 'char *' to
'const char *'.

2.5) Test suite results:

5 of 6 tests failed

$ make check
Making check in .
make  check-TESTS
==================
All 0 tests passed
==================
Making check in utils
make  check-TESTS
Running recinf test(s): 
-n   recinf-empty 
-n fail
 (see recinf-empty.diff)
-n   recinf-one-record 
-n fail
 (see recinf-one-record.diff)
-n   recinf-multiple-records 
-n fail
 (see recinf-multiple-records.diff)
-n   recinf-multiple-named 
-n fail
 (see recinf-multiple-named.diff)
-n   recinf-multiple-named-descriptors 
-n fail
 (see recinf-multiple-named-descriptors.diff)
-n   recinf-multiple-types 
-n fail
 (see recinf-multiple-types.diff)
-n   recinf-names-only 
-n fail
 (see recinf-names-only.diff)
FAIL: recinf.sh
Running recsel test(s): 
-n   recsel-all-fields 
-n fail
 (see recsel-all-fields.diff)
-n   recsel-one-field 
-n fail
 (see recsel-one-field.diff)
-n   recsel-two-fields 
-n fail
 (see recsel-two-fields.diff)
-n   recsel-values 
-n fail
 (see recsel-values.diff)
-n   recsel-multiple-values 
-n fail
 (see recsel-multiple-values.diff)
-n   recsel-collapsed 
-n fail
 (see recsel-collapsed.diff)
-n   recsel-values-collapsed 
-n fail
 (see recsel-values-collapsed.diff)
-n   recsel-row 
-n fail
 (see recsel-row.diff)
-n   recsel-collapsed-row 
-n fail
 (see recsel-collapsed-row.diff)
-n   recsel-multi-all-fields 
-n fail
 (see recsel-multi-all-fields.diff)
-n   recsel-multi-values 
-n fail
 (see recsel-multi-values.diff)
-n   recsel-multi-collapsed-values 
-n fail
 (see recsel-multi-collapsed-values.diff)
-n   recsel-count 
-n fail
 (see recsel-count.diff)
-n   recsel-subs 
-n fail
 (see recsel-subs.diff)
-n   recsel-subs-2 
-n fail
 (see recsel-subs-2.diff)
-n   recsel-index 
-n fail
 (see recsel-index.diff)
-n   recsel-index 
-n fail
 (see recsel-index.diff)
-n   recsel-type 
-n fail
 (see recsel-type.diff)
-n   recsel-type-2 
-n fail
 (see recsel-type-2.diff)
-n   recsel-type-3 
-n fail
 (see recsel-type-3.diff)
-n   recsel-type-4 
-n fail
 (see recsel-type-4.diff)
-n   recsel-sex-field-names 
-n fail
 (see recsel-sex-field-names.diff)
-n   recsel-sex-field-names-2 
-n fail
 (see recsel-sex-field-names-2.diff)
-n   recsel-sex-integer-equal 
-n fail
 (see recsel-sex-integer-equal.diff)
-n   recsel-sex-integer-nonequal 
-n fail
 (see recsel-sex-integer-nonequal.diff)
-n   recsel-sex-integer-lessthan 
-n fail
 (see recsel-sex-integer-lessthan.diff)
-n   recsel-sex-integer-biggerthan 
-n fail
 (see recsel-sex-integer-biggerthan.diff)
-n   recsel-sex-integer-plus 
-n fail
 (see recsel-sex-integer-plus.diff)
-n   recsel-sex-integer-minus 
-n fail
 (see recsel-sex-integer-minus.diff)
-n   recsel-sex-integer-mul 
-n fail
 (see recsel-sex-integer-mul.diff)
-n   recsel-sex-integer-div 
-n fail
 (see recsel-sex-integer-div.diff)
-n   recsel-sex-integer-mod 
-n fail
 (see recsel-sex-integer-mod.diff)
-n   recsel-sex-integer-not 
-n fail
 (see recsel-sex-integer-not.diff)
-n   recsel-sex-integer-and 
-n fail
 (see recsel-sex-integer-and.diff)
-n   recsel-sex-integer-or 
-n fail
 (see recsel-sex-integer-or.diff)
-n   recsel-sex-real-equal 
-n fail
 (see recsel-sex-real-equal.diff)
-n   recsel-sex-real-nonequal 
-n fail
 (see recsel-sex-real-nonequal.diff)
-n   recsel-sex-real-lessthan 
-n fail
 (see recsel-sex-real-lessthan.diff)
-n   recsel-sex-real-biggerthan 
-n fail
 (see recsel-sex-real-biggerthan.diff)
-n   recsel-sex-real-plus 
-n fail
 (see recsel-sex-real-plus.diff)
-n   recsel-sex-real-mul 
-n fail
 (see recsel-sex-real-mul.diff)
-n   recsel-sex-sharp-zero 
-n fail
 (see recsel-sex-sharp-zero.diff)
-n   recsel-sex-sharp-one 
-n fail
 (see recsel-sex-sharp-one.diff)
-n   recsel-sex-sharp-multiple 
-n fail
 (see recsel-sex-sharp-multiple.diff)
-n   recsel-sex-match 
-n fail
 (see recsel-sex-match.diff)
-n   recsel-sex-date-sametime 
-n fail
 (see recsel-sex-date-sametime.diff)
-n   recsel-sex-date-before 
-n fail
 (see recsel-sex-date-before.diff)
-n   recsel-sex-date-after 
-n fail
 (see recsel-sex-date-after.diff)
FAIL: recsel.sh
Running recdel test(s): 
-n   recdel-first 
error: testutils: test_tool: running recdel.
-n   recdel-second 
error: testutils: test_tool: running recdel.
-n   recdel-last 
error: testutils: test_tool: running recdel.
-n   recdel-comment 
error: testutils: test_tool: running recdel.
-n   recdel-sex 
error: testutils: test_tool: running recdel.
-n   recdel-try-type 
xfail
-n   recdel-type 
error: testutils: test_tool: running recdel.
-n   recdel-request-all 
xfail
-n   recdel-force-all 
error: testutils: test_tool: running recdel.
PASS: recdel.sh
Running recins test(s): 
-n   recins-empty 
-n fail
 (see recins-empty.diff)
-n   recins-empty-with-type 
-n fail
 (see recins-empty-with-type.diff)
-n   recins-several-fields 
-n fail
 (see recins-several-fields.diff)
-n   recins-append 
-n fail
 (see recins-append.diff)
-n   recins-append-in-type 
-n fail
 (see recins-append-in-type.diff)
-n   recins-append-new-type 
-n fail
 (see recins-append-new-type.diff)
-n   recins-replace 
-n fail
 (see recins-replace.diff)
-n   recins-replace-sex 
-n fail
 (see recins-replace-sex.diff)
-n   recins-violate-restrictions 
error: testutils: test_tool: expected xfail running recins.
-n   recins-force-restrictions 
-n fail
 (see recins-force-restrictions.diff)
-n   recins-only-descriptor 
-n fail
 (see recins-only-descriptor.diff)
-n   recins-comments-and-descriptor 
-n fail
 (see recins-comments-and-descriptor.diff)
FAIL: recins.sh
Running recset test(s): 
-n   recset-append-field 
-n fail
 (see recset-append-field.diff)
-n   recset-set-field 
-n fail
 (see recset-set-field.diff)
-n   recset-delete-field 
-n fail
 (see recset-delete-field.diff)
-n   recset-comment-out-field 
-n fail
 (see recset-comment-out-field.diff)
-n   recset-delete-non-existant 
-n fail
 (see recset-delete-non-existant.diff)
-n   recset-comment-out-fex-first 
-n fail
 (see recset-comment-out-fex-first.diff)
-n   recset-comment-out-fex-last 
-n fail
 (see recset-comment-out-fex-last.diff)
-n   recset-violate-integrity 
error: testutils: test_tool: expected xfail running recset.
-n   recset-force-integrity 
-n fail
 (see recset-force-integrity.diff)
-n   recset-rename 
-n fail
 (see recset-rename.diff)
-n   recset-rename-first 
-n fail
 (see recset-rename-first.diff)
-n   recset-rename-middle 
-n fail
 (see recset-rename-middle.diff)
-n   recset-rename-last 
-n fail
 (see recset-rename-last.diff)
-n   recset-rename-range-first 
-n fail
 (see recset-rename-range-first.diff)
-n   recset-rename-range-last 
-n fail
 (see recset-rename-range-last.diff)
-n   recset-rename-range-all 
-n fail
 (see recset-rename-range-all.diff)
-n   recset-rename-all 
-n fail
 (see recset-rename-all.diff)
-n   recset-rename-all-descriptor 
-n fail
 (see recset-rename-all-descriptor.diff)
-n   recset-rename-all-key 
-n fail
 (see recset-rename-all-key.diff)
-n   recset-rename-invalid-fex 
xfail
FAIL: recset.sh
Running recfix test(s): 
-n   recfix-type-int-valid 
-n fail
 (see recfix-type-int-valid.diff)
-n   recfix-type-int-invalid 
error: testutils: test_tool: expected xfail running recfix.
-n   recfix-type-real-valid 
-n fail
 (see recfix-type-real-valid.diff)
-n   recfix-type-real-invalid 
error: testutils: test_tool: expected xfail running recfix.
-n   recfix-duplicated-keys 
error: testutils: test_tool: expected xfail running recfix.
-n   recfix-missing-mandatory 
error: testutils: test_tool: expected xfail running recfix.
-n   recfix-several-unique 
error: testutils: test_tool: expected xfail running recfix.
-n   recfix-referred-type 
-n fail
 (see recfix-referred-type.diff)
-n   recfix-hidden-type 
-n fail
 (see recfix-hidden-type.diff)
-n   recfix-ranges-ok 
-n fail
 (see recfix-ranges-ok.diff)
-n   recfix-ranges-xfail-1 
error: testutils: test_tool: expected xfail running recfix.
-n   recfix-ranges-xfail-2 
error: testutils: test_tool: expected xfail running recfix.
-n   recfix-one-rec 
-n fail
 (see recfix-one-rec.diff)
-n   recfix-multiple-rec-in-descriptor 
error: testutils: test_tool: expected xfail running recfix.
FAIL: recfix.sh
=====================================
5 of 6 tests failed
Please report to address@hidden
=====================================

Find attached a tar.gz file with the generated .diff files.

3) Test on FreeBSD 6.4:
4) Test on AIX 5.1:
5) Test on HP-UX 10.00:
6) Test on IRIX 6.5:
7) Test on Solaris 8:
8) Test on Tru64 (OSF/1 5.1):
9) Test on Cygwin 1.7:
10) Test on mingw:

Will do these later. Gimme a new snapshot that works better on MacOS X,
please.

Bruno

Attachment: torture-results.tar.gz
Description: application/tgz


reply via email to

[Prev in Thread] Current Thread [Next in Thread]