summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2019-11-20 01:22:06 -0800
committerJune McEnroe <june@causal.agency>2019-11-21 16:26:37 -0500
commitf4b0d09e3f782511b99626104ca960dd5decd4b8 (patch)
treea7d7b4550e803624c9f33562ba89c0358b2019fe
parentZero temporary SASL PLAIN buffer (diff)
downloadpounce-f4b0d09e3f782511b99626104ca960dd5decd4b8.tar.gz
pounce-f4b0d09e3f782511b99626104ca960dd5decd4b8.zip
Declare globals as extern in headers, and define in source file
Otherwise, each source file that includes the header gets its own
definition, and according to the C standard (C99 6.9p5):

> If an identifier declared with external linkage is used in an
> expression (other than as part of the operand of a sizeof operator
> whose result is an integer constant), somewhere in the entire
> program there shall be exactly one external definition for the
> identifier

Most compilers use the .bss section for zero data, but if it uses
.data instead, or if -Wl,--warn-common is used, this will cause a
linking error.
-rw-r--r--bounce.c2
-rw-r--r--bounce.h10
-rw-r--r--client.c3
-rw-r--r--state.c3
4 files changed, 13 insertions, 5 deletions
diff --git a/bounce.c b/bounce.c
index 908a1cb..d4b6175 100644
--- a/bounce.c
+++ b/bounce.c
@@ -41,6 +41,8 @@
 
 #include "bounce.h"
 
+bool verbose;
+
 static void hashPass(void) {
 	char *pass = getpass("Password: ");
 	byte rand[12];
diff --git a/bounce.h b/bounce.h
index 0e12aa5..17cf5b6 100644
--- a/bounce.h
+++ b/bounce.h
@@ -110,7 +110,7 @@ static inline const char *capList(enum Cap caps) {
 	return buf;
 }
 
-bool verbose;
+extern bool verbose;
 
 void ringAlloc(size_t len);
 void ringProduce(const char *line);
@@ -134,8 +134,8 @@ void serverSend(const char *ptr, size_t len);
 void serverFormat(const char *format, ...)
 	__attribute__((format(printf, 1, 2)));
 
-char *clientPass;
-char *clientAway;
+extern char *clientPass;
+extern char *clientAway;
 struct Client *clientAlloc(struct tls *tls);
 void clientFree(struct Client *client);
 bool clientError(const struct Client *client);
@@ -146,8 +146,8 @@ void clientFormat(struct Client *client, const char *format, ...)
 size_t clientDiff(const struct Client *client);
 void clientConsume(struct Client *client);
 
-bool stateNoNames;
-enum Cap stateCaps;
+extern bool stateNoNames;
+extern enum Cap stateCaps;
 void stateLogin(
 	const char *pass, bool sasl, const char *plain,
 	const char *nick, const char *user, const char *real
diff --git a/client.c b/client.c
index d6b7b16..9ff192e 100644
--- a/client.c
+++ b/client.c
@@ -30,6 +30,9 @@
 
 #include "bounce.h"
 
+char *clientPass;
+char *clientAway;
+
 static size_t active;
 
 enum Need {
diff --git a/state.c b/state.c
index 154e16d..a661ce7 100644
--- a/state.c
+++ b/state.c
@@ -25,6 +25,9 @@
 
 #include "bounce.h"
 
+bool stateNoNames;
+enum Cap stateCaps;
+
 typedef void Handler(struct Message *msg);
 
 static void require(const struct Message *msg, bool origin, size_t len) {
e fun to make but I never actually used them. 2021-09-22Remove Linux-specific utilitiesJune McEnroe I haven't used these in ages. 2021-09-22Call sandbox in CGI modeJune McEnroe Otherwise upload won't actually work. 2021-09-22Support HTTP PUT in upJune McEnroe For use by Palaver[1]. Unfortunately, at least in the current App Store version of Palaver, this doesn't work correctly with basic auth. [1]: https://palaverapp.com/guides/commands/set.html#ui-image_service 2021-09-22Remove default faviconJune McEnroe I hate these things and also this one sucks. 2021-09-21Use Z_FILTERED strategyJune McEnroe 2021-09-21Recalculate various lengths only as neededJune McEnroe This actually speeds things up quite a bit, saving roughly a second on a big PNG screenshot. Almost all the remaining time is spent in deflate. 2021-09-21Rewrite pngo, add explicit optionsJune McEnroe Interesting to see how my code habits have changed. 2021-09-16Fix /* **/ comment matchingJune McEnroe 2021-09-15Remove typer, add downgrade to READMEJune McEnroe 2021-09-15Set bot mode on downgradeJune McEnroe 2021-09-15Enter capsicum in downgradeJune McEnroe 2021-09-15Factor out common parts of downgrade messagesJune McEnroe Also bump the message cap to 1024 because that is ostensibly useful for replying to older messages. 2021-09-14Add downgrade IRC botJune McEnroe 2021-09-14Sort by title if authors matchJune McEnroe There are probably better things to sort by but title definitely always exists. 2021-09-13Swap-remove tags as they're foundJune McEnroe This makes it even faster. From ~1s on a sqlite3.c amalgamation to ~0.85s. 2021-09-12Replace htagml regex with strncmpJune McEnroe Since ctags only ever produces regular expressions of the form /^re$/ or /^re/ with no other special characters, instead unescape the pattern and simply use strncmp. Running on a sqlite3.c amalgamation, the regex version takes ~37s while the strncmp version takes ~1s, producing identical output. Big win! 2021-09-11Also defer printing comment for lone close-parensJune McEnroe 2021-09-10Publish "git-comment"June McEnroe 2021-09-10Add git comment --pretty optionJune McEnroe 2021-09-08Defer printing comment if line is blank or closing braceJune McEnroe This fixes badly indented comments. 2021-09-08Up default min-repeat to 30 linesJune McEnroe 2021-09-08Handle dirty lines in git-commentJune McEnroe 2021-09-08Document and install git-commentJune McEnroe 2021-09-08Add repeat and all options to git-commentJune McEnroe 2021-09-08Add group threshold to git-commentJune McEnroe