Re: Can not build wget-1.8 under SunOS-4.1.4

2001-12-16 Thread Hrvoje Niksic

Andre Majorel <[EMAIL PROTECTED]> writes:

> 5th edition, 6th edition, 7th edition and System III all returned
> 0-32767. As RAND_MAX didn't exist at the time, plenty of code must
> have been written that assumed 0-32767. For that reason I think it
> unlikely that anybody ever wrote an implementation of rand() that
> returned less than 0-32767.

But what if a rand() returns more than 0-32767?  Wget's use of rand()
would give incorrect results in that case because Wget uses:

int waitsecs = (double)waitmax * rand () / (RAND_MAX + 1.0);

But this could perhaps be remedied by explicitly limiting the result
of rand() to [0, RAND_MAX).  Something like:

#ifndef RAND_MAX
# define RAND_MAX 32767
#endif

int waitsecs = (double)waitmax * (rand () % (RAND_MAX + 1)) / (RAND_MAX + 1.0);

Or, even better, this could be done by a separate function with
smarter logic.  For example:

static int
random_number (int max)
{
  int rnd = rand ();

#ifndef RAND_MAX
# define RAND_MAX 32767
  rnd &= RAND_MAX;
#endif

  return (double)max * rnd / (RAND_MAX + 1.0);
}

This could also be extended to handle cases where MAX > RAND_MAX, in
which case it should combine the high bits from two calls to rand().



Re: Can not build wget-1.8 under SunOS-4.1.4

2001-12-16 Thread Andre Majorel

On 2001-12-16 19:02 +0100, Hrvoje Niksic wrote:
> Andre Majorel <[EMAIL PROTECTED]> writes:
> 
> > On 2001-12-15 07:37 +0100, Hrvoje Niksic wrote:
> > 
> >> Is there a good fallback value of RAND_MAX for systems that don't
> >> bother to define it?
> > 
> > The standard (SUS2) says :
> > 
> >   The value of the {RAND_MAX} macro will be at least 32767.
> 
> c9x says the same, but there is a subtle difference between statement
> and the information I actually need.  A SUS-conformant system will not
> present a problem because it will define RAND_MAX anyway.  The
> information I need is what RAND_MAX should fall back to on the
> "traditional" Unix systems that have rand(), but don't bother to
> define RAND_MAX.
> 
> Online SunOS manuals are not very helpful -- the one at
> 
> can't even seem to decide whether RAND_MAX is 2^31-1 or 2^15-1, and
> there is no mention of RAND_MAX or of an include file that might
> define it.

5th edition, 6th edition, 7th edition and System III all
returned 0-32767. As RAND_MAX didn't exist at the time, plenty
of code must have been written that assumed 0-32767. For that
reason I think it unlikely that anybody ever wrote an
implementation of rand() that returned less than 0-32767.

I believe that a default value of 32767 is safe. Not optimal,
but safe.

Apparently, not all 32-bit systems use 2**31 - 1 : according to
one clcm-er, MSVC defines RAND_MAX as 32767.

-- 
André Majorel
Work: <[EMAIL PROTECTED]>
Home: <[EMAIL PROTECTED]> http://www.teaser.fr/~amajorel/



Re: Can not build wget-1.8 under SunOS-4.1.4

2001-12-16 Thread Hrvoje Niksic

Andre Majorel <[EMAIL PROTECTED]> writes:

> On 2001-12-15 07:37 +0100, Hrvoje Niksic wrote:
> 
>> Is there a good fallback value of RAND_MAX for systems that don't
>> bother to define it?
> 
> The standard (SUS2) says :
> 
>   The value of the {RAND_MAX} macro will be at least 32767.

c9x says the same, but there is a subtle difference between statement
and the information I actually need.  A SUS-conformant system will not
present a problem because it will define RAND_MAX anyway.  The
information I need is what RAND_MAX should fall back to on the
"traditional" Unix systems that have rand(), but don't bother to
define RAND_MAX.

Online SunOS manuals are not very helpful -- the one at

can't even seem to decide whether RAND_MAX is 2^31-1 or 2^15-1, and
there is no mention of RAND_MAX or of an include file that might
define it.



Re: Can not build wget-1.8 under SunOS-4.1.4

2001-12-15 Thread Andre Majorel

On 2001-12-15 07:37 +0100, Hrvoje Niksic wrote:

> Is there a good fallback value of RAND_MAX for systems that don't
> bother to define it?

The standard (SUS2) says :

  The value of the {RAND_MAX} macro will be at least 32767.

-- 
André Majorel
Work: <[EMAIL PROTECTED]>
Home: <[EMAIL PROTECTED]> http://www.teaser.fr/~amajorel/



Re: Can not build wget-1.8 under SunOS-4.1.4

2001-12-14 Thread Hrvoje Niksic

Vin Shelton <[EMAIL PROTECTED]> writes:

> I have successfully built wget-1.8 under linux-2.4.xx (at home) and
> under SunOS-5.5, but under SunOS-4.1.4, I get a compile-time error:
> 
> ../../../../src/wget-1.8/src/retr.c:682: `RAND_MAX' undeclared (first use in this fun
> ction)
[...]
> Please let me know if there is more information you need.

Thanks for the report.  What I need is the value of RAND_MAX on SunOS,
or the name of the include file it's defined in.

Is there a good fallback value of RAND_MAX for systems that don't
bother to define it?