On Fri, Jan 31 2020, Michael Forney <[email protected]> wrote:
> Every source file that includes extern.h will have its own definition
> of these variables. Since many compilers allocate the variables with
> .comm, they end up getting merged by the linker without error.
> However, ISO C requires exactly one definition of objects with
> external linkage.

LGTM, ok jca@.

I'll commit it if none of the usual suspects show up soon.

> gcc 10 will enable -fno-common by default, which will put
> zero-initialized data in .bss, causing linking errors when multiple
> definitions are present.

Good to know, thanks.

> ---
>  usr.sbin/acme-client/extern.h | 4 ++--
>  usr.sbin/acme-client/main.c   | 5 +++--
>  2 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/usr.sbin/acme-client/extern.h b/usr.sbin/acme-client/extern.h
> index e6b7af0d05b..f280b3e279e 100644
> --- a/usr.sbin/acme-client/extern.h
> +++ b/usr.sbin/acme-client/extern.h
> @@ -277,12 +277,12 @@ char            *json_fmt_signed(const char *, const 
> char *, const char *);
>  /*
>   * Should we print debugging messages?
>   */
> -int           verbose;
> +extern int    verbose;
>  
>  /*
>   * What component is the process within (COMP__MAX for none)?
>   */
> -enum comp     proccomp;
> +extern enum comp proccomp;
>  
>  __END_DECLS
>  
> diff --git a/usr.sbin/acme-client/main.c b/usr.sbin/acme-client/main.c
> index 7cbeeb7de03..1f59e6c755d 100644
> --- a/usr.sbin/acme-client/main.c
> +++ b/usr.sbin/acme-client/main.c
> @@ -32,6 +32,9 @@
>  #define WWW_DIR "/var/www/acme"
>  #define CONF_FILE "/etc/acme-client.conf"
>  
> +int           verbose;
> +enum comp     proccomp;
> +
>  int
>  main(int argc, char *argv[])
>  {
> @@ -46,8 +49,6 @@ main(int argc, char *argv[])
>       int               c, rc, revocate = 0;
>       int               popts = 0;
>       pid_t             pids[COMP__MAX];
> -     extern int        verbose;
> -     extern enum comp  proccomp;
>       size_t            i, altsz, ne;
>  
>       struct acme_conf        *conf = NULL;

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to