Re: vibsam patches & problems

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

 



Thank you ver much for this detailed report.

I'll recheck those issue when working on a next "official" VBISAM which
is planned for end of this year and include all the good work put in by
different people before.

I *guess* the patched version published by Ron in the GnuCOBOL
discussion boards have those issues fixed already, but until a new
"official" version is out your report may help someone that wants to
build VBISAM with the base of the the official 2.0 tarball.

Simon

Am 24.06.2020 um 01:16 schrieb James K. Lowden:
> This afternoon I built vbisam from the tarball maintained on
> SourceForge.  The build platform is macOS, but for reasons unclear it
> compiled with gcc.  Perhaps something to do with libtool.
>
> The build produced a few warnings that I fixed, and a few that sure
> look to me like logic errors that someone familar with the code
> would like to scrutinize.
>
> 2 Changes:
>
> 	1.  must be a logical error
> 	2.  simple oversight on a 32-bit machine
>
> diff -u
> libvbisam/vblowlevel.c /Users/jklowden/projects/3/vbisam-2.0/libvbisam/vblowlevel.c
> --- libvbisam/vblowlevel.c      2008-08-28 10:03:52.000000000 -0400
> +++ /Users/jklowden/projects/3/vbisam-2.0/libvbisam/vblowlevel.c
> 2020-06-23 18:30:39.000000000 -0400 @@ -39,7 +39,7 @@
>                 iinitialized = 1;
>         }
>         if (stat (pcfilename, &sstat)) {
> -               if (!iflags & O_CREAT) {
> +               if (!(iflags & O_CREAT)) {
>                         return -1;
>                 }
>         } else {
> diff -u
> libvbisam/vbmemio.c /Users/jklowden/projects/3/vbisam-2.0/libvbisam/vbmemio.c
> --- libvbisam/vbmemio.c 2008-08-28 13:03:23.000000000 -0400
> +++ /Users/jklowden/projects/3/vbisam-2.0/libvbisam/vbmemio.c
> 2020-06-23 18:30:39.000000000 -0400 @@ -48,7 +48,7 @@
>
>         mptr = calloc (1, size);
>         if (unlikely(!mptr)) {
> -               fprintf (stderr, "Cannot allocate %d bytes of memory -
> Aborting\n", size);
> +               fprintf (stderr, "Cannot allocate %zu bytes of memory -
> Aborting\n", size); fflush (stderr);
>                 exit (1);
>         }
>
>
> Other warnings (3):
>
> ../../libvbisam/isdecimal.c:377:10: warning: implicit conversion from
> 'long' to 'int' changes value from 2147483648 to -2147483648
> [-Wconstant-conversion]
> *ip = VAL_DECPOSNULL (int);
>
>
> VAL_DECPOSNULL is:
>
> #define VAL_DECPOSNULL(type)	(1L << ((sizeof (type) * 8) - 1))
>
> Because it starts with 1L, it returns a long with bit 32 set.  When
> assigned to an int (as the warning states), the positive value becomes
> negative because it's the high bit of the assigned integer.
>
> On a 32-bit machine, long and int were usually the same size, and no
> warning would have been warranted.
>
> I think safest would be:
>
> #define VAL_DECPOSNULL(type)	\
> 	( ((type)1) << ((sizeof (type) * 8) - 1) )
>
>
>
> --
> ../../libvbisam/vbnodememio.c:497:45: warning: use of logical '&&' with
> constant operand [-Wconstant-logical-operand]
> if (pskey->iishigh && pskeydesc->k_flags && LCOMPRESS) {
>
> LCOMPRESS is defined as
>
> #define	LCOMPRESS	0x04	/* Leading compression */
>
> so the logical && is meaningless.  I think the intention is
>
> if (pskey->iishigh && (pskeydesc->k_flags & LCOMPRESS)) {
>
> but the result is different, perhaps surprising logic.  Instead of any
> value of k_flags making the expression true, it must have the LCOMPRESS
> bit set.
>
>
> --
> ../../libvbisam/vbnodememio.c:501:28: warning: use of logical '&&' with
> constant operand [-Wconstant-logical-operand]
> if (pskeydesc->k_flags && TCOMPRESS) {
>
> Similar to previous: should be bitwise &, but result is new logic.
>
> --jkl
>





[Index of Archives]     [Gcc Help]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Info]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux