1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
The later chunks (using i2b) are compile fixes on aarch64 (presumably with
clang6 as well). Typical error message reads
readConfig.cpp:407:54: error: non-constant-expression cannot be narrowed
from type 'int' to 'unsigned char' in initializer list [-Wc++11-narrowing]
unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff };
^~~~~~~~
readConfig.cpp:407:54: note: insert an explicit cast to silence this issue
unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff };
^~~~~~~~
static_cast<unsigned char>( )
Since it happens in a half-dozen places, introduce a trivial helper function.
--- src/readConfig.cpp.orig 2018-01-21 16:58:09 UTC
+++ src/readConfig.cpp
@@ -4,6 +4,7 @@
#include <fstream>
#include <sstream>
#include <string>
+#include <clocale>
using namespace std;
#include "body.h"
@@ -20,6 +21,8 @@ using namespace std;
static PlanetProperties *defaultProperties;
static PlanetProperties *currentProperties;
+static inline unsigned char i2b( int x ) { return static_cast<unsigned int>(x) & 0xffU; }
+
static void
readConfig(const char *line, PlanetProperties *planetProperties[])
{
@@ -49,7 +52,7 @@ readConfig(const char *line, PlanetPrope
int r, g, b;
if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3)
{
- unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff };
+ unsigned char color[3] = { i2b(r), i2b(g), i2b(b) };
currentProperties->ArcColor(color);
}
else
@@ -179,7 +182,7 @@ readConfig(const char *line, PlanetPrope
int r, g, b;
if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3)
{
- unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff };
+ unsigned char color[3] = { i2b(r), i2b(g), i2b(b) };
currentProperties->Color(color);
}
else
@@ -244,7 +247,7 @@ readConfig(const char *line, PlanetPrope
int r, g, b;
if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3)
{
- unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff };
+ unsigned char color[3] = { i2b(r), i2b(g), i2b(b) };
currentProperties->GridColor(color);
}
else
@@ -296,7 +299,7 @@ readConfig(const char *line, PlanetPrope
int r, g, b;
if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3)
{
- unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff };
+ unsigned char color[3] = { i2b(r), i2b(g), i2b(b) };
currentProperties->MarkerColor(color);
}
else
@@ -403,7 +406,7 @@ readConfig(const char *line, PlanetPrope
int r, g, b;
if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3)
{
- unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff };
+ unsigned char color[3] = { i2b(r), i2b(g), i2b(b) };
currentProperties->OrbitColor(color);
}
else
@@ -473,7 +476,7 @@ readConfig(const char *line, PlanetPrope
int r, g, b;
if (sscanf(returnString, "%d,%d,%d", &r, &g, &b) == 3)
{
- unsigned char color[3] = { r & 0xff, g & 0xff, b & 0xff };
+ unsigned char color[3] = { i2b(r), i2b(g), i2b(b) };
currentProperties->TextColor(color);
}
else
|