Message ID | 20230210112449.wctwfhmwwwg7c26h@tarta.nabijaczleweli.xyz (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Herbert Xu |
Headers | show |
Series | [v3] Prototype all function definitions for C23 compat | expand |
On Fri, Feb 10, 2023 at 12:24:49PM +0100, наб wrote: > Current compilers just produce warnings about unprototyped definitions, > noting that they've been deprecated for decades now, but in C23 mode > they're rejected, because they got removed, cf. draft and paper: > https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3054.pdf > https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2841.htm > > In short, int whatever(a, b, c) is illegal, and int whatever() is now > finally equivalent to int whatever(void); or, to put it another way, > when building in C23 mode (which is not /yet/ the default), you get > -- >8 -- > $ make -j25 > make all-recursive > make[1]: Entering directory '/home/nabijaczleweli/code/dash' > Making all in src > make[2]: Entering directory '/home/nabijaczleweli/code/dash/src' > CC builtins.def > CC mknodes > GEN token.h > GEN token_vars.h > CC mksyntax > GEN builtins.h > GEN syntax.h > GEN nodes.h > make all-am > make[3]: Entering directory '/home/nabijaczleweli/code/dash/src' > CC alias.o > CC arith_yacc.o > CC arith_yylex.o > CC cd.o > CC error.o > CC eval.o > CC exec.o > CC expand.o > CC histedit.o > CC input.o > CC jobs.o > CC mail.o > CC main.o > CC memalloc.o > CC miscbltin.o > CC mystring.o > CC options.o > CC parser.o > CC redir.o > CC show.o > CC trap.o > CC output.o > CC system.o > CC bltin/printf.o > CC bltin/test.o > CC bltin/times.o > CC var.o > CC builtins.o > histedit.c:376:16: warning: passing 'const char *' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] > evalstring(s, 0); > ^ > ./eval.h:54:22: note: passing argument to parameter here > int evalstring(char *, int); > ^ > CC mkinit > exec.c:779:18: error: unknown type name 'out' > describe_command(out, command, path, verbose) > ^ > exec.c:779:23: error: unknown type name 'command' > describe_command(out, command, path, verbose) > ^ > exec.c:779:32: error: unknown type name 'path' > describe_command(out, command, path, verbose) > ^ > exec.c:779:38: error: unknown type name 'verbose' > describe_command(out, command, path, verbose) > ^ > exec.c:779:46: error: expected ';' after top level declarator > describe_command(out, command, path, verbose) > ^ > ; > exec.c:784:1: error: expected identifier or '(' > { > ^ > exec.c:885:12: error: unknown type name 'argc' > commandcmd(argc, argv) > ^ > exec.c:885:18:options.c error: :unknown type name 'argv'393 > :commandcmd(argc, argv)14: > ^ > error: unknown type name 'value' > getoptsreset(value) > ^ > exec.c:885:23: error: expected ';' after top level declarator > commandcmd(argc, argv) > ^ > ; > options.c:393:20: exec.c:888:1: error: error: expected identifier or '(' > {expected ';' after top level declarator > > ^ > getoptsreset(value) > ^ > ; > options.c:395:1: error: expected identifier or '(' > { > ^ > 10 errors generated. > CC nodes.o > make[3]: *** [Makefile:478: exec.o] Error 1 > make[3]: *** Waiting for unfinished jobs.... > 3 errors generated. > jobs.c:247:9: error: unknown type name 'argc' > killcmd(argc, argv) > ^ > jobs.c:247:15: error: unknown type name 'argv' > killcmd(argc, argv) > ^ > jobs.c:247:20: error: expected ';' after top level declarator > killcmd(argc, argv) > ^ > ; > jobs.c:250:1: error: expected identifier or '(' > { > ^ > make[3]: *** [Makefile:478: options.o] Error 1 > redir.c:288:13: error: unknown type name 'redir' > dupredirect(redir, f) > ^ > redir.c:288:20: error: unknown type name 'f' > dupredirect(redir, f) > ^ > redir.c:288:22: error: expected ';' after top level declarator > dupredirect(redir, f) > ^ > ; > redir.c:295:2: error: expected identifier or '(' > { > ^ > 4 errors generated. > make[3]: *** [Makefile:478: redir.o] Error 1 > 4 errors generated. > make[3]: *** [Makefile:478: jobs.o] Error 1 > nodes.c:122:10: error: unknown type name 'n' > calcsize(n) > ^ > nodes.c:122:12: error: expected ';' after top level declarator > calcsize(n) > ^ > ; > nodes.c:124:1: error: expected identifier or '(' > { > ^ > nodes.c:206:14: error: unknown type name 'lp' > sizenodelist(lp) > ^ > nodes.c:206:17: error: expected ';' after top level declarator > sizenodelist(lp) > ^ > ; > nodes.c:208:1: error: expected identifier or '(' > { > ^ > nodes.c:219:10: error: unknown type name 'n' > copynode(n) > ^ > nodes.c:219:12: error: expected ';' after top level declarator > copynode(n) > ^ > ; > nodes.c:221:1: error: expected identifier or '(' > { > ^ > nodes.c:317:14: error: unknown type name 'lp' > copynodelist(lp) > ^ > nodes.c:317:17: error: expected ';' after top level declarator > copynodelist(lp) > ^ > ; > nodes.c:319:1: error: expected identifier or '(' > { > ^ > nodes.c:339:13: error: unknown type name 's' > nodesavestr(s) > ^ > nodes.c:339:15: error: expected ';' after top level declarator > nodesavestr(s) > ^ > ; > nodes.c:341:1: error: expected identifier or '(' > { > ^ > 15 errors generated. > make[3]: *** [Makefile:478: nodes.o] Error 1 > 1 warning generated. > make[3]: Leaving directory '/home/nabijaczleweli/code/dash/src' > -- >8 -- > > With this patch, you're just left with the histedit.c warning. > --- > Yeah, Harald's right, I completely missed that the type and linkage > layout changed, I only saw the arguments move > > src/exec.c | 12 +++--------- > src/jobs.c | 4 +--- > src/mksignames.c | 3 +-- > src/nodes.c.pat | 15 +++++---------- > src/options.c | 3 +-- > src/redir.c | 11 +++-------- > 6 files changed, 14 insertions(+), 34 deletions(-) Patch applied with additional changes to ensure the return type is on the same line as the rest of the function declaration. Thanks.
diff --git a/src/exec.c b/src/exec.c index 83cba94..5d25ce3 100644 --- a/src/exec.c +++ b/src/exec.c @@ -775,12 +775,8 @@ typecmd(int argc, char **argv) return err; } -STATIC int -describe_command(out, command, path, verbose) - struct output *out; - char *command; - const char *path; - int verbose; +static int describe_command(struct output *out, char *command, + const char *path, int verbose) { struct cmdentry entry; struct tblentry *cmdp; @@ -882,9 +878,7 @@ out: } int -commandcmd(argc, argv) - int argc; - char **argv; +commandcmd(int argc, char **argv) { char *cmd; int c; diff --git a/src/jobs.c b/src/jobs.c index f3b9ffc..6176d0c 100644 --- a/src/jobs.c +++ b/src/jobs.c @@ -244,9 +244,7 @@ close: int -killcmd(argc, argv) - int argc; - char **argv; +killcmd(int argc, char **argv) { extern char *signal_names[]; int signo = -1; diff --git a/src/mksignames.c b/src/mksignames.c index a832eab..8ccdf38 100644 --- a/src/mksignames.c +++ b/src/mksignames.c @@ -361,8 +361,7 @@ initialize_signames () } void -write_signames (stream) - FILE *stream; +write_signames (FILE *stream) { register int i; diff --git a/src/nodes.c.pat b/src/nodes.c.pat index 9125bc7..463f7f5 100644 --- a/src/nodes.c.pat +++ b/src/nodes.c.pat @@ -88,8 +88,7 @@ copyfunc(union node *n) STATIC void -calcsize(n) - union node *n; +calcsize(union node *n) { %CALCSIZE } @@ -97,8 +96,7 @@ calcsize(n) STATIC void -sizenodelist(lp) - struct nodelist *lp; +sizenodelist(struct nodelist *lp) { while (lp) { funcblocksize += SHELL_ALIGN(sizeof(struct nodelist)); @@ -110,8 +108,7 @@ sizenodelist(lp) STATIC union node * -copynode(n) - union node *n; +copynode(union node *n) { union node *new; @@ -121,8 +118,7 @@ copynode(n) STATIC struct nodelist * -copynodelist(lp) - struct nodelist *lp; +copynodelist(struct nodelist *lp) { struct nodelist *start; struct nodelist **lpp; @@ -143,8 +139,7 @@ copynodelist(lp) STATIC char * -nodesavestr(s) - char *s; +nodesavestr(char *s) { char *rtn = funcstring; diff --git a/src/options.c b/src/options.c index 2d4bd3b..2cf40b4 100644 --- a/src/options.c +++ b/src/options.c @@ -390,8 +390,7 @@ setcmd(int argc, char **argv) void -getoptsreset(value) - const char *value; +getoptsreset(const char *value) { shellparam.optind = number(value) ?: 1; shellparam.optoff = -1; diff --git a/src/redir.c b/src/redir.c index 631ddc9..a3c6baa 100644 --- a/src/redir.c +++ b/src/redir.c @@ -283,16 +283,11 @@ ecreate: STATIC void #ifdef notyet -dupredirect(redir, f, memory) +dupredirect(union node *redir, int f, char memory[10]) #else -dupredirect(redir, f) +dupredirect(union node *redir, int f) #endif - union node *redir; - int f; -#ifdef notyet - char memory[10]; -#endif - { +{ int fd = redir->nfile.fd; int err = 0;