From 197c86e765ba48174809b01849576b688f41db63 Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Thu, 12 Feb 2015 19:16:46 +0100 Subject: Added test to dist. --- Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index c2579ee..84bcaa7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ AUTOMAKE_OPTIONS = gnu -SUBDIRS = plugingui tools include src vst lv2 drumgizmo man -DISTDIRS = plugingui tools include src vst lv2 drumgizmo man +SUBDIRS = plugingui tools include src vst lv2 drumgizmo man test +DISTDIRS = plugingui tools include src vst lv2 drumgizmo man test EXTRA_DIST = \ version.h \ -- cgit v1.2.3 From 447d87649811caa7ddd55940300fbe25b0336cfc Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Thu, 12 Feb 2015 19:21:57 +0100 Subject: Moved zitaflags to only be set if zita-resampler is present (and enabled). --- configure.ac | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 070677c..066046d 100644 --- a/configure.ac +++ b/configure.ac @@ -371,8 +371,6 @@ AS_IF([test x$enable_resampler != xno], CFLAGS="$tmp_CFLAGS" LDFLAGS="$tmp_LDFLAGS" LIBS="$tmp_LIBS" - AC_SUBST(ZITA_CPPFLAGS) - AC_SUBST(ZITA_LIBS) AC_LANG_POP([C++])] )] ) @@ -390,8 +388,10 @@ AS_IF([test x$enable_resampler == xauto], AS_IF([test x$enable_resampler == xzita], [AS_IF([test x$has_zita == xyes], - [AC_DEFINE(USE_ZITA, [], [zita-resampler is present])], - + [AC_DEFINE(USE_ZITA, [], [zita-resampler is present]) + AC_SUBST(ZITA_CPPFLAGS) + AC_SUBST(ZITA_LIBS) + ], [AC_MSG_ERROR([*** zita-resampler library or headers not found. Set ZITA_LDFLAGS or ZITA_CPPFLAGS to add searchpath.])] )] ) -- cgit v1.2.3 From 1f12a44a6543e344f8bdba1812ebf0f7c694ff79 Mon Sep 17 00:00:00 2001 From: Lars Bisballe Jensen Date: Thu, 12 Feb 2015 21:25:26 +0100 Subject: EXAMPLES section is wrong, but everything else should be correct --- man/drumgizmo.1 | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/man/drumgizmo.1 b/man/drumgizmo.1 index 36968fd..3472ddc 100644 --- a/man/drumgizmo.1 +++ b/man/drumgizmo.1 @@ -15,7 +15,7 @@ DrumGizmo uses an open drumkit file format, allowing the community to create the .SH "OPTIONS" .TP \fB-p, --preload -Load entire kit audio files into memory (uses ALOT of memory). +Load entire kit audio files into memory (uses A LOT of memory). .TP \fB-i, --inputengine \fR{dummy|test|jackmidi|midifile} Use said event input engine. @@ -23,12 +23,55 @@ Use said event input engine. \fB-I, --inputparms parmlist Set input engine parameters. .TP -\fB-o, --outputengine \fR{dummy|alsa|jack|sndfile} +.SS +\fBjackmidi: +midimap= +.TP +.SS +\fBmidifile: +file=, speed= (default 1.0) +.br +track= (default -1, all tracks) +.br +midimap=, loop= +.TP +.SS +\fBtest: +p= (default 0.1) +.br +instr= (default -1, random instrument) +.br +len= (default -1, forever) +.TP +.SS +\fBdummy: +.TP +\fB-o, --outputengine \fR{dummy|alsa|jackaudio|wavfile} Use said audio output engine. .TP \fB-O, --outputparms parmlist Set output engine parameters. .TP +.SS +\fBalsa: +dev= (default 'default') +.br +frames= (default 32) +.br +srate= (default 441000) +.TP +.SS +\fBwavfile: +file= (default 'output') +.br +srate= (default 44100) +.TP +.SS +\fBjackaudio: +.TP +.SS +\fBdummy: +.TP \fB-e, --endpos Number of samples to process, -1: infinite. .TP @@ -40,6 +83,14 @@ Print command line help and exit. .TP \fB\fIdrumkitfile Load the drumkitfile. +.El +.Sh "EXAMPLES" +Render midifile to wav files: +.Bb -literal -offset indent -compact +drumgizmo -p -i midifile -I file=file.mid,midimap=midimap.xml -o wavfile -O file=file.wav drumkit.xml +.Ed +Recieve midi from Jack and send audio output to speakers: +drumgizmo -p -i jackmidi -I midimap=midimap.xml -o jackaudio drumkit.xml .SH "BUGS" Report bugs to http://www.drumgizmo.org/wiki/doku.php?id=bugs. -- cgit v1.2.3 From b41f42da60cdd5b4b6b376a49f18e8ebfc9bda0f Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Thu, 12 Feb 2015 21:35:16 +0100 Subject: Make sure that we don't link with resampler libraries that we are not using. --- configure.ac | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 066046d..1e8b1ea 100644 --- a/configure.ac +++ b/configure.ac @@ -371,6 +371,8 @@ AS_IF([test x$enable_resampler != xno], CFLAGS="$tmp_CFLAGS" LDFLAGS="$tmp_LDFLAGS" LIBS="$tmp_LIBS" + AC_SUBST(ZITA_CPPFLAGS) + AC_SUBST(ZITA_LIBS) AC_LANG_POP([C++])] )] ) @@ -389,8 +391,8 @@ AS_IF([test x$enable_resampler == xauto], AS_IF([test x$enable_resampler == xzita], [AS_IF([test x$has_zita == xyes], [AC_DEFINE(USE_ZITA, [], [zita-resampler is present]) - AC_SUBST(ZITA_CPPFLAGS) - AC_SUBST(ZITA_LIBS) + SAMPLERATE_CFLAGS="" + SAMPLERATE_LIBS="" ], [AC_MSG_ERROR([*** zita-resampler library or headers not found. Set ZITA_LDFLAGS or ZITA_CPPFLAGS to add searchpath.])] )] @@ -398,8 +400,10 @@ AS_IF([test x$enable_resampler == xzita], AS_IF([test x$enable_resampler == xsrc], [AS_IF([test x$has_src == xyes], - [AC_DEFINE(USE_SRC, [], [libsamplerate is present])], - + [AC_DEFINE(USE_SRC, [], [libsamplerate is present]) + ZITA_CPPFLAGS="" + ZITA_LIBS="" + ], [AC_MSG_ERROR([*** Missing libsamplerate.])] )] ) -- cgit v1.2.3 From 820f477ca00a01354b4a832b5e213df2b74baaa8 Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Thu, 12 Feb 2015 21:36:37 +0100 Subject: Always generate test/Makefile. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 1e8b1ea..4b2e4db 100644 --- a/configure.ac +++ b/configure.ac @@ -88,7 +88,6 @@ AC_ARG_WITH([test], AS_IF([test x$with_test == xyes], [AC_MSG_WARN([*** Building unittests!]) AM_PATH_CPPUNIT(1.9.6) - AC_CONFIG_FILES(test/Makefile)] ) dnl ====================== @@ -542,6 +541,7 @@ AC_CONFIG_FILES( plugingui/Makefile include/Makefile man/Makefile + test/Makefile drumgizmo/Makefile drumgizmo/input/Makefile drumgizmo/input/dummy/Makefile -- cgit v1.2.3 From 1971b7c898f710df4d66e0a70e2ec707ab6e18fd Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Thu, 12 Feb 2015 21:41:19 +0100 Subject: Fixed missing end bracket. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 4b2e4db..03a8c31 100644 --- a/configure.ac +++ b/configure.ac @@ -87,7 +87,7 @@ AC_ARG_WITH([test], AS_IF([test x$with_test == xyes], [AC_MSG_WARN([*** Building unittests!]) - AM_PATH_CPPUNIT(1.9.6) + AM_PATH_CPPUNIT(1.9.6)] ) dnl ====================== -- cgit v1.2.3 From aec6b3361b3de8391177261469da6edafd39a080 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 12:56:43 +0100 Subject: Fix locale sensitive float parsing/printing. --- src/Makefile.am | 1 + src/drumgizmo.cc | 6 ++-- src/instrumentparser.cc | 8 +++-- src/nolocale.h | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 src/nolocale.h diff --git a/src/Makefile.am b/src/Makefile.am index b9b0aae..df9f4ca 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -23,6 +23,7 @@ EXTRA_DIST = \ midimapparser.h \ midimapper.h \ mutex.h \ + nolocale.h \ path.h \ powerlist.h \ rangemap.h \ diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index 6b48cda..5d7de70 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -43,6 +43,8 @@ #include "configuration.h" #include "configparser.h" +#include "nolocale.h" + DrumGizmo::DrumGizmo(AudioOutputEngine *o, AudioInputEngine *i) : MessageReceiver(MSGRCV_ENGINE), loader(), oe(o), ie(i) @@ -451,7 +453,7 @@ void DrumGizmo::setSamplerate(int samplerate) std::string float2str(float a) { char buf[256]; - sprintf(buf, "%f", a); + snprintf_nol(buf, sizeof(buf) - 1, "%f", a); return buf; } @@ -463,7 +465,7 @@ std::string bool2str(bool a) float str2float(std::string a) { if(a == "") return 0.0; - return atof(a.c_str()); + return atof_nol(a.c_str()); } std::string DrumGizmo::configString() diff --git a/src/instrumentparser.cc b/src/instrumentparser.cc index 0889d74..1f25bc7 100644 --- a/src/instrumentparser.cc +++ b/src/instrumentparser.cc @@ -33,6 +33,8 @@ #include "path.h" +#include "nolocale.h" + InstrumentParser::InstrumentParser(const std::string &file, Instrument &i) : instrument(i) { @@ -84,7 +86,7 @@ void InstrumentParser::startTag(std::string name, if(attr.find("power") == attr.end()) { power = -1; } else { - power = atof(attr["power"].c_str()); + power = atof_nol(attr["power"].c_str()); DEBUG(instrparser, "Instrument power set to %f\n", power); } @@ -136,8 +138,8 @@ void InstrumentParser::startTag(std::string name, return; } - lower = atof(attr["lower"].c_str()); - upper = atof(attr["upper"].c_str()); + lower = atof_nol(attr["lower"].c_str()); + upper = atof_nol(attr["upper"].c_str()); } if(name == "sampleref") { diff --git a/src/nolocale.h b/src/nolocale.h new file mode 100644 index 0000000..ac83dda --- /dev/null +++ b/src/nolocale.h @@ -0,0 +1,85 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * nolocale.h + * + * Fri Feb 13 12:48:10 CET 2015 + * Copyright 2015 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#ifndef __DRUMGIZMO_NOLOCALE_H__ +#define __DRUMGIZMO_NOLOCALE_H__ + +#include +#include + +static inline double atof_nol(const char *nptr) +{ + double res; + locale_t new_locale, prev_locale; + + new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); + prev_locale = uselocale(new_locale); + + res = atof(nptr); + + uselocale(prev_locale); + freelocale(new_locale); + + return res; +} + +static inline int sprintf_nol(char *str, const char *format, ...) +{ + locale_t new_locale, prev_locale; + + new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); + prev_locale = uselocale(new_locale); + + va_list vl; + va_start(vl, format); + int ret = vsprintf(str, format, vl); + va_end(vl); + + uselocale(prev_locale); + freelocale(new_locale); + + return ret; +} + +static inline int snprintf_nol(char *str, size_t size, const char *format, ...) +{ + locale_t new_locale, prev_locale; + + new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); + prev_locale = uselocale(new_locale); + + va_list vl; + va_start(vl, format); + int ret = vsnprintf(str, size, format, vl); + va_end(vl); + + uselocale(prev_locale); + freelocale(new_locale); + + return ret; +} + +#endif/*__DRUMGIZMO_NOLOCALE_H__*/ -- cgit v1.2.3 From 5be85a677f8f228614d8e449674c8fe3161b3d71 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 13:54:14 +0100 Subject: Possible win32 fix for missing locale_t type. --- src/nolocale.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/nolocale.h b/src/nolocale.h index ac83dda..f8a5303 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -30,6 +30,10 @@ #include #include +#ifdef WIN32 +typedef _locale_t locale_t; +#endif + static inline double atof_nol(const char *nptr) { double res; -- cgit v1.2.3 From 56dea4ff4571de433642ce397c199c021ee94f55 Mon Sep 17 00:00:00 2001 From: Lars Bisballe Jensen Date: Fri, 13 Feb 2015 14:28:07 +0100 Subject: Mismatch with expected option parms now fixed for jackaudio and wavfile. Was called jack and sndfile before --- drumgizmo/drumgizmoc.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index 61f8eaa..ce4d9e2 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -57,7 +57,7 @@ static const char usage_str[] = " -p, --preload Load entire kit audio files into memory (uses ALOT of memory).\n" " -i, --inputengine dummy|test|jackmidi|midifile Use said event input engine.\n" " -I, --inputparms parmlist Set input engine parameters.\n" -" -o, --outputengine dummy|alsa|jack|sndfile Use said audio output engine.\n" +" -o, --outputengine dummy|alsa|jackaudio|wavfile Use said audio output engine.\n" " -O, --outputparms parmlist Set output engine parameters.\n" " -e, --endpos Number of samples to process, -1: infinite.\n" " -v, --version Print version information and exit.\n" @@ -110,7 +110,7 @@ int main(int argc, char *argv[]) case 'o': outputengine = optarg; if(outputengine == "help") { - printf("Available output engines: alsa, jack, sndfile.\n"); + printf("Available output engines: alsa, jackaudio, wavfile.\n"); return 0; } break; -- cgit v1.2.3 From da2d01a87c911f0db602e8e4376bb485fdfc31f1 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 14:59:09 +0100 Subject: Possible win32 fix for missing locale_t type - part2. --- src/nolocale.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/src/nolocale.h b/src/nolocale.h index f8a5303..1b71ef2 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -30,13 +30,20 @@ #include #include -#ifdef WIN32 -typedef _locale_t locale_t; -#endif - static inline double atof_nol(const char *nptr) { double res; + +#ifdef WIN32 + + _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + + res = _atof_l(nptr, l); + + _free_locale(l); + +#else/*WIN32*/ + locale_t new_locale, prev_locale; new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); @@ -47,11 +54,28 @@ static inline double atof_nol(const char *nptr) uselocale(prev_locale); freelocale(new_locale); +#endif/*WIN32*/ + return res; } static inline int sprintf_nol(char *str, const char *format, ...) { + int ret; + +#ifdef WIN32 + + _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + + va_list vl; + va_start(vl, format); + ret = _vsprintf_l(str, format, vl, l); + va_end(vl); + + _free_locale(l); + +#else/*WIN32*/ + locale_t new_locale, prev_locale; new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); @@ -59,17 +83,34 @@ static inline int sprintf_nol(char *str, const char *format, ...) va_list vl; va_start(vl, format); - int ret = vsprintf(str, format, vl); + ret = vsprintf(str, format, vl); va_end(vl); uselocale(prev_locale); freelocale(new_locale); +#endif/*WIN32*/ + return ret; } static inline int snprintf_nol(char *str, size_t size, const char *format, ...) { + int ret; + +#ifdef WIN32 + + _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + + va_list vl; + va_start(vl, format); + ret = vsnprintf(str, size, format, vl, l); + va_end(vl); + + _free_locale(l); + +#else/*WIN32*/ + locale_t new_locale, prev_locale; new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); @@ -77,12 +118,14 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) va_list vl; va_start(vl, format); - int ret = vsnprintf(str, size, format, vl); + ret = vsnprintf(str, size, format, vl); va_end(vl); uselocale(prev_locale); freelocale(new_locale); +#endif/*WIN32*/ + return ret; } -- cgit v1.2.3 From 92abe7381596a5baaf62eec3e55172678ed1f1dd Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 15:07:25 +0100 Subject: Possible win32 fix for missing locale_t type - part3. --- src/nolocale.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nolocale.h b/src/nolocale.h index 1b71ef2..3d8d50d 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -36,7 +36,7 @@ static inline double atof_nol(const char *nptr) #ifdef WIN32 - _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + _locale_t l = _create_locale(LC_NUMERIC, "C"); res = _atof_l(nptr, l); @@ -65,7 +65,7 @@ static inline int sprintf_nol(char *str, const char *format, ...) #ifdef WIN32 - _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + _locale_t l = _create_locale(LC_NUMERIC, "C"); va_list vl; va_start(vl, format); @@ -100,7 +100,7 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) #ifdef WIN32 - _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + _locale_t l = _create_locale(LC_NUMERIC, "C"); va_list vl; va_start(vl, format); -- cgit v1.2.3 From cc4205dd6d9b6024d4bedf7e58abb1b73f276def Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 15:11:34 +0100 Subject: Possible win32 fix for missing locale_t type - part4. --- src/nolocale.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nolocale.h b/src/nolocale.h index 3d8d50d..18ae03f 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -104,7 +104,7 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) va_list vl; va_start(vl, format); - ret = vsnprintf(str, size, format, vl, l); + ret = vsnprintf_l(str, size, format, vl, l); va_end(vl); _free_locale(l); -- cgit v1.2.3 From 7a1136d0efdc71251104dd2f4cbbda03887e0e9d Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 15:14:27 +0100 Subject: Possible win32 fix for missing locale_t type - part5. --- src/nolocale.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nolocale.h b/src/nolocale.h index 18ae03f..59489cd 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -104,7 +104,7 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) va_list vl; va_start(vl, format); - ret = vsnprintf_l(str, size, format, vl, l); + ret = _vsnprintf_l(str, size, format, vl, l); va_end(vl); _free_locale(l); -- cgit v1.2.3 From f28bf71b7c105da7cd0a7db67e21bbceb5df8a1b Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 15:21:07 +0100 Subject: Possible win32 fix for missing locale_t type - part6 (this is getting a bit embarrasing...). --- src/nolocale.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nolocale.h b/src/nolocale.h index 59489cd..d61abbb 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -69,7 +69,7 @@ static inline int sprintf_nol(char *str, const char *format, ...) va_list vl; va_start(vl, format); - ret = _vsprintf_l(str, format, vl, l); + ret = _vsprintf_l(str, format, l, vl); va_end(vl); _free_locale(l); @@ -104,7 +104,7 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) va_list vl; va_start(vl, format); - ret = _vsnprintf_l(str, size, format, vl, l); + ret = _vsnprintf_l(str, size, format, l, vl); va_end(vl); _free_locale(l); -- cgit v1.2.3 From 3d695f697e7230f3b4fa8922847b20eae632226f Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 18:22:45 +0100 Subject: More portable way of switching locale. --- src/nolocale.h | 68 ++++++---------------------------------------------------- 1 file changed, 7 insertions(+), 61 deletions(-) diff --git a/src/nolocale.h b/src/nolocale.h index d61abbb..816dd9c 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -34,27 +34,11 @@ static inline double atof_nol(const char *nptr) { double res; -#ifdef WIN32 + const char *locale = setlocale(LC_NUMERIC, "C"); - _locale_t l = _create_locale(LC_NUMERIC, "C"); + res = atof(nptr); - res = _atof_l(nptr, l); - - _free_locale(l); - -#else/*WIN32*/ - - locale_t new_locale, prev_locale; - - new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); - prev_locale = uselocale(new_locale); - - res = atof(nptr); - - uselocale(prev_locale); - freelocale(new_locale); - -#endif/*WIN32*/ + setlocale(LC_NUMERIC, locale); return res; } @@ -63,33 +47,14 @@ static inline int sprintf_nol(char *str, const char *format, ...) { int ret; -#ifdef WIN32 - - _locale_t l = _create_locale(LC_NUMERIC, "C"); - - va_list vl; - va_start(vl, format); - ret = _vsprintf_l(str, format, l, vl); - va_end(vl); - - _free_locale(l); - -#else/*WIN32*/ - - locale_t new_locale, prev_locale; - - new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); - prev_locale = uselocale(new_locale); + const char *locale = setlocale(LC_NUMERIC, "C"); va_list vl; va_start(vl, format); ret = vsprintf(str, format, vl); va_end(vl); - uselocale(prev_locale); - freelocale(new_locale); - -#endif/*WIN32*/ + setlocale(LC_NUMERIC, locale); return ret; } @@ -98,33 +63,14 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) { int ret; -#ifdef WIN32 - - _locale_t l = _create_locale(LC_NUMERIC, "C"); - - va_list vl; - va_start(vl, format); - ret = _vsnprintf_l(str, size, format, l, vl); - va_end(vl); - - _free_locale(l); - -#else/*WIN32*/ - - locale_t new_locale, prev_locale; - - new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); - prev_locale = uselocale(new_locale); + const char *locale = setlocale(LC_NUMERIC, "C"); va_list vl; va_start(vl, format); ret = vsnprintf(str, size, format, vl); va_end(vl); - uselocale(prev_locale); - freelocale(new_locale); - -#endif/*WIN32*/ + setlocale(LC_NUMERIC, locale); return ret; } -- cgit v1.2.3