[OSRS-PROJ] On Proj4...
Karl Swartz
karl at kls2.com
Thu May 30 15:22:47 EDT 2002
> The problem was that strtod("15d10") on VC++ treated the value as 15 times
> 10 to the exponent 10 (scientific notation). The values like "15d10" are
> common in DMS specific inputs. The problem with replacing it with my
> own implementation is I don't know how widely the custom strtod() is used,
> and hence how much of the full strtod() functionality needs to be
> replicated.
If that's the issue, and if callers don't require the const storage
class on the first argument (which is unlikely to be an issue), why
not put a wrapper around the library one which just masks that issue?
I haven't looked at the PROJ.4 code in ages, but something like this
in a .h file used by everyone
#define strtod(nptr, endptr) strtod_wrapper((nptr)), ((endptr))
double
strtod_wrapper(/* const */ char *nptr, char **endptr)
and then wherever the current GPV-infested strtod() is located
#undef strtod(nptr, endptr)
double
strtod_wrapper(/* const */ char *nptr, char **endptr)
{
char c, *cp = nptr;
double result;
/*
/* Scan for characters which cause problems with VC++ strtod()
*/
while ((c = *cp) != '\0') {
if (c == 'd' || c == 'D') {
/*
/* Found one, so NUL it out, call strtod(),
/* then restore it and return
*/
*cp = '\0';
result = strtod(nptr, endptr);
*cp = c;
return result;
}
++cp;
}
/*
/* Nothing troublesome found, so just call the library function
*/
return strtod(nptr, endptr);
}
--
Karl Swartz |Home karl at kls2.com http://www.kls2.com/~karl/
|Work karl at quartetns.com http://www.quartetns.com/
"The average dog is a nicer person than the average person."
- Andrew A. Rooney
----------------------------------------
PROJ.4 Discussion List
See http://www.remotesensing.org/proj for subscription, unsubscription
and other information.
More information about the Proj
mailing list