1bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul/*
2bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * Copyright 2010 VMware, Inc.
3bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * All Rights Reserved.
4bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul *
5bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
6bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * copy of this software and associated documentation files (the
7bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * "Software"), to deal in the Software without restriction, including
8bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * without limitation the rights to use, copy, modify, merge, publish,
9bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * distribute, sub license, and/or sell copies of the Software, and to
10bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * permit persons to whom the Software is furnished to do so, subject to
11bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * the following conditions:
12bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul *
13bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * The above copyright notice and this permission notice (including the
14bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * next paragraph) shall be included in all copies or substantial portions
15bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * of the Software.
16bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul *
17bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
21bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul */
25bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul
26bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul
27bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#include <stdlib.h>
28bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul
29bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#ifdef _GNU_SOURCE
30bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#include <locale.h>
31bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#ifdef __APPLE__
32bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#include <xlocale.h>
33bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#endif
34bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#endif
35bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul
36bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#include "strtod.h"
37bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul
38bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul
39bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul
40bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul/**
41bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * Wrapper around strtod which uses the "C" locale so the decimal
42bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul * point is always '.'
43bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul */
44bb10e081c8ddc452bca44ba583f239219a5b9372Brian Pauldouble
45bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paulglsl_strtod(const char *s, char **end)
46bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul{
47873f3ae92e1d8a17ea228b38b4c20346d54ae045Alexander von Gluck#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && \
48f35e380dd240b418e17a179af73bbab74ceea784Anthony G. Basile   !defined(__HAIKU__) && !defined(__UCLIBC__)
49bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul   static locale_t loc = NULL;
50bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul   if (!loc) {
51bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul      loc = newlocale(LC_CTYPE_MASK, "C", NULL);
52bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul   }
53bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul   return strtod_l(s, end, loc);
54bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#else
55bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul   return strtod(s, end);
56bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul#endif
57bb10e081c8ddc452bca44ba583f239219a5b9372Brian Paul}
58