summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Scott <nathans@redhat.com>2020-07-10 10:35:32 +1000
committerNathan Scott <nathans@redhat.com>2020-07-10 10:35:32 +1000
commitdfd9279f87791e36a5212726781c31fbe7110361 (patch)
treeee044449e757e2ae56e876efd02c5b1965c05924
parent402e46bb82964366746b86d77eb5afa69c279539 (diff)
Resolve complation issues with -fno-common (default from gcc-10)
Extends the MakeHeader script to auto-generate correct "extern" function declarations in some cases that it currently does not. Related to https://github.com/hishamhm/htop/pull/981
-rw-r--r--CRT.c4
-rw-r--r--CRT.h28
-rw-r--r--linux/LinuxProcess.c3
-rw-r--r--linux/LinuxProcess.h19
-rwxr-xr-xscripts/MakeHeader.py4
5 files changed, 31 insertions, 27 deletions
diff --git a/CRT.c b/CRT.c
index ca9a10dd..088cd1a4 100644
--- a/CRT.c
+++ b/CRT.c
@@ -131,9 +131,9 @@ typedef enum ColorElements_ {
LAST_COLORELEMENT
} ColorElements;
-void CRT_fatalError(const char* note) __attribute__ ((noreturn));
+extern void CRT_fatalError(const char* note) __attribute__ ((noreturn));
-void CRT_handleSIGSEGV(int sgn);
+extern void CRT_handleSIGSEGV(int sgn);
#define KEY_ALT(x) (KEY_F(64 - 26) + (x - 'A'))
diff --git a/CRT.h b/CRT.h
index 933fe068..bc3fb8b7 100644
--- a/CRT.h
+++ b/CRT.h
@@ -119,9 +119,9 @@ typedef enum ColorElements_ {
LAST_COLORELEMENT
} ColorElements;
-void CRT_fatalError(const char* note) __attribute__ ((noreturn));
+extern void CRT_fatalError(const char* note) __attribute__ ((noreturn));
-void CRT_handleSIGSEGV(int sgn);
+extern void CRT_handleSIGSEGV(int sgn);
#define KEY_ALT(x) (KEY_F(64 - 26) + (x - 'A'))
@@ -140,7 +140,7 @@ extern const char **CRT_treeStr;
extern int CRT_delay;
-int* CRT_colors;
+extern int* CRT_colors;
extern int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT];
@@ -150,21 +150,21 @@ extern int CRT_scrollHAmount;
extern int CRT_scrollWheelVAmount;
-char* CRT_termType;
+extern char* CRT_termType;
// TODO move color scheme to Settings, perhaps?
extern int CRT_colorScheme;
-void *backtraceArray[128];
+extern void *backtraceArray[128];
#if HAVE_SETUID_ENABLED
#define DIE(msg) do { CRT_done(); fprintf(stderr, msg); exit(1); } while(0)
-void CRT_dropPrivileges();
+extern void CRT_dropPrivileges();
-void CRT_restorePrivileges();
+extern void CRT_restorePrivileges();
#else
@@ -179,18 +179,18 @@ void CRT_restorePrivileges();
// TODO: pass an instance of Settings instead.
-void CRT_init(int delay, int colorScheme);
+extern void CRT_init(int delay, int colorScheme);
-void CRT_done();
+extern void CRT_done();
-void CRT_fatalError(const char* note);
+extern void CRT_fatalError(const char* note);
-int CRT_readKey();
+extern int CRT_readKey();
-void CRT_disableDelay();
+extern void CRT_disableDelay();
-void CRT_enableDelay();
+extern void CRT_enableDelay();
-void CRT_setColors(int colorScheme);
+extern void CRT_setColors(int colorScheme);
#endif
diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c
index 5f697078..7fd7ddce 100644
--- a/linux/LinuxProcess.c
+++ b/linux/LinuxProcess.c
@@ -154,7 +154,8 @@ typedef struct LinuxProcess_ {
}*/
-long long btime; /* semi-global */
+/* semi-global */
+long long btime;
ProcessFieldData Process_fields[] = {
[0] = { .name = "", .title = NULL, .description = NULL, .flags = 0, },
diff --git a/linux/LinuxProcess.h b/linux/LinuxProcess.h
index 6ce3037d..586aa717 100644
--- a/linux/LinuxProcess.h
+++ b/linux/LinuxProcess.h
@@ -144,7 +144,8 @@ typedef struct LinuxProcess_ {
#endif
-long long btime; /* semi-global */
+/* semi-global */
+extern long long btime;
extern ProcessFieldData Process_fields[];
@@ -152,9 +153,9 @@ extern ProcessPidColumn Process_pidColumns[];
extern ProcessClass LinuxProcess_class;
-LinuxProcess* LinuxProcess_new(Settings* settings);
+extern LinuxProcess* LinuxProcess_new(Settings* settings);
-void Process_delete(Object* cast);
+extern void Process_delete(Object* cast);
/*
[1] Note that before kernel 2.6.26 a process that has not asked for
@@ -166,19 +167,19 @@ extern io_priority;
*/
#define LinuxProcess_effectiveIOPriority(p_) (IOPriority_class(p_->ioPriority) == IOPRIO_CLASS_NONE ? IOPriority_tuple(IOPRIO_CLASS_BE, (p_->super.nice + 20) / 5) : p_->ioPriority)
-IOPriority LinuxProcess_updateIOPriority(LinuxProcess* this);
+extern IOPriority LinuxProcess_updateIOPriority(LinuxProcess* this);
-bool LinuxProcess_setIOPriority(LinuxProcess* this, IOPriority ioprio);
+extern bool LinuxProcess_setIOPriority(LinuxProcess* this, IOPriority ioprio);
#ifdef HAVE_DELAYACCT
-void LinuxProcess_printDelay(float delay_percent, char* buffer, int n);
+extern void LinuxProcess_printDelay(float delay_percent, char* buffer, int n);
#endif
-void LinuxProcess_writeField(Process* this, RichString* str, ProcessField field);
+extern void LinuxProcess_writeField(Process* this, RichString* str, ProcessField field);
-long LinuxProcess_compare(const void* v1, const void* v2);
+extern long LinuxProcess_compare(const void* v1, const void* v2);
-bool Process_isThread(Process* this);
+extern bool Process_isThread(Process* this);
#endif
diff --git a/scripts/MakeHeader.py b/scripts/MakeHeader.py
index 349531b8..3ef34b88 100755
--- a/scripts/MakeHeader.py
+++ b/scripts/MakeHeader.py
@@ -54,8 +54,10 @@ for line in file.readlines():
elif line.startswith("typedef struct"):
state = SKIP
elif line[-1] == "{":
- out.write( line[:-2].replace("inline", "extern") + ";\n" )
+ out.write("extern " + line[:-2].replace("inline ", "") + ";\n")
state = SKIP
+ elif line[-1] == ";":
+ out.write("extern " + line + "\n")
else:
out.write( line + "\n")
is_blank = False

© 2014-2024 Faster IT GmbH | imprint | privacy policy