ohmu
·
2026-10-15
1#include "fastfetch.h"
2#include "common/parsing.h"
3
4#ifdef _WIN32
5 #pragma GCC diagnostic push
6 #pragma GCC diagnostic ignored "-Wformat"
7#endif
8
9void ffParseSemver(FFstrbuf* buffer, const FFstrbuf* major, const FFstrbuf* minor, const FFstrbuf* patch) {
10 if (major->length > 0) {
11 ffStrbufAppend(buffer, major);
12 } else if (minor->length > 0 || patch->length > 0) {
13 ffStrbufAppendC(buffer, '1');
14 }
15
16 if (minor->length == 0 && patch->length == 0) {
17 return;
18 }
19
20 ffStrbufAppendC(buffer, '.');
21
22 if (minor->length > 0) {
23 ffStrbufAppend(buffer, minor);
24 } else if (patch->length > 0) {
25 ffStrbufAppendC(buffer, '0');
26 }
27
28 if (patch->length == 0) {
29 return;
30 }
31
32 ffStrbufAppendC(buffer, '.');
33
34 ffStrbufAppend(buffer, patch);
35}
36
37int8_t ffVersionCompare(const FFVersion* version1, const FFVersion* version2) {
38 if (version1->major != version2->major) {
39 return version1->major > version2->major ? 1 : -1;
40 }
41
42 if (version1->minor != version2->minor) {
43 return version1->minor > version2->minor ? 1 : -1;
44 }
45
46 if (version1->patch != version2->patch) {
47 return version1->patch > version2->patch ? 1 : -1;
48 }
49
50 return 0;
51}
52
53void ffVersionToPretty(const FFVersion* version, FFstrbuf* pretty) {
54 if (version->major > 0 || version->minor > 0 || version->patch > 0) {
55 ffStrbufAppendUInt(pretty, version->major);
56 }
57
58 if (version->minor > 0 || version->patch > 0) {
59 ffStrbufAppendC(pretty, '.');
60 ffStrbufAppendUInt(pretty, version->minor);
61 }
62
63 if (version->patch > 0) {
64 ffStrbufAppendC(pretty, '.');
65 ffStrbufAppendUInt(pretty, version->patch);
66 }
67}
68
69void ffParseGTK(FFstrbuf* buffer, const FFstrbuf* gtk2, const FFstrbuf* gtk3, const FFstrbuf* gtk4) {
70 if (gtk2->length > 0 && gtk3->length > 0 && gtk4->length > 0) {
71 if ((ffStrbufIgnCaseEqual(gtk2, gtk3)) && (ffStrbufIgnCaseEqual(gtk2, gtk4))) {
72 ffStrbufAppend(buffer, gtk4);
73 ffStrbufAppendS(buffer, " [GTK2/3/4]");
74 } else if (ffStrbufIgnCaseEqual(gtk2, gtk3)) {
75 ffStrbufAppend(buffer, gtk3);
76 ffStrbufAppendS(buffer, " [GTK2/3], ");
77 ffStrbufAppend(buffer, gtk4);
78 ffStrbufAppendS(buffer, " [GTK4]");
79 } else if (ffStrbufIgnCaseEqual(gtk3, gtk4)) {
80 ffStrbufAppend(buffer, gtk2);
81 ffStrbufAppendS(buffer, " [GTK2], ");
82 ffStrbufAppend(buffer, gtk4);
83 ffStrbufAppendS(buffer, " [GTK3/4]");
84 } else {
85 ffStrbufAppend(buffer, gtk2);
86 ffStrbufAppendS(buffer, " [GTK2], ");
87 ffStrbufAppend(buffer, gtk3);
88 ffStrbufAppendS(buffer, " [GTK3], ");
89 ffStrbufAppend(buffer, gtk4);
90 ffStrbufAppendS(buffer, " [GTK4]");
91 }
92 } else if (gtk2->length > 0 && gtk3->length > 0) {
93 if (ffStrbufIgnCaseEqual(gtk2, gtk3)) {
94 ffStrbufAppend(buffer, gtk3);
95 ffStrbufAppendS(buffer, " [GTK2/3]");
96 } else {
97 ffStrbufAppend(buffer, gtk2);
98 ffStrbufAppendS(buffer, " [GTK2], ");
99 ffStrbufAppend(buffer, gtk3);
100 ffStrbufAppendS(buffer, " [GTK3]");
101 }
102 } else if (gtk2->length > 0 && gtk4->length > 0) {
103 if (ffStrbufIgnCaseEqual(gtk2, gtk4)) {
104 ffStrbufAppend(buffer, gtk4);
105 ffStrbufAppendS(buffer, " [GTK2/4]");
106 } else {
107 ffStrbufAppend(buffer, gtk2);
108 ffStrbufAppendS(buffer, " [GTK2], ");
109 ffStrbufAppend(buffer, gtk4);
110 ffStrbufAppendS(buffer, " [GTK4]");
111 }
112 } else if (gtk3->length > 0 && gtk4->length > 0) {
113 if (ffStrbufIgnCaseEqual(gtk3, gtk4)) {
114 ffStrbufAppend(buffer, gtk4);
115 ffStrbufAppendS(buffer, " [GTK3/4]");
116 } else {
117 ffStrbufAppend(buffer, gtk3);
118 ffStrbufAppendS(buffer, " [GTK3], ");
119 ffStrbufAppend(buffer, gtk4);
120 ffStrbufAppendS(buffer, " [GTK4]");
121 }
122 } else if (gtk2->length > 0) {
123 ffStrbufAppend(buffer, gtk2);
124 ffStrbufAppendS(buffer, " [GTK2]");
125 } else if (gtk3->length > 0) {
126 ffStrbufAppend(buffer, gtk3);
127 ffStrbufAppendS(buffer, " [GTK3]");
128 } else if (gtk4->length > 0) {
129 ffStrbufAppend(buffer, gtk4);
130 ffStrbufAppendS(buffer, " [GTK4]");
131 }
132}
133
134#ifdef _WIN32
135 #pragma GCC diagnostic pop
136#endif