How to work around a missing library function?

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

 



I have some source code

http://magma.maths.usyd.edu.au/~watkins/sympow.tar.bz2

which will not build on an old release of HP-UX as this lacks the atoll() (convert string to a long long) library function.

It is relatively easy to test for this in a configure script. I also found on the web a 10-line bit of code, which implements my_atoll()

http://p2p.wrox.com/c-programming/16319-string-long-long-without-using-atoll.html

in a way which works on older HP-UX releases.

I'm reluctant to use this code on every OS, as its not my code, and the author might not like that, as this does no error checking. But it would be good to implement it when atoll() is not in the library.

I was thinking of:

1) Changing the code from isomg atoll() to using my_atoll()

2) Having in configure.ac

AC_CHECK_FUNC (atoll, [], [])

3)Having something like the following in the source code. I think the 'AC_CHECK_FUNC' will have defined HAVE_ATOLL, though I might be wrong on that.


#ifdef HAVE_ATOLL
long long my_atoll(char *instr){
  return atoll(instr);
}

#else
long long my_atoll(char *instr)
{
  long long retval;
  int i;

  retval = 0;
  for (; *instr; instr++) {
    retval = 10*retval + (*instr - '0');
  }
  return retval;
}
#fi

Is it as simple as that, or am I missing something? How would that be improved - I somewhat doubt my method is optimal.


Dave


_______________________________________________
Autoconf mailing list
Autoconf@xxxxxxx
http://lists.gnu.org/mailman/listinfo/autoconf

[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux