Skip to content

Commit 9eeb216

Browse files
committed
util: add check macros to avoid possible mistakes
1 parent f362fdb commit 9eeb216

File tree

10 files changed

+56
-27
lines changed

10 files changed

+56
-27
lines changed

src/common/io.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bool ffFileExists(const char* fileName, mode_t mode);
1919
// Not thread safe!
2020
void ffSuppressIO(bool suppress);
2121

22-
void ffGetTerminalResponse(const char* request, const char* format, ...);
22+
FF_C_SCANF(2, 3) void ffGetTerminalResponse(const char* request, const char* format, ...);
2323

2424
#endif

src/common/printing.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
void ffPrintLogoAndKey(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat);
1010
void ffPrintFormatString(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, const FFstrbuf* format, uint32_t numArgs, const FFformatarg* arguments);
1111
void ffPrintFormat(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, uint32_t numArgs, const FFformatarg* arguments);
12-
void ffPrintErrorString(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, const FFstrbuf* customErrorFormat, const char* message, ...);
13-
void ffPrintError(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, const char* message, ...);
12+
FF_C_PRINTF(6, 7) void ffPrintErrorString(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, const FFstrbuf* customErrorFormat, const char* message, ...);
13+
FF_C_PRINTF(5, 6) void ffPrintError(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, const char* message, ...);
1414
void ffPrintColor(const FFstrbuf* colorValue);
1515
void ffPrintCharTimes(char c, uint32_t times);
1616
void ffPrintUserString(const char* str);

src/modules/opencl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,5 @@ void ffPrintOpenCL(FFinstance* instance)
118118
#endif
119119

120120
if(error != NULL)
121-
ffPrintError(instance, FF_OPENCL_MODULE_NAME, 0, &instance->config.openCL, error);
121+
ffPrintError(instance, FF_OPENCL_MODULE_NAME, 0, &instance->config.openCL, "%s", error);
122122
}

src/modules/opengl.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,5 +453,5 @@ void ffPrintOpenGL(FFinstance* instance)
453453
#endif
454454

455455
if(error != NULL)
456-
ffPrintError(instance, FF_OPENGL_MODULE_NAME, 0, &instance->config.openGL, error);
456+
ffPrintError(instance, FF_OPENGL_MODULE_NAME, 0, &instance->config.openGL, "%s", error);
457457
}

src/modules/terminalfont.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static void printKonsole(FFinstance* instance)
123123

124124
if(profile.length == 0)
125125
{
126-
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont, "Couldn't find \"DefaultProfile=%[^\\n]\" in \".config/konsolerc\"");
126+
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont, "%s", "Couldn't find \"DefaultProfile=%[^\\n]\" in \".config/konsolerc\"");
127127
ffStrbufDestroy(&profile);
128128
return;
129129
}

src/modules/vulkan.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ void ffPrintVulkan(FFinstance* instance)
1111

1212
if(vulkan->error)
1313
{
14-
ffPrintError(instance, FF_VULKAN_MODULE_NAME, 0, &instance->config.vulkan, vulkan->error);
14+
ffPrintError(instance, FF_VULKAN_MODULE_NAME, 0, &instance->config.vulkan, "%s", vulkan->error);
1515
return;
1616
}
1717

src/util/FFcheckmacros.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
3+
#ifndef FASTFETCH_INCLUDED_FFCHECKMACROS
4+
#define FASTFETCH_INCLUDED_FFCHECKMACROS
5+
6+
#if defined(__GNUC__) || defined(__clang__)
7+
#define FF_C_NODISCARD __attribute__((warn_unused_result))
8+
#else
9+
#define FF_C_NODISCARD
10+
#endif
11+
12+
#if defined(__GNUC__) || defined(__clang__)
13+
#define FF_C_PRINTF(formatStrIndex, argsStartIndex) __attribute__((__format__ (printf, formatStrIndex, argsStartIndex)))
14+
#else
15+
#define FF_C_PRINTF(formatStrIndex, argsStartIndex)
16+
#endif
17+
18+
#if defined(__GNUC__) || defined(__clang__)
19+
#define FF_C_SCANF(formatStrIndex, argsStartIndex) __attribute__((__format__ (scanf, formatStrIndex, argsStartIndex)))
20+
#else
21+
#define FF_C_SCANF(formatStrIndex, argsStartIndex)
22+
#endif
23+
24+
#endif

