Skip to content

Commit 61f2823

Browse files
committed
Global: fixes -ffast-math compatibility
Unifies unset double handling using `-DBL_MAX` sentinel Fixes #1894
1 parent 7446828 commit 61f2823

33 files changed

+119
-84
lines changed

src/common/format.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ static inline void appendInvalidPlaceholder(FFstrbuf* buffer, const char* start,
113113
static inline bool formatArgSet(const FFformatarg* arg)
114114
{
115115
return arg->value != NULL && (
116-
(arg->type == FF_FORMAT_ARG_TYPE_DOUBLE && *(double*)arg->value > 0.0) || //Also is false for NaN
117-
(arg->type == FF_FORMAT_ARG_TYPE_FLOAT && *(float*)arg->value > 0.0) || //Also is false for NaN
116+
(arg->type == FF_FORMAT_ARG_TYPE_DOUBLE && *(double*)arg->value > 0.0) ||
117+
(arg->type == FF_FORMAT_ARG_TYPE_FLOAT && *(float*)arg->value > 0.0) ||
118118
(arg->type == FF_FORMAT_ARG_TYPE_INT && *(int*)arg->value > 0) ||
119119
(arg->type == FF_FORMAT_ARG_TYPE_STRBUF && ((FFstrbuf*)arg->value)->length > 0) ||
120120
(arg->type == FF_FORMAT_ARG_TYPE_STRING && ffStrSet((char*)arg->value)) ||

src/common/percent.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ void ffPercentAppendBar(FFstrbuf* buffer, double percent, FFPercentageModuleConf
7272
ffStrbufAppend(buffer, &options->barBorderLeft);
7373
}
7474

75-
if (percent != percent)
75+
if (percent == -DBL_MAX)
7676
{
77-
// No color config for NaN, use total color for simplification
77+
// Use total color for simplification
7878
if(!options->pipe && options->barColorTotal.length > 0)
7979
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_BLACK "m");
8080

@@ -187,7 +187,7 @@ void ffPercentAppendNum(FFstrbuf* buffer, double percent, FFPercentageModuleConf
187187
const char* colorYellow = options->percentColorYellow.chars;
188188
const char* colorRed = options->percentColorRed.chars;
189189

190-
if(percent != percent)
190+
if(percent == -DBL_MAX)
191191
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_BLACK "m");
192192
else if(green <= yellow)
193193
{

src/common/temps.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
void ffTempsAppendNum(double celsius, FFstrbuf* buffer, FFColorRangeConfig config, const FFModuleArgs* module)
77
{
8-
if (celsius != celsius) // ignores NaN
8+
if (celsius == -DBL_MAX) // ignores invalid value
99
return;
1010

1111
const FFOptionsDisplay* options = &instance.config.display;

src/detection/battery/battery.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "fastfetch.h"
44
#include "modules/battery/option.h"
55

6-
#define FF_BATTERY_TEMP_UNSET (0/0.0)
6+
#define FF_BATTERY_TEMP_UNSET (-DBL_MAX)
77

88
typedef struct FFBatteryResult
99
{

src/detection/battery/battery_android.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ static const char* parseDumpsys(FFBatteryOptions* options, FFlist* results)
9696
battery->temperature = FF_BATTERY_TEMP_UNSET;
9797
battery->cycleCount = 0;
9898
battery->timeRemaining = -1;
99+
battery->capacity = 0;
99100
ffStrbufInit(&battery->manufacturer);
100101
ffStrbufInit(&battery->modelName);
101102
ffStrbufInit(&battery->status);
@@ -124,11 +125,11 @@ static const char* parseDumpsys(FFBatteryOptions* options, FFlist* results)
124125
{
125126
double level = 0, scale = 0;
126127
if (ffParsePropLines(start, "level: ", &temp))
127-
level = ffStrbufToDouble(&temp);
128+
level = ffStrbufToDouble(&temp, -DBL_MAX);
128129
ffStrbufClear(&temp);
129130

130131
if (ffParsePropLines(start, "scale: ", &temp))
131-
scale = ffStrbufToDouble(&temp);
132+
scale = ffStrbufToDouble(&temp, -DBL_MAX);
132133
ffStrbufClear(&temp);
133134

134135
if (level > 0 && scale > 0)
@@ -138,7 +139,7 @@ static const char* parseDumpsys(FFBatteryOptions* options, FFlist* results)
138139
if(options->temp)
139140
{
140141
if (ffParsePropLines(start, "temperature: ", &temp))
141-
battery->temperature = ffStrbufToDouble(&temp);
142+
battery->temperature = ffStrbufToDouble(&temp, FF_BATTERY_TEMP_UNSET);
142143
ffStrbufClear(&temp);
143144
}
144145

src/detection/battery/battery_linux.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ static void parseBattery(int dfd, const char* id, FFBatteryOptions* options, FFl
4545
return;
4646

4747
FFBatteryResult* result = ffListAdd(results);
48-
result->capacity = ffStrbufToDouble(&tmpBuffer);
48+
result->capacity = ffStrbufToDouble(&tmpBuffer, 0);
4949

5050
//At this point, we have a battery. Try to get as much values as possible.
5151

@@ -154,7 +154,11 @@ static void parseBattery(int dfd, const char* id, FFBatteryOptions* options, FFl
154154
if (options->temp)
155155
{
156156
if (ffReadFileBufferRelative(dfd, "temp", &tmpBuffer))
157-
result->temperature = ffStrbufToDouble(&tmpBuffer) / 10;
157+
{
158+
result->temperature = ffStrbufToDouble(&tmpBuffer, FF_BATTERY_TEMP_UNSET);
159+
if (result->temperature != FF_BATTERY_TEMP_UNSET)
160+
result->temperature /= 10;
161+
}
158162
}
159163
}
160164

src/detection/battery/battery_windows.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ static const char* detectWithCmApi(FFBatteryOptions* options, FFlist* results)
103103

104104
battery->cycleCount = bi.CycleCount;
105105

106-
battery->temperature = 0.0/0.0;
106+
battery->temperature = FF_BATTERY_TEMP_UNSET;
107107
if(options->temp)
108108
{
109109
bqi.InformationLevel = BatteryTemperature;

src/detection/brightness/brightness_linux.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ static const char* detectWithBacklight(FFlist* result)
3232
ffStrbufAppendS(&backlightDir, "/brightness");
3333
if(ffReadFileBuffer(backlightDir.chars, &buffer))
3434
{
35-
double actualBrightness = ffStrbufToDouble(&buffer);
35+
double actualBrightness = ffStrbufToDouble(&buffer, 0);
3636
ffStrbufSubstrBefore(&backlightDir, backlightDirLength);
3737
ffStrbufAppendS(&backlightDir, entry->d_name);
3838
ffStrbufAppendS(&backlightDir, "/max_brightness");
@@ -71,7 +71,7 @@ static const char* detectWithBacklight(FFlist* result)
7171
}
7272
else
7373
ffStrbufInitS(&brightness->name, entry->d_name);
74-
brightness->max = ffStrbufToDouble(&buffer);
74+
brightness->max = ffStrbufToDouble(&buffer, 0);
7575
brightness->min = 0;
7676
brightness->current = actualBrightness;
7777
brightness->builtin = true;

src/detection/cpu/cpu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "fastfetch.h"
44
#include "modules/cpu/option.h"
55

6-
#define FF_CPU_TEMP_UNSET (0/0.0)
6+
#define FF_CPU_TEMP_UNSET (-DBL_MAX)
77

88
typedef struct FFCPUCore
99
{

src/detection/cpu/cpu_linux.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,19 @@ static double parseHwmonDir(FFstrbuf* dir, FFstrbuf* buffer)
2828
ffStrbufAppendS(dir, "temp1_input");
2929

3030
if(!ffReadFileBuffer(dir->chars, buffer))
31-
return 0.0/0.0;
31+
return FF_CPU_TEMP_UNSET;
3232
}
3333

3434
ffStrbufSubstrBefore(dir, dirLength);
3535

36-
double value = ffStrbufToDouble(buffer);// millidegree Celsius
36+
double value = ffStrbufToDouble(buffer, FF_CPU_TEMP_UNSET);// millidegree Celsius
3737

38-
if(value != value)
39-
return 0.0/0.0;
38+
if(value == FF_CPU_TEMP_UNSET)
39+
return FF_CPU_TEMP_UNSET;
4040

4141
ffStrbufAppendS(dir, "name");
4242
if (!ffReadFileBuffer(dir->chars, buffer))
43-
return 0.0/0.0;
43+
return FF_CPU_TEMP_UNSET;
4444

4545
ffStrbufTrimRightSpace(buffer);
4646

@@ -51,14 +51,17 @@ static double parseHwmonDir(FFstrbuf* dir, FFstrbuf* buffer)
5151
ffStrbufEqualS(buffer, "coretemp") // Intel
5252
) return value / 1000.;
5353

54-
return 0.0/0.0;
54+
return FF_CPU_TEMP_UNSET;
5555
}
5656

5757
static double detectTZTemp(FFstrbuf* buffer)
5858
{
5959
if (ffReadFileBuffer("/sys/class/thermal/thermal_zone0/temp", buffer))
60-
return ffStrbufToDouble(buffer) / 1000.;
61-
return 0.0/0.0;
60+
{
61+
double value = ffStrbufToDouble(buffer, FF_CPU_TEMP_UNSET);// millidegree Celsius
62+
return value != FF_CPU_TEMP_UNSET ? value / 1000. : FF_CPU_TEMP_UNSET;
63+
}
64+
return FF_CPU_TEMP_UNSET;
6265
}
6366

6467
static double detectCPUTemp(void)
@@ -72,7 +75,7 @@ static double detectCPUTemp(void)
7275

7376
FF_AUTO_CLOSE_DIR DIR* dirp = opendir(baseDir.chars);
7477
if(dirp == NULL)
75-
return 0.0/0.0;
78+
return FF_CPU_TEMP_UNSET;
7679

7780
struct dirent* entry;
7881
while((entry = readdir(dirp)) != NULL)
@@ -84,7 +87,7 @@ static double detectCPUTemp(void)
8487
ffStrbufAppendC(&baseDir, '/');
8588

8689
double result = parseHwmonDir(&baseDir, &buffer);
87-
if (result == result)
90+
if (result != FF_CPU_TEMP_UNSET)
8891
return result;
8992

9093
ffStrbufSubstrBefore(&baseDir, baseDirLength);

0 commit comments

Comments
 (0)