mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 07:07:04 +02:00
BUILD: definitely silence some stupid GCC warnings
It's becoming increasingly difficult to ignore unwanted function returns in debug code with gcc. Now even when you try to work around it, it suggests a way to write your code differently. For example : src/frontend.c:187:65: warning: if statement has empty body [-Wempty-body] if (write(1, trash.str, trash.len) < 0) /* shut gcc warning */; ^ src/frontend.c:187:65: note: put the semicolon on a separate line to silence this warning 1 warning generated. This is totally unacceptable, this code already had to be written this way to shut it up in earlier versions. And now it comments the form ? What's the purpose of the C language if you can't write anymore the code that does what you want ? Emeric proposed to just keep a global variable to drain such useless results so that gcc stops complaining all the time it believes people who write code are monkeys. The solution is acceptable because the useless assignment is done only in debug code so it will not impact performance. This patch implements this, until gcc becomes even "smarter" to detect that we tried to cheat.
This commit is contained in:
parent
2819e99417
commit
89efaed6b6
@ -760,6 +760,19 @@ char *env_expand(char *in);
|
||||
*/
|
||||
#define fddebug(msg...) do { char *_m = NULL; memprintf(&_m, ##msg); if (_m) write(-1, _m, strlen(_m)); free(_m); } while (0)
|
||||
|
||||
/* used from everywhere just to drain results we don't want to read and which
|
||||
* recent versions of gcc increasingly and annoyingly complain about.
|
||||
*/
|
||||
extern int shut_your_big_mouth_gcc_int;
|
||||
|
||||
/* used from everywhere just to drain results we don't want to read and which
|
||||
* recent versions of gcc increasingly and annoyingly complain about.
|
||||
*/
|
||||
static inline void shut_your_big_mouth_gcc(int r)
|
||||
{
|
||||
shut_your_big_mouth_gcc_int = r;
|
||||
}
|
||||
|
||||
/* same as strstr() but case-insensitive */
|
||||
const char *strnistr(const char *str1, int len_str1, const char *str2, int len_str2);
|
||||
|
||||
|
@ -99,7 +99,7 @@ static struct task *appsession_refresh(struct task *t)
|
||||
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE))) {
|
||||
chunk_printf(&trash, "appsession_refresh: cleaning up expired Session '%s' on Server %s\n",
|
||||
element->sessid, element->serverid?element->serverid:"(null)");
|
||||
if (write(1, trash.str, trash.len) < 0) /* shut gcc warning */;
|
||||
shut_your_big_mouth_gcc(write(1, trash.str, trash.len));
|
||||
}
|
||||
/* delete the expired element from within the hash table */
|
||||
LIST_DEL(&element->hash_list);
|
||||
|
@ -184,7 +184,7 @@ int frontend_accept(struct session *s)
|
||||
break;
|
||||
}
|
||||
|
||||
if (write(1, trash.str, trash.len) < 0) /* shut gcc warning */;
|
||||
shut_your_big_mouth_gcc(write(1, trash.str, trash.len));
|
||||
}
|
||||
|
||||
if (s->fe->mode == PR_MODE_HTTP)
|
||||
|
@ -193,6 +193,11 @@ const struct linger nolinger = { .l_onoff = 1, .l_linger = 0 };
|
||||
char hostname[MAX_HOSTNAME_LEN];
|
||||
char localpeer[MAX_HOSTNAME_LEN];
|
||||
|
||||
/* used from everywhere just to drain results we don't want to read and which
|
||||
* recent versions of gcc increasingly and annoyingly complain about.
|
||||
*/
|
||||
int shut_your_big_mouth_gcc_int = 0;
|
||||
|
||||
/* list of the temporarily limited listeners because of lack of resource */
|
||||
struct list global_listener_queue = LIST_HEAD_INIT(global_listener_queue);
|
||||
struct task *global_listener_queue_task;
|
||||
@ -1541,7 +1546,7 @@ int main(int argc, char **argv)
|
||||
if (pidfd >= 0) {
|
||||
char pidstr[100];
|
||||
snprintf(pidstr, sizeof(pidstr), "%d\n", ret);
|
||||
if (write(pidfd, pidstr, strlen(pidstr)) < 0) /* shut gcc warning */;
|
||||
shut_your_big_mouth_gcc(write(pidfd, pidstr, strlen(pidstr)));
|
||||
}
|
||||
relative_pid++; /* each child will get a different one */
|
||||
}
|
||||
|
@ -7992,7 +7992,7 @@ void debug_hdr(const char *dir, struct session *t, const char *start, const char
|
||||
UBOUND(max, trash.size - trash.len - 3);
|
||||
trash.len += strlcpy2(trash.str + trash.len, start, max + 1);
|
||||
trash.str[trash.len++] = '\n';
|
||||
if (write(1, trash.str, trash.len) < 0) /* shut gcc warning */;
|
||||
shut_your_big_mouth_gcc(write(1, trash.str, trash.len));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2359,7 +2359,7 @@ struct task *process_session(struct task *t)
|
||||
s->uniq_id, s->be->id,
|
||||
objt_conn(s->si[0].end) ? (unsigned short)objt_conn(s->si[0].end)->t.sock.fd : -1,
|
||||
objt_conn(s->si[1].end) ? (unsigned short)objt_conn(s->si[1].end)->t.sock.fd : -1);
|
||||
if (write(1, trash.str, trash.len) < 0) /* shut gcc warning */;
|
||||
shut_your_big_mouth_gcc(write(1, trash.str, trash.len));
|
||||
}
|
||||
|
||||
if (s->si[0].state == SI_ST_CLO &&
|
||||
@ -2368,7 +2368,7 @@ struct task *process_session(struct task *t)
|
||||
s->uniq_id, s->be->id,
|
||||
objt_conn(s->si[0].end) ? (unsigned short)objt_conn(s->si[0].end)->t.sock.fd : -1,
|
||||
objt_conn(s->si[1].end) ? (unsigned short)objt_conn(s->si[1].end)->t.sock.fd : -1);
|
||||
if (write(1, trash.str, trash.len) < 0) /* shut gcc warning */;
|
||||
shut_your_big_mouth_gcc(write(1, trash.str, trash.len));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2473,7 +2473,7 @@ struct task *process_session(struct task *t)
|
||||
s->uniq_id, s->be->id,
|
||||
objt_conn(s->si[0].end) ? (unsigned short)objt_conn(s->si[0].end)->t.sock.fd : -1,
|
||||
objt_conn(s->si[1].end) ? (unsigned short)objt_conn(s->si[1].end)->t.sock.fd : -1);
|
||||
if (write(1, trash.str, trash.len) < 0) /* shut gcc warning */;
|
||||
shut_your_big_mouth_gcc(write(1, trash.str, trash.len));
|
||||
}
|
||||
|
||||
s->logs.t_close = tv_ms_elapsed(&s->logs.tv_accept, &now);
|
||||
|
Loading…
Reference in New Issue
Block a user