src/util/FFlist.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
#ifndef FF_INCLUDED_FFLIST
44
#define FF_INCLUDED_FFLIST
55

6+
#include "FFcheckmacros.h"
7+
68
#include <stdbool.h>
79
#include <stdint.h>
810

@@ -19,11 +21,11 @@ typedef struct FFlist
1921
void ffListInit(FFlist* list, uint32_t elementSize);
2022
void ffListInitA(FFlist* list, uint32_t elementSize, uint32_t capacity);
2123

22-
void* ffListGet(const FFlist* list, uint32_t index);
24+
FF_C_NODISCARD void* ffListGet(const FFlist* list, uint32_t index);
2325

2426
void* ffListAdd(FFlist* list);
2527

26-
uint32_t ffListFirstIndexComp(const FFlist* list, void* compElement, bool(*compFunc)(const void*, const void*));
28+
FF_C_NODISCARD uint32_t ffListFirstIndexComp(const FFlist* list, void* compElement, bool(*compFunc)(const void*, const void*));
2729

2830
void ffListDestroy(FFlist* list);
2931

src/util/FFstrbuf.h

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
#ifndef FASTFETCH_INCLUDED_FFSTRBUF
44
#define FASTFETCH_INCLUDED_FFSTRBUF
55

6+
#include "FFcheckmacros.h"
7+
68
#include <stdint.h>
79
#include <stdarg.h>
810
#include <stdbool.h>
@@ -25,7 +27,7 @@ void ffStrbufInitCopy(FFstrbuf* strbuf, const FFstrbuf* src);
2527

2628
void ffStrbufEnsureFree(FFstrbuf* strbuf, uint32_t free);
2729

28-
uint32_t ffStrbufGetFree(const FFstrbuf* strbuf);
30+
FF_C_NODISCARD uint32_t ffStrbufGetFree(const FFstrbuf* strbuf);
2931

3032
void ffStrbufClear(FFstrbuf* strbuf);
3133

@@ -37,7 +39,7 @@ void ffStrbufAppendS(FFstrbuf* strbuf, const char* value);
3739
void ffStrbufAppendNS(FFstrbuf* strbuf, uint32_t length, const char* value);
3840
void ffStrbufAppendNSExludingC(FFstrbuf* strbuf, uint32_t length, const char* value, char exclude);
3941
void ffStrbufAppendTransformS(FFstrbuf* strbuf, const char* value, int(*transformFunc)(int));
40-
void ffStrbufAppendF(FFstrbuf* strbuf, const char* format, ...);
42+
FF_C_PRINTF(2, 3) void ffStrbufAppendF(FFstrbuf* strbuf, const char* format, ...);
4143
void ffStrbufAppendVF(FFstrbuf* strbuf, const char* format, va_list arguments);
4244

4345
void ffStrbufPrependS(FFstrbuf* strbuf, const char* value);
@@ -46,11 +48,11 @@ void ffStrbufPrependNS(FFstrbuf* strbuf, uint32_t length, const char* value);
4648
void ffStrbufSet(FFstrbuf* strbuf, const FFstrbuf* value);
4749
void ffStrbufSetS(FFstrbuf* strbuf, const char* value);
4850

49-
int ffStrbufComp(const FFstrbuf* strbuf, const FFstrbuf* comp);
50-
int ffStrbufCompS(const FFstrbuf* strbuf, const char* comp);
51+
FF_C_NODISCARD int ffStrbufComp(const FFstrbuf* strbuf, const FFstrbuf* comp);
52+
FF_C_NODISCARD int ffStrbufCompS(const FFstrbuf* strbuf, const char* comp);
5153

52-
int ffStrbufIgnCaseComp(const FFstrbuf* strbuf, const FFstrbuf* comp);
53-
int ffStrbufIgnCaseCompS(const FFstrbuf* strbuf, const char* comp);
54+
FF_C_NODISCARD int ffStrbufIgnCaseComp(const FFstrbuf* strbuf, const FFstrbuf* comp);
55+
FF_C_NODISCARD int ffStrbufIgnCaseCompS(const FFstrbuf* strbuf, const char* comp);
5456

5557
void ffStrbufTrimLeft(FFstrbuf* strbuf, char c);
5658
void ffStrbufTrimRight(FFstrbuf* strbuf, char c);
@@ -62,16 +64,16 @@ void ffStrbufRemoveStringsA(FFstrbuf* strbuf, uint32_t numStrings, const char* s
6264
void ffStrbufRemoveStringsV(FFstrbuf* strbuf, uint32_t numStrings, va_list arguments);
6365
void ffStrbufRemoveStrings(FFstrbuf* strbuf, uint32_t numStrings, ...);
6466

65-
uint32_t ffStrbufNextIndexC(const FFstrbuf* strbuf, uint32_t start, char c);
66-
uint32_t ffStrbufNextIndexS(const FFstrbuf* strbuf, uint32_t start, const char* str);
67+
FF_C_NODISCARD uint32_t ffStrbufNextIndexC(const FFstrbuf* strbuf, uint32_t start, char c);
68+
FF_C_NODISCARD uint32_t ffStrbufNextIndexS(const FFstrbuf* strbuf, uint32_t start, const char* str);
6769

68-
uint32_t ffStrbufFirstIndexC(const FFstrbuf* strbuf, char c);
69-
uint32_t ffStrbufFirstIndex(const FFstrbuf* strbuf, const FFstrbuf* searched);
70-
uint32_t ffStrbufFirstIndexS(const FFstrbuf* strbuf, const char* str);
70+
FF_C_NODISCARD uint32_t ffStrbufFirstIndexC(const FFstrbuf* strbuf, char c);
71+
FF_C_NODISCARD uint32_t ffStrbufFirstIndex(const FFstrbuf* strbuf, const FFstrbuf* searched);
72+
FF_C_NODISCARD uint32_t ffStrbufFirstIndexS(const FFstrbuf* strbuf, const char* str);
7173

72-
uint32_t ffStrbufPreviousIndexC(const FFstrbuf* strbuf, uint32_t start, char c);
74+
FF_C_NODISCARD uint32_t ffStrbufPreviousIndexC(const FFstrbuf* strbuf, uint32_t start, char c);
7375

74-
uint32_t ffStrbufLastIndexC(const FFstrbuf* strbuf, char c);
76+
FF_C_NODISCARD uint32_t ffStrbufLastIndexC(const FFstrbuf* strbuf, char c);
7577

7678
void ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index);
7779
void ffStrbufSubstrBeforeFirstC(FFstrbuf* strbuf, char c);
@@ -89,7 +91,7 @@ bool ffStrbufStartsWithIgnCaseS(const FFstrbuf* strbuf, const char* start);
8991
bool ffStrbufEndsWithC(const FFstrbuf* strbuf, char c);
9092
bool ffStrbufEndsWithS(const FFstrbuf* strbuf, const char* end);
9193

92-
uint32_t ffStrbufCountC(const FFstrbuf* strbuf, char c);
94+
FF_C_NODISCARD uint32_t ffStrbufCountC(const FFstrbuf* strbuf, char c);
9395

9496
bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end);
9597

@@ -98,8 +100,8 @@ void ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c);
98100
void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file);
99101
void ffStrbufPutTo(const FFstrbuf* strbuf, FILE* file);
100102

101-
double ffStrbufToDouble(const FFstrbuf* strbuf);
102-
uint16_t ffStrbufToUInt16(const FFstrbuf* strbuf, uint16_t defaultValue);
103+
FF_C_NODISCARD double ffStrbufToDouble(const FFstrbuf* strbuf);
104+
FF_C_NODISCARD uint16_t ffStrbufToUInt16(const FFstrbuf* strbuf, uint16_t defaultValue);
103105

104106
void ffStrbufDestroy(FFstrbuf* strbuf);
105107

src/util/FFvaluestore.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
#ifndef FASTFETCH_INCLUDED_FFVALUESTORE
44
#define FASTFETCH_INCLUDED_FFVALUESTORE
55

6-
#include "util/FFlist.h"
6+
#include "FFlist.h"
7+
#include "FFcheckmacros.h"
78

89
typedef FFlist FFvaluestore;
910

1011
void ffValuestoreInit(FFvaluestore* vs, uint32_t valueSize);
11-
void* ffValuestoreGet(FFvaluestore* vs, const char* key);
12+
FF_C_NODISCARD void* ffValuestoreGet(FFvaluestore* vs, const char* key);
1213
void* ffValuestoreSet(FFvaluestore* vs, const char* key, bool* created); //created may be NULL
1314
void ffValuestoreDestroy(FFvaluestore* vs);
1415

0 commit comments

Comments
 (0)