Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lxc
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
lxc
Commits
cf0fd972
Unverified
Commit
cf0fd972
authored
Sep 21, 2018
by
Christian Brauner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
autotools: add -Wimplicit-fallthrough
Signed-off-by:
Christian Brauner
<
christian.brauner@ubuntu.com
>
parent
08549241
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
112 additions
and
8 deletions
+112
-8
CODING_STYLE.md
CODING_STYLE.md
+29
-0
ax_check_compile_flag.m4
config/ax_check_compile_flag.m4
+53
-0
configure.ac
configure.ac
+3
-0
attach.c
src/lxc/attach.c
+2
-0
lxc_init.c
src/lxc/cmd/lxc_init.c
+5
-4
compiler.h
src/lxc/compiler.h
+14
-0
arguments.c
src/lxc/tools/arguments.c
+6
-4
No files found.
CODING_STYLE.md
View file @
cf0fd972
...
@@ -633,3 +633,32 @@ string.
...
@@ -633,3 +633,32 @@ string.
Unless you have a valid reason to accept truncation you must check whether
Unless you have a valid reason to accept truncation you must check whether
truncation has occurred, treat it as an error, and handle the error
truncation has occurred, treat it as an error, and handle the error
appropriately.
appropriately.
## 25) Use `__fallthrough__` in switch statements
If LXC detects that the compiler is new enough it will tell it to check
`
switch
`
statements
for
non-documented fallthroughs. Please always place
a
`
__fallthrough__
`
after a
`
case
`
which falls through the next one.
```
c
int lxc_attach_run_command(void
*
payload)
{
int ret = -1;
lxc_attach_command_t
*
cmd = payload;
ret = execvp(cmd->program, cmd->argv);
if (ret < 0) {
switch (errno) {
case ENOEXEC:
ret = 126;
break;
case ENOENT:
ret = 127;
break;
}
}
SYSERROR("Failed to exec \"%s\"", cmd->program);
return ret;
}
```
config/ax_check_compile_flag.m4
0 → 100644
View file @
cf0fd972
# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
#
# DESCRIPTION
#
# Check whether the given FLAG works with the current language's compiler
# or gives an error. (Warnings, however, are ignored)
#
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
# success/failure.
#
# If EXTRA-FLAGS is defined, it is added to the current language's default
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
# force the compiler to issue an error when a bad flag is given.
#
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
#
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
#
# LICENSE
#
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 6
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
[AS_VAR_SET(CACHEVAR,[yes])],
[AS_VAR_SET(CACHEVAR,[no])])
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
AS_VAR_IF(CACHEVAR,yes,
[m4_default([$2], :)],
[m4_default([$3], :)])
AS_VAR_POPDEF([CACHEVAR])dnl
])dnl AX_CHECK_COMPILE_FLAGS
configure.ac
View file @
cf0fd972
...
@@ -683,6 +683,9 @@ AC_PROG_SED
...
@@ -683,6 +683,9 @@ AC_PROG_SED
# See if we support thread-local storage.
# See if we support thread-local storage.
LXC_CHECK_TLS
LXC_CHECK_TLS
AX_CHECK_COMPILE_FLAG([-fdiagnostics-color], [CFLAGS="$CFLAGS -fdiagnostics-color"],,[-Werror])
AX_CHECK_COMPILE_FLAG([-fdiagnostics-color], [CFLAGS="$CFLAGS -Wimplicit-fallthrough"],,[-Werror])
CFLAGS="$CFLAGS -Wvla -std=gnu11"
CFLAGS="$CFLAGS -Wvla -std=gnu11"
if test "x$enable_werror" = "xyes"; then
if test "x$enable_werror" = "xyes"; then
CFLAGS="$CFLAGS -Werror"
CFLAGS="$CFLAGS -Werror"
...
...
src/lxc/attach.c
View file @
cf0fd972
...
@@ -1520,8 +1520,10 @@ int lxc_attach_run_command(void *payload)
...
@@ -1520,8 +1520,10 @@ int lxc_attach_run_command(void *payload)
switch
(
errno
)
{
switch
(
errno
)
{
case
ENOEXEC
:
case
ENOEXEC
:
ret
=
126
;
ret
=
126
;
break
;
case
ENOENT
:
case
ENOENT
:
ret
=
127
;
ret
=
127
;
break
;
}
}
}
}
...
...
src/lxc/cmd/lxc_init.c
View file @
cf0fd972
...
@@ -39,6 +39,7 @@
...
@@ -39,6 +39,7 @@
#include <lxc/lxccontainer.h>
#include <lxc/lxccontainer.h>
#include <lxc/version.h>
#include <lxc/version.h>
#include "compiler.h"
#include "error.h"
#include "error.h"
#include "initutils.h"
#include "initutils.h"
#include "log.h"
#include "log.h"
...
@@ -466,7 +467,7 @@ out:
...
@@ -466,7 +467,7 @@ out:
exit
(
exit_with
);
exit
(
exit_with
);
}
}
static
void
print_usage
(
const
struct
option
longopts
[])
__noreturn__
static
void
print_usage_exit
(
const
struct
option
longopts
[])
{
{
fprintf
(
stderr
,
"Usage: lxc-init [-n|--name=NAME] [-h|--help] [--usage] [--version]
\n
\
fprintf
(
stderr
,
"Usage: lxc-init [-n|--name=NAME] [-h|--help] [--usage] [--version]
\n
\
...
@@ -474,7 +475,7 @@ static void print_usage(const struct option longopts[])
...
@@ -474,7 +475,7 @@ static void print_usage(const struct option longopts[])
exit
(
0
);
exit
(
0
);
}
}
static
void
print_version
(
void
)
__noreturn__
static
void
print_version_exit
(
void
)
{
{
printf
(
"%s
\n
"
,
LXC_VERSION
);
printf
(
"%s
\n
"
,
LXC_VERSION
);
exit
(
0
);
exit
(
0
);
...
@@ -531,9 +532,9 @@ static int arguments_parse(struct arguments *args, int argc,
...
@@ -531,9 +532,9 @@ static int arguments_parse(struct arguments *args, int argc,
args
->
lxcpath
=
optarg
;
args
->
lxcpath
=
optarg
;
break
;
break
;
case
OPT_USAGE
:
case
OPT_USAGE
:
print_usage
(
args
->
options
);
print_usage
_exit
(
args
->
options
);
case
OPT_VERSION
:
case
OPT_VERSION
:
print_version
();
print_version
_exit
();
case
'?'
:
case
'?'
:
print_help
();
print_help
();
exit
(
EXIT_FAILURE
);
exit
(
EXIT_FAILURE
);
...
...
src/lxc/compiler.h
View file @
cf0fd972
...
@@ -32,4 +32,18 @@
...
@@ -32,4 +32,18 @@
#endif
#endif
#endif
#endif
#if defined(__GNUC__) && __GNUC__ >= 7 || defined(__clang__)
#define __fallthrough__ __attribute__((fallthrough))
#else
#define __fallthrough__
#endif
#ifndef _noreturn_
#if __STDC_VERSION__ >= 201112L
#define __noreturn__ _Noreturn
#else
#define __noreturn__ __attribute__((noreturn))
#endif
#endif
#endif
/* __LXC_COMPILER_H */
#endif
/* __LXC_COMPILER_H */
src/lxc/tools/arguments.c
View file @
cf0fd972
...
@@ -37,6 +37,7 @@
...
@@ -37,6 +37,7 @@
#include <lxc/version.h>
#include <lxc/version.h>
#include "arguments.h"
#include "arguments.h"
#include "compiler.h"
#include "namespace.h"
#include "namespace.h"
#include "initutils.h"
#include "initutils.h"
...
@@ -87,8 +88,8 @@ is2big:
...
@@ -87,8 +88,8 @@ is2big:
return
-
1
;
return
-
1
;
}
}
static
void
print_usage_exit
(
const
struct
option
longopts
[],
__noreturn__
static
void
print_usage_exit
(
const
struct
option
longopts
[],
const
struct
lxc_arguments
*
a_args
)
const
struct
lxc_arguments
*
a_args
)
{
{
int
i
;
int
i
;
...
@@ -134,13 +135,14 @@ static void print_usage_exit(const struct option longopts[],
...
@@ -134,13 +135,14 @@ static void print_usage_exit(const struct option longopts[],
exit
(
0
);
exit
(
0
);
}
}
static
void
print_version_exit
()
__noreturn__
static
void
print_version_exit
()
{
{
printf
(
"%s
\n
"
,
lxc_get_version
());
printf
(
"%s
\n
"
,
lxc_get_version
());
exit
(
0
);
exit
(
0
);
}
}
static
void
print_help_exit
(
const
struct
lxc_arguments
*
args
,
int
code
)
__noreturn__
static
void
print_help_exit
(
const
struct
lxc_arguments
*
args
,
int
code
)
{
{
fprintf
(
stderr
,
"\
fprintf
(
stderr
,
"\
Usage: %s %s\
Usage: %s %s\
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment