Skip to content

Commit 5710dcc

Browse files
peffgitster
authored andcommitted
usage: define a type for a reporting function
The usage, die, warning, and error routines all work with a function pointer that takes the message to be reported. We usually just mention the function's full type inline. But this makes the use of these pointers hard to read, especially because C's syntax for returning a function pointer is so awful: void (*get_error_routine(void))(const char *err, va_list params); Unless you read it very carefully, this looks like a function pointer declaration. Let's instead use a single typedef to define a reporting function, which is the same for all four types. Note that this also removes the "extern" from these declarations to match the surrounding functions. They were missed in 5545442 (*.[ch]: remove extern from function declarations using spatch, 2019-04-29) presumably because of the unusual syntax. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 47ae905 commit 5710dcc

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

git-compat-util.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -485,11 +485,13 @@ static inline int const_error(void)
485485
#define error_errno(...) (error_errno(__VA_ARGS__), const_error())
486486
#endif
487487

488-
void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));
489-
void set_error_routine(void (*routine)(const char *err, va_list params));
490-
extern void (*get_error_routine(void))(const char *err, va_list params);
491-
void set_warn_routine(void (*routine)(const char *warn, va_list params));
492-
extern void (*get_warn_routine(void))(const char *warn, va_list params);
488+
typedef void (*report_fn)(const char *, va_list params);
489+
490+
void set_die_routine(NORETURN_PTR report_fn routine);
491+
void set_error_routine(report_fn routine);
492+
report_fn get_error_routine(void);
493+
void set_warn_routine(report_fn routine);
494+
report_fn get_warn_routine(void);
493495
void set_die_is_recursing_routine(int (*routine)(void));
494496

495497
int starts_with(const char *str, const char *prefix);

usage.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,33 +108,33 @@ static int die_is_recursing_builtin(void)
108108

109109
/* If we are in a dlopen()ed .so write to a global variable would segfault
110110
* (ugh), so keep things static. */
111-
static NORETURN_PTR void (*usage_routine)(const char *err, va_list params) = usage_builtin;
112-
static NORETURN_PTR void (*die_routine)(const char *err, va_list params) = die_builtin;
113-
static void (*error_routine)(const char *err, va_list params) = error_builtin;
114-
static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
111+
static NORETURN_PTR report_fn usage_routine = usage_builtin;
112+
static NORETURN_PTR report_fn die_routine = die_builtin;
113+
static report_fn error_routine = error_builtin;
114+
static report_fn warn_routine = warn_builtin;
115115
static int (*die_is_recursing)(void) = die_is_recursing_builtin;
116116

117-
void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params))
117+
void set_die_routine(NORETURN_PTR report_fn routine)
118118
{
119119
die_routine = routine;
120120
}
121121

122-
void set_error_routine(void (*routine)(const char *err, va_list params))
122+
void set_error_routine(report_fn routine)
123123
{
124124
error_routine = routine;
125125
}
126126

127-
void (*get_error_routine(void))(const char *err, va_list params)
127+
report_fn get_error_routine(void)
128128
{
129129
return error_routine;
130130
}
131131

132-
void set_warn_routine(void (*routine)(const char *warn, va_list params))
132+
void set_warn_routine(report_fn routine)
133133
{
134134
warn_routine = routine;
135135
}
136136

137-
void (*get_warn_routine(void))(const char *warn, va_list params)
137+
report_fn get_warn_routine(void)
138138
{
139139
return warn_routine;
140140
}

0 commit comments

Comments
 (0)