From 3ad05a076238eda5bcb7c7e30cc762b13b0277fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anthony=20L=C3=A9onard?=
 <anthony.leonard@savoirfairelinux.com>
Date: Tue, 27 Jun 2017 13:59:40 -0400
Subject: [PATCH] contrib: add restbed patch fixing locale issues

On MacOS, if the language is set to one not using dots to separate
integer and fractional part of a number (like french using a comma),
a bad HTTP version is sent when dealing with the name server. It
prevents registering a username and using one to add a friend in the
contact list.

This patch resets the locale to "C" before attempting to convert HTTP
version from a double to a char* thus enforcing the use of a dot in
the request. The locale is then restored to its old value then
preserving any modification done elsewhere.

Change-Id: I5b116294c428f626e03885b54950c868211e587e
Reviewed-by: Philippe Gorley <philippe.gorley@savoirfairelinux.com>
---
 contrib/src/restbed/rules.mak    |  1 +
 contrib/src/restbed/string.patch | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+)
 create mode 100644 contrib/src/restbed/string.patch

diff --git a/contrib/src/restbed/rules.mak b/contrib/src/restbed/rules.mak
index 89c6b0d0a6..263f84aa96 100644
--- a/contrib/src/restbed/rules.mak
+++ b/contrib/src/restbed/rules.mak
@@ -45,6 +45,7 @@ restbed: restbed-$(RESTBED_VERSION).tar.gz
 	$(APPLY) $(SRC)/restbed/strand.patch
 	$(APPLY) $(SRC)/restbed/uri_cpp.patch
 	$(APPLY) $(SRC)/restbed/dns-resolution-error.patch
+	$(APPLY) $(SRC)/restbed/string.patch
 	$(MOVE)
 
 .restbed: restbed toolchain.cmake
diff --git a/contrib/src/restbed/string.patch b/contrib/src/restbed/string.patch
new file mode 100644
index 0000000000..53b2eb21a7
--- /dev/null
+++ b/contrib/src/restbed/string.patch
@@ -0,0 +1,25 @@
+--- a/source/corvusoft/restbed/string.cpp	2016-09-14 20:58:54.000000000 -0400
++++ b/source/corvusoft/restbed/string.cpp	2017-06-27 10:17:55.000000000 -0400
+@@ -7,6 +7,7 @@
+ #include <memory>
+ #include <ciso646>
+ #include <algorithm>
++#include <cstdlib>
+ 
+ //Project Includes
+ #include "corvusoft/restbed/string.hpp"
+@@ -161,8 +162,14 @@
+     string::size_type String::format( string& output, const string::size_type length, const char* format, va_list arguments )
+     {
+         unique_ptr< char[ ] > formatted( new char[ length + 1 ] );
++
++        char* saved_locale = strdup(setlocale(LC_NUMERIC, NULL));
++        setlocale(LC_NUMERIC, "C");
+         
+         int required_length = vsnprintf( formatted.get( ), length + 1, format, arguments );
++
++        setlocale(LC_NUMERIC, saved_locale);
++        free(saved_locale);
+         
+         if ( required_length == -1 )
+         {
-- 
GitLab