Browse Source

Make ScopedLocale its own class, apply it everywhere that it fits

Signed-off-by: falkTX <falktx@gmail.com>
tags/v2.1-alpha2
falkTX 6 years ago
parent
commit
984a06ce50
10 changed files with 102 additions and 54 deletions
  1. +5
    -5
      source/backend/engine/CarlaEngineNative.cpp
  2. +8
    -5
      source/backend/plugin/CarlaPluginLV2.cpp
  3. +3
    -0
      source/bridges-ui/CarlaBridgeFormatLV2.cpp
  4. +7
    -5
      source/native-plugins/midi-pattern.cpp
  5. +2
    -1
      source/plugin/carla-lv2-ui.cpp
  6. +1
    -1
      source/plugin/carla-lv2.cpp
  7. +9
    -20
      source/utils/CarlaPipeUtils.cpp
  8. +0
    -15
      source/utils/CarlaPipeUtils.hpp
  9. +54
    -0
      source/utils/CarlaScopedLocale.hpp
  10. +13
    -2
      source/utils/CarlaString.hpp

+ 5
- 5
source/backend/engine/CarlaEngineNative.cpp View File

@@ -842,7 +842,7 @@ protected:
carla_zeroChars(tmpBuf, STR_MAX); carla_zeroChars(tmpBuf, STR_MAX);


{ {
const ScopedLocale csl;
const CarlaScopedLocale csl;
std::sprintf(tmpBuf, "%f\n", newSampleRate); std::sprintf(tmpBuf, "%f\n", newSampleRate);
} }


@@ -943,7 +943,7 @@ protected:
carla_zeroChars(tmpBuf, STR_MAX); carla_zeroChars(tmpBuf, STR_MAX);


const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());
const ScopedLocale csl;
const CarlaScopedLocale csl;


const uint pluginId(plugin->getId()); const uint pluginId(plugin->getId());


@@ -1191,7 +1191,7 @@ protected:
if (! fUiServer.writeMessage(tmpBuf)) if (! fUiServer.writeMessage(tmpBuf))
return; return;
{ {
const ScopedLocale csl;
const CarlaScopedLocale csl;
std::sprintf(tmpBuf, "%f\n", static_cast<double>(value3)); std::sprintf(tmpBuf, "%f\n", static_cast<double>(value3));
} }
if (! fUiServer.writeMessage(tmpBuf)) if (! fUiServer.writeMessage(tmpBuf))
@@ -1253,7 +1253,7 @@ protected:
if (! fUiServer.writeAndFixMessage("sample-rate")) if (! fUiServer.writeAndFixMessage("sample-rate"))
return; return;
{ {
const ScopedLocale csl;
const CarlaScopedLocale csl;
std::sprintf(tmpBuf, "%f\n", pData->sampleRate); std::sprintf(tmpBuf, "%f\n", pData->sampleRate);
} }
if (! fUiServer.writeMessage(tmpBuf)) if (! fUiServer.writeMessage(tmpBuf))
@@ -1807,7 +1807,7 @@ protected:
carla_zeroChars(tmpBuf, STR_MAX); carla_zeroChars(tmpBuf, STR_MAX);


const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());
const ScopedLocale csl;
const CarlaScopedLocale csl;
const EngineTimeInfo& timeInfo(pData->timeInfo); const EngineTimeInfo& timeInfo(pData->timeInfo);


// send transport // send transport


+ 8
- 5
source/backend/plugin/CarlaPluginLV2.cpp View File

@@ -459,15 +459,18 @@ public:


bool startPipeServer(const int size) noexcept bool startPipeServer(const int size) noexcept
{ {
char sampleRateStr[32];
{
const CarlaScopedLocale csl;
std::snprintf(sampleRateStr, 31, "%f", kEngine->getSampleRate());
}
sampleRateStr[31] = '\0';

const ScopedEngineEnvironmentLocker _seel(kEngine); const ScopedEngineEnvironmentLocker _seel(kEngine);
const ScopedEnvVar _sev1("LV2_PATH", kEngine->getOptions().pathLV2); const ScopedEnvVar _sev1("LV2_PATH", kEngine->getOptions().pathLV2);
#ifdef CARLA_OS_LINUX #ifdef CARLA_OS_LINUX
const ScopedEnvVar _sev2("LD_PRELOAD", nullptr); const ScopedEnvVar _sev2("LD_PRELOAD", nullptr);
#endif #endif

char sampleRateStr[32];
carla_zeroChars(sampleRateStr, 32);
std::snprintf(sampleRateStr, 31, "%f", kEngine->getSampleRate());
carla_setenv("CARLA_SAMPLE_RATE", sampleRateStr); carla_setenv("CARLA_SAMPLE_RATE", sampleRateStr);


return CarlaPipeServer::startPipeServer(fFilename, fPluginURI, fUiURI, size); return CarlaPipeServer::startPipeServer(fFilename, fPluginURI, fUiURI, size);
@@ -1346,7 +1349,7 @@ public:
tmpBuf[0xff] = '\0'; tmpBuf[0xff] = '\0';


const CarlaMutexLocker cml(fPipeServer.getPipeLock()); const CarlaMutexLocker cml(fPipeServer.getPipeLock());
const ScopedLocale csl;
const CarlaScopedLocale csl;


// write URI mappings // write URI mappings
uint32_t u = 0; uint32_t u = 0;


+ 3
- 0
source/bridges-ui/CarlaBridgeFormatLV2.cpp View File

@@ -1213,7 +1213,10 @@ int main(int argc, const char* argv[])


// try to get sampleRate value // try to get sampleRate value
if (const char* const sampleRateStr = std::getenv("CARLA_SAMPLE_RATE")) if (const char* const sampleRateStr = std::getenv("CARLA_SAMPLE_RATE"))
{
const CarlaScopedLocale csl;
gInitialSampleRate = std::atof(sampleRateStr); gInitialSampleRate = std::atof(sampleRateStr);
}


// Init LV2 client // Init LV2 client
CarlaLv2Client client; CarlaLv2Client client;


+ 7
- 5
source/native-plugins/midi-pattern.cpp View File

@@ -306,7 +306,6 @@ protected:
const uint32_t bar = static_cast<uint32_t>(std::floor(fullBeats/beatsPerBar)); const uint32_t bar = static_cast<uint32_t>(std::floor(fullBeats/beatsPerBar));


const CarlaMutexLocker cml(getPipeLock()); const CarlaMutexLocker cml(getPipeLock());
const ScopedLocale csl;


if (! writeAndFixMessage("transport")) if (! writeAndFixMessage("transport"))
return; return;
@@ -317,10 +316,13 @@ protected:
if (! writeMessage(strBuf)) if (! writeMessage(strBuf))
return; return;


std::sprintf(strBuf, "%f:%f:%f\n",
static_cast<double>(beatsPerMinute),
static_cast<double>(beatsPerBar),
static_cast<double>(beatType));
{
const CarlaScopedLocale csl;
std::sprintf(strBuf, "%f:%f:%f\n",
static_cast<double>(beatsPerMinute),
static_cast<double>(beatsPerBar),
static_cast<double>(beatType));
}
if (! writeMessage(strBuf)) if (! writeMessage(strBuf))
return; return;




+ 2
- 1
source/plugin/carla-lv2-ui.cpp View File

@@ -21,6 +21,7 @@


#include "CarlaLv2Utils.hpp" #include "CarlaLv2Utils.hpp"
#include "CarlaPipeUtils.hpp" #include "CarlaPipeUtils.hpp"
#include "CarlaScopedLocale.hpp"


// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------


@@ -137,7 +138,7 @@ public:
const float* const valuePtr = (const float*)buffer; const float* const valuePtr = (const float*)buffer;


{ {
const ScopedLocale csl;
const CarlaScopedLocale csl;
std::snprintf(msg, 127, "control %u %f", portIndex, static_cast<double>(*valuePtr)); std::snprintf(msg, 127, "control %u %f", portIndex, static_cast<double>(*valuePtr));
} }




+ 1
- 1
source/plugin/carla-lv2.cpp View File

@@ -419,7 +419,7 @@ public:
float value; float value;


{ {
const ScopedLocale csl;
const CarlaScopedLocale csl;
value = static_cast<float>(std::atof(msgSplit+1)); value = static_cast<float>(std::atof(msgSplit+1));
} }




+ 9
- 20
source/utils/CarlaPipeUtils.cpp View File

@@ -31,7 +31,6 @@
# include "lv2/lv2plug.in/ns/ext/atom/util.h" # include "lv2/lv2plug.in/ns/ext/atom/util.h"
#endif #endif


#include <clocale>
#include <fcntl.h> #include <fcntl.h>


#include "water/misc/Time.h" #include "water/misc/Time.h"
@@ -827,7 +826,10 @@ bool CarlaPipeCommon::readNextLineAsFloat(float& value) const noexcept


if (const char* const msg = _readlineblock()) if (const char* const msg = _readlineblock())
{ {
value = static_cast<float>(std::atof(msg));
{
const CarlaScopedLocale csl;
value = static_cast<float>(std::atof(msg));
}
delete[] msg; delete[] msg;
return true; return true;
} }
@@ -841,7 +843,10 @@ bool CarlaPipeCommon::readNextLineAsDouble(double& value) const noexcept


if (const char* const msg = _readlineblock()) if (const char* const msg = _readlineblock())
{ {
value = std::atof(msg);
{
const CarlaScopedLocale csl;
value = std::atof(msg);
}
delete[] msg; delete[] msg;
return true; return true;
} }
@@ -983,7 +988,7 @@ void CarlaPipeCommon::writeControlMessage(const uint32_t index, const float valu
return; return;


{ {
const ScopedLocale csl;
const CarlaScopedLocale csl;
std::snprintf(tmpBuf, 0xff, "%f\n", static_cast<double>(value)); std::snprintf(tmpBuf, 0xff, "%f\n", static_cast<double>(value));
} }


@@ -1890,22 +1895,6 @@ ScopedEnvVar::~ScopedEnvVar() noexcept
} }
} }


