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
66c08be3
Unverified
Commit
66c08be3
authored
Jul 18, 2020
by
Stéphane Graber
Committed by
GitHub
Jul 18, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3490 from brauner/master
lxc-ls: bugfixes
parents
9cd0179f
d6115c3a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
60 additions
and
68 deletions
+60
-68
Makefile.am
src/lxc/Makefile.am
+1
-0
lxc_ls.c
src/lxc/tools/lxc_ls.c
+59
-68
No files found.
src/lxc/Makefile.am
View file @
66c08be3
...
@@ -402,6 +402,7 @@ lxc_ls_SOURCES = tools/lxc_ls.c \
...
@@ -402,6 +402,7 @@ lxc_ls_SOURCES = tools/lxc_ls.c \
af_unix.c af_unix.h
\
af_unix.c af_unix.h
\
caps.c caps.h
\
caps.c caps.h
\
conf.c conf.h
\
conf.c conf.h
\
memory_utils.h
\
string_utils.c string_utils.h
string_utils.c string_utils.h
lxc_copy_SOURCES
=
tools/lxc_copy.c
\
lxc_copy_SOURCES
=
tools/lxc_copy.c
\
tools/arguments.c tools/arguments.h
\
tools/arguments.c tools/arguments.h
\
...
...
src/lxc/tools/lxc_ls.c
View file @
66c08be3
...
@@ -24,6 +24,7 @@
...
@@ -24,6 +24,7 @@
#include "arguments.h"
#include "arguments.h"
#include "config.h"
#include "config.h"
#include "log.h"
#include "log.h"
#include "memory_utils.h"
#include "utils.h"
#include "utils.h"
lxc_log_define
(
lxc_ls
,
lxc
);
lxc_log_define
(
lxc_ls
,
lxc
);
...
@@ -218,17 +219,17 @@ int main(int argc, char *argv[])
...
@@ -218,17 +219,17 @@ int main(int argc, char *argv[])
struct
lengths
max_len
=
{
struct
lengths
max_len
=
{
/* default header length */
/* default header length */
.
name_length
=
4
,
/* NAME */
.
name_length
=
4
,
/* NAME */
.
state_length
=
5
,
/* STATE */
.
state_length
=
5
,
/* STATE */
.
groups_length
=
6
,
/* GROUPS */
.
groups_length
=
6
,
/* GROUPS */
.
interface_length
=
9
,
/* INTERFACE */
.
interface_length
=
9
,
/* INTERFACE */
.
ipv4_length
=
4
,
/* IPV4 */
.
ipv4_length
=
4
,
/* IPV4 */
.
ipv6_length
=
4
,
/* IPV6 */
.
ipv6_length
=
4
,
/* IPV6 */
.
init_length
=
3
,
/* PID */
.
init_length
=
3
,
/* PID */
.
ram_length
=
3
,
/* RAM */
.
ram_length
=
3
,
/* RAM */
.
swap_length
=
4
,
/* SWAP */
.
swap_length
=
4
,
/* SWAP */
.
autostart_length
=
9
,
/* AUTOSTART */
.
autostart_length
=
9
,
/* AUTOSTART */
.
unprivileged_length
=
12
,
/* UNPRIVILEGED */
.
unprivileged_length
=
12
,
/* UNPRIVILEGED */
};
};
char
**
grps
=
NULL
;
char
**
grps
=
NULL
;
...
@@ -289,26 +290,26 @@ static void ls_free(struct ls *l, size_t size)
...
@@ -289,26 +290,26 @@ static void ls_free(struct ls *l, size_t size)
free
(
l
);
free
(
l
);
}
}
static
char
*
ls_get_config_item
(
struct
lxc_container
*
c
,
const
char
*
item
,
static
char
*
ls_get_config_item
(
struct
lxc_container
*
c
,
const
char
*
item
,
bool
running
)
bool
running
)
{
{
__do_free
char
*
val
=
NULL
;
int
len
;
if
(
running
)
if
(
running
)
return
c
->
get_running_config_item
(
c
,
item
);
return
c
->
get_running_config_item
(
c
,
item
);
int
len
=
c
->
get_config_item
(
c
,
item
,
NULL
,
0
);
len
=
c
->
get_config_item
(
c
,
item
,
NULL
,
0
);
if
(
len
<=
0
)
if
(
len
<=
0
)
return
NULL
;
return
NULL
;
char
*
val
=
malloc
((
len
+
1
)
*
sizeof
(
*
val
));
val
=
malloc
((
len
+
1
)
*
sizeof
(
*
val
));
if
(
!
val
)
if
(
!
val
)
return
NULL
;
return
NULL
;
if
(
c
->
get_config_item
(
c
,
item
,
val
,
len
+
1
)
!=
len
)
{
if
(
c
->
get_config_item
(
c
,
item
,
val
,
len
+
1
)
!=
len
)
free
(
val
);
return
NULL
;
val
=
NULL
;
}
return
val
;
return
move_ptr
(
val
)
;
}
}
static
void
ls_free_arr
(
char
**
arr
,
size_t
size
)
static
void
ls_free_arr
(
char
**
arr
,
size_t
size
)
...
@@ -322,9 +323,8 @@ static void ls_free_arr(char **arr, size_t size)
...
@@ -322,9 +323,8 @@ static void ls_free_arr(char **arr, size_t size)
}
}
static
int
ls_get
(
struct
ls
**
m
,
size_t
*
size
,
const
struct
lxc_arguments
*
args
,
static
int
ls_get
(
struct
ls
**
m
,
size_t
*
size
,
const
struct
lxc_arguments
*
args
,
const
char
*
basepath
,
const
char
*
parent
,
unsigned
int
lvl
,
const
char
*
basepath
,
const
char
*
parent
,
unsigned
int
lvl
,
char
**
lockpath
,
char
**
lockpath
,
size_t
len_lockpath
,
char
**
grps_must
,
size_t
len_lockpath
,
char
**
grps_must
,
size_t
grps_must_len
)
size_t
grps_must_len
)
{
{
/* As ls_get() is non-tail recursive we face the inherent danger of
/* As ls_get() is non-tail recursive we face the inherent danger of
* blowing up the stack at some level of nesting. To have at least some
* blowing up the stack at some level of nesting. To have at least some
...
@@ -597,38 +597,39 @@ out:
...
@@ -597,38 +597,39 @@ out:
static
char
*
ls_get_cgroup_item
(
struct
lxc_container
*
c
,
const
char
*
item
)
static
char
*
ls_get_cgroup_item
(
struct
lxc_container
*
c
,
const
char
*
item
)
{
{
__do_free
char
*
val
=
NULL
;
int
len
=
c
->
get_cgroup_item
(
c
,
item
,
NULL
,
0
);
int
len
=
c
->
get_cgroup_item
(
c
,
item
,
NULL
,
0
);
if
(
len
<=
0
)
if
(
len
<=
0
)
return
NULL
;
return
NULL
;
char
*
val
=
malloc
((
len
+
1
)
*
sizeof
(
*
val
));
val
=
malloc
((
len
+
1
)
*
sizeof
(
*
val
));
if
(
!
val
)
if
(
!
val
)
return
NULL
;
return
NULL
;
if
(
c
->
get_cgroup_item
(
c
,
item
,
val
,
len
+
1
)
!=
len
)
{
if
(
c
->
get_cgroup_item
(
c
,
item
,
val
,
len
+
1
)
!=
len
)
free
(
val
);
return
NULL
;
val
=
NULL
;
}
return
val
;
return
move_ptr
(
val
)
;
}
}
static
char
*
ls_get_groups
(
struct
lxc_container
*
c
,
bool
running
)
static
char
*
ls_get_groups
(
struct
lxc_container
*
c
,
bool
running
)
{
{
int
len
=
0
;
int
len
=
0
;
char
*
val
=
NULL
;
__do_free
char
*
val
=
NULL
;
if
(
running
)
if
(
running
)
val
=
c
->
get_running_config_item
(
c
,
"lxc.group"
);
val
=
c
->
get_running_config_item
(
c
,
"lxc.group"
);
else
else
len
=
c
->
get_config_item
(
c
,
"lxc.group"
,
NULL
,
0
);
len
=
c
->
get_config_item
(
c
,
"lxc.group"
,
NULL
,
0
);
if
(
!
val
&&
(
len
>
0
))
{
if
(
!
val
&&
(
len
>
0
&&
len
<
INT_MAX
))
{
val
=
malloc
((
len
+
1
)
*
sizeof
(
*
val
));
val
=
malloc
((
len
+
1
)
*
sizeof
(
*
val
));
if
(
c
->
get_config_item
(
c
,
"lxc.group"
,
val
,
len
+
1
)
!=
len
)
{
if
(
!
val
)
free
(
val
);
return
NULL
;
if
(
c
->
get_config_item
(
c
,
"lxc.group"
,
val
,
len
+
1
)
!=
len
)
return
NULL
;
return
NULL
;
}
}
}
if
(
val
)
{
if
(
val
)
{
...
@@ -642,7 +643,7 @@ static char *ls_get_groups(struct lxc_container *c, bool running)
...
@@ -642,7 +643,7 @@ static char *ls_get_groups(struct lxc_container *c, bool running)
val
=
tmp
;
val
=
tmp
;
}
}
return
val
;
return
move_ptr
(
val
)
;
}
}
static
char
*
ls_get_ips
(
struct
lxc_container
*
c
,
const
char
*
inet
)
static
char
*
ls_get_ips
(
struct
lxc_container
*
c
,
const
char
*
inet
)
...
@@ -681,16 +682,17 @@ static char *ls_get_interface(struct lxc_container *c)
...
@@ -681,16 +682,17 @@ static char *ls_get_interface(struct lxc_container *c)
*/
*/
static
double
ls_get_swap
(
struct
lxc_container
*
c
)
static
double
ls_get_swap
(
struct
lxc_container
*
c
)
{
{
char
*
stat
,
*
swap
,
*
tmp
;
__do_free
char
*
stat
=
NULL
;
char
*
swap
,
*
tmp
;
unsigned
long
long
int
num
=
0
;
unsigned
long
long
int
num
=
0
;
stat
=
ls_get_cgroup_item
(
c
,
"memory.stat"
);
stat
=
ls_get_cgroup_item
(
c
,
"memory.stat"
);
if
(
!
stat
)
if
(
!
stat
)
goto
out
;
return
num
;
swap
=
strstr
(
stat
,
"
\n
swap"
);
swap
=
strstr
(
stat
,
"
\n
swap"
);
if
(
!
swap
)
if
(
!
swap
)
goto
out
;
return
num
;
/* start_of_swap_value = '\n' + strlen(swap) + ' ' */
/* start_of_swap_value = '\n' + strlen(swap) + ' ' */
swap
=
1
+
swap
+
4
+
1
;
swap
=
1
+
swap
+
4
+
1
;
...
@@ -698,16 +700,13 @@ static double ls_get_swap(struct lxc_container *c)
...
@@ -698,16 +700,13 @@ static double ls_get_swap(struct lxc_container *c)
/* find end of swap value */
/* find end of swap value */
tmp
=
strchr
(
swap
,
'\n'
);
tmp
=
strchr
(
swap
,
'\n'
);
if
(
!
tmp
)
if
(
!
tmp
)
goto
out
;
return
num
;
*
tmp
=
'\0'
;
*
tmp
=
'\0'
;
num
=
strtoull
(
swap
,
NULL
,
0
);
num
=
strtoull
(
swap
,
NULL
,
0
);
num
=
num
/
1024
/
1024
;
num
=
num
/
1024
/
1024
;
out:
free
(
stat
);
return
num
;
return
num
;
}
}
...
@@ -775,8 +774,7 @@ static struct ls *ls_new(struct ls **ls, size_t *size)
...
@@ -775,8 +774,7 @@ static struct ls *ls_new(struct ls **ls, size_t *size)
return
m
;
return
m
;
}
}
static
void
ls_print_names
(
struct
ls
*
l
,
struct
lengths
*
lht
,
static
void
ls_print_names
(
struct
ls
*
l
,
struct
lengths
*
lht
,
size_t
size
,
size_t
termwidth
,
bool
list
)
size_t
size
,
size_t
termwidth
,
bool
list
)
{
{
/* If list is empty do nothing. */
/* If list is empty do nothing. */
if
(
size
==
0
)
if
(
size
==
0
)
...
@@ -806,8 +804,8 @@ static void ls_print_names(struct ls *l, struct lengths *lht,
...
@@ -806,8 +804,8 @@ static void ls_print_names(struct ls *l, struct lengths *lht,
printf
(
"
\n
"
);
printf
(
"
\n
"
);
}
}
static
void
ls_print_fancy_format
(
struct
ls
*
l
,
struct
lengths
*
lht
,
static
void
ls_print_fancy_format
(
struct
ls
*
l
,
struct
lengths
*
lht
,
size_t
size
,
size_t
size
,
const
char
*
fancy_fmt
)
const
char
*
fancy_fmt
)
{
{
/* If list is empty do nothing. */
/* If list is empty do nothing. */
if
(
size
==
0
)
if
(
size
==
0
)
...
@@ -908,8 +906,7 @@ static void ls_print_fancy_format(struct ls *l, struct lengths *lht,
...
@@ -908,8 +906,7 @@ static void ls_print_fancy_format(struct ls *l, struct lengths *lht,
lxc_free_array
((
void
**
)
tmp
,
free
);
lxc_free_array
((
void
**
)
tmp
,
free
);
}
}
static
void
ls_print_table
(
struct
ls
*
l
,
struct
lengths
*
lht
,
static
void
ls_print_table
(
struct
ls
*
l
,
struct
lengths
*
lht
,
size_t
size
)
size_t
size
)
{
{
size_t
i
;
size_t
i
;
...
@@ -1040,8 +1037,8 @@ out:
...
@@ -1040,8 +1037,8 @@ out:
return
ret
;
return
ret
;
}
}
static
int
ls_remove_lock
(
const
char
*
path
,
const
char
*
name
,
static
int
ls_remove_lock
(
const
char
*
path
,
const
char
*
name
,
char
**
lockpath
,
size_t
*
len_lockpath
,
char
**
lockpath
,
size_t
*
len_lockpath
,
bool
recalc
)
bool
recalc
)
{
{
int
ret
=
-
1
;
int
ret
=
-
1
;
char
*
rundir
;
char
*
rundir
;
...
@@ -1092,7 +1089,7 @@ static int ls_send_str(int fd, const char *buf)
...
@@ -1092,7 +1089,7 @@ static int ls_send_str(int fd, const char *buf)
if
(
lxc_write_nointr
(
fd
,
&
slen
,
sizeof
(
slen
))
!=
sizeof
(
slen
))
if
(
lxc_write_nointr
(
fd
,
&
slen
,
sizeof
(
slen
))
!=
sizeof
(
slen
))
return
-
1
;
return
-
1
;
if
(
slen
>
0
)
{
if
(
slen
>
0
&&
slen
<
SIZE_MAX
)
{
if
(
lxc_write_nointr
(
fd
,
buf
,
slen
)
!=
(
ssize_t
)
slen
)
if
(
lxc_write_nointr
(
fd
,
buf
,
slen
)
!=
(
ssize_t
)
slen
)
return
-
1
;
return
-
1
;
}
}
...
@@ -1166,29 +1163,24 @@ static int ls_recv_str(int fd, char **buf)
...
@@ -1166,29 +1163,24 @@ static int ls_recv_str(int fd, char **buf)
if
(
ret
!=
sizeof
(
slen
))
if
(
ret
!=
sizeof
(
slen
))
return
-
1
;
return
-
1
;
if
(
slen
==
SIZE_MAX
)
ret
=
-
EINVAL
;
return
-
1
;
if
(
slen
>
0
&&
slen
<
SIZE_MAX
)
{
__do_free
char
*
s
=
NULL
;
if
(
slen
>
0
)
{
*
buf
=
malloc
(
sizeof
(
char
)
*
(
slen
+
1
));
if
(
!*
buf
)
return
-
1
;
ret
=
lxc_read_nointr
(
fd
,
*
buf
,
slen
);
s
=
malloc
(
sizeof
(
char
)
*
(
slen
+
1
));
if
(
ret
!=
(
ssize_t
)
slen
)
{
if
(
!
s
)
free
(
*
buf
);
return
-
1
;
return
-
1
;
}
if
(
slen
==
SIZE_MAX
)
{
ret
=
lxc_read_nointr
(
fd
,
s
,
slen
);
free
(
*
buf
);
if
(
ret
!=
(
ssize_t
)
slen
)
return
-
1
;
return
-
1
;
}
(
*
buf
)[
slen
]
=
'\0'
;
(
*
buf
)[
slen
]
=
'\0'
;
*
buf
=
move_ptr
(
s
);
ret
=
0
;
}
}
return
0
;
return
ret
;
}
}
static
int
ls_deserialize
(
int
rpipefd
,
struct
ls
**
m
,
size_t
*
len
)
static
int
ls_deserialize
(
int
rpipefd
,
struct
ls
**
m
,
size_t
*
len
)
...
@@ -1263,8 +1255,7 @@ static int ls_deserialize(int rpipefd, struct ls **m, size_t *len)
...
@@ -1263,8 +1255,7 @@ static int ls_deserialize(int rpipefd, struct ls **m, size_t *len)
return
0
;
return
0
;
}
}
static
void
ls_field_width
(
const
struct
ls
*
l
,
const
size_t
size
,
static
void
ls_field_width
(
const
struct
ls
*
l
,
const
size_t
size
,
struct
lengths
*
lht
)
struct
lengths
*
lht
)
{
{
const
struct
ls
*
m
;
const
struct
ls
*
m
;
size_t
i
,
len
=
0
;
size_t
i
,
len
=
0
;
...
...
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