[Top][All Lists]
[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
torture-results.tar.gz
Description: application/tgz