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
4b7c0ef8
Unverified
Commit
4b7c0ef8
authored
Jan 12, 2018
by
Christian Brauner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tools: move lxc-ls to API symbols only
Closes #2073. Signed-off-by:
Christian Brauner
<
christian.brauner@ubuntu.com
>
parent
8765242a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
313 additions
and
23 deletions
+313
-23
Makefile.am
src/lxc/Makefile.am
+14
-14
lxc_ls.c
src/lxc/tools/lxc_ls.c
+4
-9
tool_utils.c
src/lxc/tools/tool_utils.c
+281
-0
tool_utils.h
src/lxc/tools/tool_utils.h
+14
-0
No files found.
src/lxc/Makefile.am
View file @
4b7c0ef8
...
@@ -276,20 +276,20 @@ lxc_console_SOURCES = tools/lxc_console.c tools/arguments.c tools/tool_utils.c
...
@@ -276,20 +276,20 @@ lxc_console_SOURCES = tools/lxc_console.c tools/arguments.c tools/tool_utils.c
lxc_destroy_SOURCES
=
tools/lxc_destroy.c tools/arguments.c tools/tool_utils.c
lxc_destroy_SOURCES
=
tools/lxc_destroy.c tools/arguments.c tools/tool_utils.c
lxc_device_SOURCES
=
tools/lxc_device.c tools/arguments.c tools/tool_utils.c
lxc_device_SOURCES
=
tools/lxc_device.c tools/arguments.c tools/tool_utils.c
lxc_execute_SOURCES
=
tools/lxc_execute.c tools/arguments.c tools/tool_utils.c
lxc_execute_SOURCES
=
tools/lxc_execute.c tools/arguments.c tools/tool_utils.c
lxc_freeze_SOURCES
=
tools/lxc_freeze.c tools/arguments.c
lxc_freeze_SOURCES
=
tools/lxc_freeze.c tools/arguments.c
tools/tool_utils.c
lxc_info_SOURCES
=
tools/lxc_info.c tools/arguments.c
lxc_info_SOURCES
=
tools/lxc_info.c tools/arguments.c
tools/tool_utils.c
lxc_monitor_SOURCES
=
tools/lxc_monitor.c tools/arguments.c
lxc_monitor_SOURCES
=
tools/lxc_monitor.c tools/arguments.c
tools/tool_utils.c
lxc_ls_SOURCES
=
tools/lxc_ls.c tools/arguments.c
lxc_ls_SOURCES
=
tools/lxc_ls.c tools/arguments.c
tools/tool_utils.c
lxc_copy_SOURCES
=
tools/lxc_copy.c tools/arguments.c
lxc_copy_SOURCES
=
tools/lxc_copy.c tools/arguments.c
tools/tool_utils.c
lxc_start_SOURCES
=
tools/lxc_start.c tools/arguments.c
lxc_start_SOURCES
=
tools/lxc_start.c tools/arguments.c
tools/tool_utils.c
lxc_stop_SOURCES
=
tools/lxc_stop.c tools/arguments.c
lxc_stop_SOURCES
=
tools/lxc_stop.c tools/arguments.c
tools/tool_utils.c
lxc_top_SOURCES
=
tools/lxc_top.c tools/arguments.c
lxc_top_SOURCES
=
tools/lxc_top.c tools/arguments.c
tools/tool_utils.c
lxc_unfreeze_SOURCES
=
tools/lxc_unfreeze.c tools/arguments.c
lxc_unfreeze_SOURCES
=
tools/lxc_unfreeze.c tools/arguments.c
tools/tool_utils.c
lxc_unshare_SOURCES
=
tools/lxc_unshare.c tools/arguments.c
lxc_unshare_SOURCES
=
tools/lxc_unshare.c tools/arguments.c
tools/tool_utils.c
lxc_wait_SOURCES
=
tools/lxc_wait.c tools/arguments.c
lxc_wait_SOURCES
=
tools/lxc_wait.c tools/arguments.c
tools/tool_utils.c
lxc_create_SOURCES
=
tools/lxc_create.c tools/arguments.c
lxc_create_SOURCES
=
tools/lxc_create.c tools/arguments.c
tools/tool_utils.c
lxc_snapshot_SOURCES
=
tools/lxc_snapshot.c tools/arguments.c
lxc_snapshot_SOURCES
=
tools/lxc_snapshot.c tools/arguments.c
tools/tool_utils.c
lxc_checkpoint_SOURCES
=
tools/lxc_checkpoint.c tools/arguments.c
lxc_checkpoint_SOURCES
=
tools/lxc_checkpoint.c tools/arguments.c
tools/tool_utils.c
# Binaries shipping with liblxc
# Binaries shipping with liblxc
init_lxc_SOURCES
=
cmd/lxc_init.c
init_lxc_SOURCES
=
cmd/lxc_init.c
...
...
src/lxc/tools/lxc_ls.c
View file @
4b7c0ef8
...
@@ -16,9 +16,9 @@
...
@@ -16,9 +16,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
*/
#include "config.h"
#define _GNU_SOURCE
#include <getopt.h>
#include <getopt.h>
#include <limits.h>
#include <regex.h>
#include <regex.h>
#include <stdbool.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdio.h>
...
@@ -35,11 +35,7 @@
...
@@ -35,11 +35,7 @@
#include <lxc/lxccontainer.h>
#include <lxc/lxccontainer.h>
#include "arguments.h"
#include "arguments.h"
#include "conf.h"
#include "tool_utils.h"
#include "confile.h"
#include "log.h"
#include "lxc.h"
#include "utils.h"
/* Per default we only allow five levels of recursion to protect the stack at
/* Per default we only allow five levels of recursion to protect the stack at
* least a little bit. */
* least a little bit. */
...
@@ -231,7 +227,6 @@ int main(int argc, char *argv[])
...
@@ -231,7 +227,6 @@ int main(int argc, char *argv[])
if
(
lxc_log_init
(
&
log
))
if
(
lxc_log_init
(
&
log
))
exit
(
EXIT_FAILURE
);
exit
(
EXIT_FAILURE
);
lxc_log_options_no_override
();
/* REMOVE IN LXC 3.0 */
/* REMOVE IN LXC 3.0 */
setenv
(
"LXC_UPDATE_CONFIG_FORMAT"
,
"1"
,
0
);
setenv
(
"LXC_UPDATE_CONFIG_FORMAT"
,
"1"
,
0
);
...
@@ -1072,7 +1067,7 @@ static int ls_remove_lock(const char *path, const char *name,
...
@@ -1072,7 +1067,7 @@ static int ls_remove_lock(const char *path, const char *name,
if
(
check
<
0
||
(
size_t
)
check
>=
*
len_lockpath
)
if
(
check
<
0
||
(
size_t
)
check
>=
*
len_lockpath
)
goto
out
;
goto
out
;
lxc_rmdir_onedev
(
*
lockpath
,
NULL
);
(
void
)
rm_r
(
*
lockpath
);
ret
=
0
;
ret
=
0
;
out:
out:
...
...
src/lxc/tools/tool_utils.c
View file @
4b7c0ef8
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#define _GNU_SOURCE
#define _GNU_SOURCE
#define __STDC_FORMAT_MACROS
/* Required for PRIu64 to work. */
#define __STDC_FORMAT_MACROS
/* Required for PRIu64 to work. */
#include <ctype.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <errno.h>
#include <fcntl.h>
#include <fcntl.h>
#include <limits.h>
#include <limits.h>
...
@@ -850,3 +851,283 @@ int lxc_read_from_file(const char *filename, void* buf, size_t count)
...
@@ -850,3 +851,283 @@ int lxc_read_from_file(const char *filename, void* buf, size_t count)
errno
=
saved_errno
;
errno
=
saved_errno
;
return
ret
;
return
ret
;
}
}
char
**
lxc_string_split_and_trim
(
const
char
*
string
,
char
_sep
)
{
char
*
token
,
*
str
,
*
saveptr
=
NULL
;
char
sep
[
2
]
=
{
_sep
,
'\0'
};
char
**
result
=
NULL
;
size_t
result_capacity
=
0
;
size_t
result_count
=
0
;
int
r
,
saved_errno
;
size_t
i
=
0
;
if
(
!
string
)
return
calloc
(
1
,
sizeof
(
char
*
));
str
=
alloca
(
strlen
(
string
)
+
1
);
strcpy
(
str
,
string
);
for
(;
(
token
=
strtok_r
(
str
,
sep
,
&
saveptr
));
str
=
NULL
)
{
while
(
token
[
0
]
==
' '
||
token
[
0
]
==
'\t'
)
token
++
;
i
=
strlen
(
token
);
while
(
i
>
0
&&
(
token
[
i
-
1
]
==
' '
||
token
[
i
-
1
]
==
'\t'
))
{
token
[
i
-
1
]
=
'\0'
;
i
--
;
}
r
=
lxc_grow_array
((
void
***
)
&
result
,
&
result_capacity
,
result_count
+
1
,
16
);
if
(
r
<
0
)
goto
error_out
;
result
[
result_count
]
=
strdup
(
token
);
if
(
!
result
[
result_count
])
goto
error_out
;
result_count
++
;
}
/* if we allocated too much, reduce it */
return
realloc
(
result
,
(
result_count
+
1
)
*
sizeof
(
char
*
));
error_out:
saved_errno
=
errno
;
lxc_free_array
((
void
**
)
result
,
free
);
errno
=
saved_errno
;
return
NULL
;
}
char
*
lxc_append_paths
(
const
char
*
first
,
const
char
*
second
)
{
int
ret
;
size_t
len
;
char
*
result
=
NULL
;
const
char
*
pattern
=
"%s%s"
;
len
=
strlen
(
first
)
+
strlen
(
second
)
+
1
;
if
(
second
[
0
]
!=
'/'
)
{
len
+=
1
;
pattern
=
"%s/%s"
;
}
result
=
calloc
(
1
,
len
);
if
(
!
result
)
return
NULL
;
ret
=
snprintf
(
result
,
len
,
pattern
,
first
,
second
);
if
(
ret
<
0
||
(
size_t
)
ret
>=
len
)
{
free
(
result
);
return
NULL
;
}
return
result
;
}
bool
dir_exists
(
const
char
*
path
)
{
struct
stat
sb
;
int
ret
;
ret
=
stat
(
path
,
&
sb
);
if
(
ret
<
0
)
/* Could be something other than eexist, just say "no". */
return
false
;
return
S_ISDIR
(
sb
.
st_mode
);
}
char
*
lxc_string_replace
(
const
char
*
needle
,
const
char
*
replacement
,
const
char
*
haystack
)
{
ssize_t
len
=
-
1
,
saved_len
=
-
1
;
char
*
result
=
NULL
;
size_t
replacement_len
=
strlen
(
replacement
);
size_t
needle_len
=
strlen
(
needle
);
/* should be executed exactly twice */
while
(
len
==
-
1
||
result
==
NULL
)
{
char
*
p
;
char
*
last_p
;
ssize_t
part_len
;
if
(
len
!=
-
1
)
{
result
=
calloc
(
1
,
len
+
1
);
if
(
!
result
)
return
NULL
;
saved_len
=
len
;
}
len
=
0
;
for
(
last_p
=
(
char
*
)
haystack
,
p
=
strstr
(
last_p
,
needle
);
p
;
last_p
=
p
,
p
=
strstr
(
last_p
,
needle
))
{
part_len
=
(
ssize_t
)(
p
-
last_p
);
if
(
result
&&
part_len
>
0
)
memcpy
(
&
result
[
len
],
last_p
,
part_len
);
len
+=
part_len
;
if
(
result
&&
replacement_len
>
0
)
memcpy
(
&
result
[
len
],
replacement
,
replacement_len
);
len
+=
replacement_len
;
p
+=
needle_len
;
}
part_len
=
strlen
(
last_p
);
if
(
result
&&
part_len
>
0
)
memcpy
(
&
result
[
len
],
last_p
,
part_len
);
len
+=
part_len
;
}
/* make sure we did the same thing twice,
* once for calculating length, the other
* time for copying data */
if
(
saved_len
!=
len
)
{
free
(
result
);
return
NULL
;
}
/* make sure we didn't overwrite any buffer,
* due to calloc the string should be 0-terminated */
if
(
result
[
len
]
!=
'\0'
)
{
free
(
result
);
return
NULL
;
}
return
result
;
}
ssize_t
lxc_write_nointr
(
int
fd
,
const
void
*
buf
,
size_t
count
)
{
ssize_t
ret
;
again:
ret
=
write
(
fd
,
buf
,
count
);
if
(
ret
<
0
&&
errno
==
EINTR
)
goto
again
;
return
ret
;
}
char
*
get_rundir
()
{
char
*
rundir
;
const
char
*
homedir
;
if
(
geteuid
()
==
0
)
{
rundir
=
strdup
(
RUNTIME_PATH
);
return
rundir
;
}
rundir
=
getenv
(
"XDG_RUNTIME_DIR"
);
if
(
rundir
)
{
rundir
=
strdup
(
rundir
);
return
rundir
;
}
homedir
=
getenv
(
"HOME"
);
if
(
!
homedir
)
return
NULL
;
rundir
=
malloc
(
sizeof
(
char
)
*
(
17
+
strlen
(
homedir
)));
sprintf
(
rundir
,
"%s/.cache/lxc/run/"
,
homedir
);
return
rundir
;
}
char
*
must_copy_string
(
const
char
*
entry
)
{
char
*
ret
;
if
(
!
entry
)
return
NULL
;
do
{
ret
=
strdup
(
entry
);
}
while
(
!
ret
);
return
ret
;
}
void
*
must_realloc
(
void
*
orig
,
size_t
sz
)
{
void
*
ret
;
do
{
ret
=
realloc
(
orig
,
sz
);
}
while
(
!
ret
);
return
ret
;
}
char
*
must_make_path
(
const
char
*
first
,
...)
{
va_list
args
;
char
*
cur
,
*
dest
;
size_t
full_len
=
strlen
(
first
);
dest
=
must_copy_string
(
first
);
va_start
(
args
,
first
);
while
((
cur
=
va_arg
(
args
,
char
*
))
!=
NULL
)
{
full_len
+=
strlen
(
cur
);
if
(
cur
[
0
]
!=
'/'
)
full_len
++
;
dest
=
must_realloc
(
dest
,
full_len
+
1
);
if
(
cur
[
0
]
!=
'/'
)
strcat
(
dest
,
"/"
);
strcat
(
dest
,
cur
);
}
va_end
(
args
);
return
dest
;
}
int
rm_r
(
char
*
dirname
)
{
int
ret
;
struct
dirent
*
direntp
;
DIR
*
dir
;
int
r
=
0
;
dir
=
opendir
(
dirname
);
if
(
!
dir
)
return
-
1
;
while
((
direntp
=
readdir
(
dir
)))
{
char
*
pathname
;
struct
stat
mystat
;
if
(
!
direntp
)
break
;
if
(
!
strcmp
(
direntp
->
d_name
,
"."
)
||
!
strcmp
(
direntp
->
d_name
,
".."
))
continue
;
pathname
=
must_make_path
(
dirname
,
direntp
->
d_name
,
NULL
);
ret
=
lstat
(
pathname
,
&
mystat
);
if
(
ret
<
0
)
{
r
=
-
1
;
goto
next
;
}
if
(
!
S_ISDIR
(
mystat
.
st_mode
))
goto
next
;
ret
=
rm_r
(
pathname
);
if
(
ret
<
0
)
r
=
-
1
;
next:
free
(
pathname
);
}
ret
=
rmdir
(
dirname
);
if
(
ret
<
0
)
r
=
-
1
;
ret
=
closedir
(
dir
);
if
(
ret
<
0
)
r
=
-
1
;
return
r
;
}
ssize_t
lxc_read_nointr
(
int
fd
,
void
*
buf
,
size_t
count
)
{
ssize_t
ret
;
again:
ret
=
read
(
fd
,
buf
,
count
);
if
(
ret
<
0
&&
errno
==
EINTR
)
goto
again
;
return
ret
;
}
src/lxc/tools/tool_utils.h
View file @
4b7c0ef8
...
@@ -139,9 +139,18 @@ extern char **lxc_normalize_path(const char *path);
...
@@ -139,9 +139,18 @@ extern char **lxc_normalize_path(const char *path);
extern
char
*
lxc_string_join
(
const
char
*
sep
,
const
char
**
parts
,
extern
char
*
lxc_string_join
(
const
char
*
sep
,
const
char
**
parts
,
bool
use_as_prefix
);
bool
use_as_prefix
);
extern
char
**
lxc_string_split_quoted
(
char
*
string
);
extern
char
**
lxc_string_split_quoted
(
char
*
string
);
extern
char
**
lxc_string_split_and_trim
(
const
char
*
string
,
char
_sep
);
extern
char
*
lxc_append_paths
(
const
char
*
first
,
const
char
*
second
);
extern
char
*
lxc_string_replace
(
const
char
*
needle
,
const
char
*
replacement
,
const
char
*
haystack
);
extern
char
*
must_copy_string
(
const
char
*
entry
);
extern
void
*
must_realloc
(
void
*
orig
,
size_t
sz
);
extern
char
*
must_make_path
(
const
char
*
first
,
...);
extern
int
mkdir_p
(
const
char
*
dir
,
mode_t
mode
);
extern
int
mkdir_p
(
const
char
*
dir
,
mode_t
mode
);
extern
int
rm_r
(
char
*
dirname
);
extern
bool
file_exists
(
const
char
*
f
);
extern
bool
file_exists
(
const
char
*
f
);
extern
bool
dir_exists
(
const
char
*
path
);
extern
int
is_dir
(
const
char
*
path
);
extern
int
is_dir
(
const
char
*
path
);
extern
int
lxc_read_from_file
(
const
char
*
filename
,
void
*
buf
,
size_t
count
);
extern
int
lxc_read_from_file
(
const
char
*
filename
,
void
*
buf
,
size_t
count
);
...
@@ -162,4 +171,9 @@ struct new_config_item {
...
@@ -162,4 +171,9 @@ struct new_config_item {
};
};
extern
struct
new_config_item
*
parse_line
(
char
*
buffer
);
extern
struct
new_config_item
*
parse_line
(
char
*
buffer
);
extern
ssize_t
lxc_read_nointr
(
int
fd
,
void
*
buf
,
size_t
count
);
extern
ssize_t
lxc_write_nointr
(
int
fd
,
const
void
*
buf
,
size_t
count
);
extern
char
*
get_rundir
();
#endif
/* __LXC_UTILS_H */
#endif
/* __LXC_UTILS_H */
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