// -----------------------------------------------------------------------

ScopedLocale::ScopedLocale() noexcept
: fLocale(carla_strdup_safe(::setlocale(LC_NUMERIC, nullptr)))
{
::setlocale(LC_NUMERIC, "C");
}

ScopedLocale::~ScopedLocale() noexcept
{
if (fLocale != nullptr)
{
::setlocale(LC_NUMERIC, fLocale);
delete[] fLocale;
}
}


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------




+ 0
- 15
source/utils/CarlaPipeUtils.hpp View File

@@ -357,21 +357,6 @@ private:
CARLA_PREVENT_HEAP_ALLOCATION CARLA_PREVENT_HEAP_ALLOCATION
}; };


// -----------------------------------------------------------------------
// ScopedLocale class

class ScopedLocale {
public:
ScopedLocale() noexcept;
~ScopedLocale() noexcept;

private:
const char* const fLocale;

CARLA_DECLARE_NON_COPY_CLASS(ScopedLocale)
CARLA_PREVENT_HEAP_ALLOCATION
};

// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


#endif // CARLA_PIPE_UTILS_HPP_INCLUDED #endif // CARLA_PIPE_UTILS_HPP_INCLUDED

+ 54
- 0
source/utils/CarlaScopedLocale.hpp View File

@@ -0,0 +1,54 @@
/*
* Carla Scoped Locale
* Copyright (C) 2013-2019 Filipe Coelho <falktx@falktx.com>
*
* This program 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 any later version.
*
* This program 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.
*
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/

#ifndef CARLA_SCOPED_LOCALE_HPP_INCLUDED
#define CARLA_SCOPED_LOCALE_HPP_INCLUDED

#include "CarlaUtils.hpp"

#include <clocale>

// -----------------------------------------------------------------------
// CarlaScopedLocale class

class CarlaScopedLocale {
public:
CarlaScopedLocale() noexcept
: fLocale(carla_strdup_safe(::setlocale(LC_NUMERIC, nullptr)))
{
::setlocale(LC_NUMERIC, "C");
}

~CarlaScopedLocale() noexcept
{
if (fLocale != nullptr)
{
::setlocale(LC_NUMERIC, fLocale);
delete[] fLocale;
}
}

private:
const char* const fLocale;

CARLA_DECLARE_NON_COPY_CLASS(CarlaScopedLocale)
CARLA_PREVENT_HEAP_ALLOCATION
};

// -----------------------------------------------------------------------

#endif // CARLA_SCOPED_LOCALE_HPP_INCLUDED

+ 13
- 2
source/utils/CarlaString.hpp View File

@@ -20,6 +20,7 @@


#include "CarlaMathUtils.hpp" #include "CarlaMathUtils.hpp"
#include "CarlaJuceUtils.hpp" #include "CarlaJuceUtils.hpp"
#include "CarlaScopedLocale.hpp"


#include <algorithm> #include <algorithm>


@@ -176,7 +177,12 @@ public:
fBufferAlloc(false) fBufferAlloc(false)
{ {
char strBuf[0xff+1]; char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, "%f", static_cast<double>(value));

{
const CarlaScopedLocale csl;
std::snprintf(strBuf, 0xff, "%f", static_cast<double>(value));
}

strBuf[0xff] = '\0'; strBuf[0xff] = '\0';


_dup(strBuf); _dup(strBuf);
@@ -191,7 +197,12 @@ public:
fBufferAlloc(false) fBufferAlloc(false)
{ {
char strBuf[0xff+1]; char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, "%f", value);

{
const CarlaScopedLocale csl;
std::snprintf(strBuf, 0xff, "%f", value);
}

strBuf[0xff] = '\0'; strBuf[0xff] = '\0';


_dup(strBuf); _dup(strBuf);


Loading…
Cancel
Save