POINT ONE

The logic to determine the MAXIMUM_FILENAME_LENGTH is broken

 the relevant code form the rexx sources 

#include <limits.h>
#include <stdio.h>

#if defined(PATH_MAX)
# define MAXIMUM_PATH_LENGTH PATH_MAX + 1
#elif defined(_POSIX_PATH_MAX)
# define MAXIMUM_PATH_LENGTH _POSIX_PATH_MAX + 1
#else
# define MAXIMUM_PATH_LENGTH
#endif

#if defined(FILENAME_MAX)
# define MAXIMUM_FILENAME_LENGTH FILENAME_MAX + 1
#elif defined(_MAX_FNAME)
# define MAXIMUM_FILENAME_LENGTH _MAX_FNAME + 1
#elif defined(_POSIX_NAME_MAX)
# define MAXIMUM_FILENAME_LENGTH _POSIX_NAME_MAX + 1
#else
# define MAXIMUM_FILENAME_LENGTH 256
#endif

int main() {
printf("MAXIMUM_PATH_LENGTH     %d\n", MAXIMUM_PATH_LENGTH);
printf("MAXIMUM_FILENAME_LENGTH %d\n", MAXIMUM_FILENAME_LENGTH);
return (0);
}


Gives 


    APPLE / FreeBSD / OpenBSD
    MAXIMUM_PATH_LENGTH     1025
    MAXIMUM_FILENAME_LENGTH 1025

    Fedora29/Debian9
    MAXIMUM_PATH_LENGTH     4097
    MAXIMUM_FILENAME_LENGTH 4097



The right coding 


#include <limits.h>
#include <stdio.h>

#if defined(PATH_MAX)
# define MAXIMUM_PATH_LENGTH PATH_MAX + 1
#elif defined(_POSIX_PATH_MAX)
# define MAXIMUM_PATH_LENGTH _POSIX_PATH_MAX + 1
#else
# define MAXIMUM_PATH_LENGTH 1025
#endif

#if defined(NAME_MAX)
# define MAXIMUM_FILENAME_LENGTH NAME_MAX + 1
#elif defined(_POSIX_NAME_MAX)
# define MAXIMUM_FILENAME_LENGTH _POSIX_NAME_MAX + 1
#else
# define MAXIMUM_FILENAME_LENGTH 256
#endif

int main() {
printf("MAXIMUM_PATH_LENGTH     %d\n", MAXIMUM_PATH_LENGTH);
printf("MAXIMUM_FILENAME_LENGTH %d\n", MAXIMUM_FILENAME_LENGTH);
return (0);
}


Returns 

Darwin/FreeBSD/OpenBSD  

MAXIMUM_PATH_LENGTH     1025
MAXIMUM_FILENAME_LENGTH 256


Debian9/Fedora29  

MAXIMUM_PATH_LENGTH     4097
MAXIMUM_FILENAME_LENGTH 256

Also the maximum path length should be defined to something
Or the build should be aborted

# define MAXIMUM_PATH_LENGTH 1025
Should be a reasonable value

The current
# define MAXIMUM_PATH_LENGTH
Results in 
/Users/enrico/ooRexx.svn.src/interpreter/platform/unix/SysFileSystem.hpp:85:49: 
error: expected expression
         MaximumPathLength = MAXIMUM_PATH_LENGTH,


POINT TWO

The utilisation of 

MaximumPathLength
MaximumFileNameLength
MAXIMUM_PATH_LENGTH
MAXIMUM_FILENAME_LENGTH
.rexxinfo~maxpathlength

Is consistently inconsistent ,
Sometime they are used as the length of the items 
Sometime they are used as the length of the buffer to be allocated

POINT THREE

It might be useful
To have also a  .rexxinfo~maxfilenamelength

POINT FOUR. 

Test:   TEST_REXXINFO_DATE

Given the current coding is likely to fail randomly

The dates are filled using the compiler builtin __DATE__

The two terms to be compared are build by different sources 

In an incremental build ( as per make/ninja logic ) 
the two sources might not be built at the same time resulting in the mismatch 

Just happened a few minutes ago 

POINT FIVE 

please run  - on a unix like system 

d  = copies("D",5000)
call sysmkdir(d)

f = copies("F",5000)
call lineout f , "a truckload of equine nitrogen waste”

o=.stream~new(f)
o~open("replace" )
o~lineout( "a truckload of equine nitrogen waste" )
o~close



This  just very small oversight 
has been there at least  since ooRexx-4.1.2
( could not test one previous versions ) 

To give You a hint … 
Nothing is told, nothing happens
The script runs happily without any error

Regina rexx nicely complains

DOES NOT DEPEND ON POINTS ONE/TWO 

E 

_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to