Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Jan 2009 14:23:49 +0100
From:      =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= <des@des.no>
To:        Garrett Cooper <yanefbsd@gmail.com>
Cc:        "amd64@freebsd.org" <amd64@freebsd.org>, Hackers freeBSD <freebsd-hackers@freebsd.org>
Subject:   Re: Confused by segfault with legitimate call to strerror(3) on amd64 / sysctl(3) setting `odd' errno's
Message-ID:  <86wscuyska.fsf@ds4.des.no>
In-Reply-To: <7d6fde3d0901160041n55466290l55f737d274a40895@mail.gmail.com> (Garrett Cooper's message of "Fri, 16 Jan 2009 00:41:37 -0800")
References:  <7d6fde3d0901160041n55466290l55f737d274a40895@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Garrett Cooper <yanefbsd@gmail.com> writes:
> #include <err.h>
> #include <errno.h>
> #include <stdio.h>
> #include <sys/types.h>
> #include <sys/sysctl.h>

You should always put your sys includes before your non-sys includes,
and in any case, <sys/types.h> should always come first.

>                 printf("Errno: %d\n", errno);
>                 errx(errno, "Error: %s", strerror(errno));

In addition to what everybody else said, errno is not an appropriate
value for errx's first argument.  Use 1 or EXIT_FAILURE (or one of the
macros defined in <sysexits.h>, but I wouldn't recommend it).  Also, you
probably want to use err(), not errx(), and *always* compile with -Wall
-Wextra, and unless you're going to run gdb on your program, -O2 (which
enables additional code analysis)

DES
--=20
Dag-Erling Sm=C3=B8rgrav - des@des.no



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86wscuyska.fsf>