mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tools/xenstored: add helpers for filename handling
Add some helpers for handling filenames which might need different implementations between stubdom and daemon environments: - expansion of relative filenames (those are not really defined today, just expand them to be relative to /var/lib/xen/xenstore) - expansion of xenstore_daemon_rundir() (used e.g. for saving the state file in case of live update - needs to be unchanged in the daemon case, but should result in /var/lib/xen/xenstore for stubdom) Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Jason Andryuk <jandryuk@gmail.com> Reviewed-by: Julien Grall <jgrall@amazon.com>
This commit is contained in:
1 parent
297a2587e6
commit
93892648ff
5 files changed
+31
-6
No files matched your search
+13
-2
@@ -63,7 +63,7 @@ char **orig_argv;
|
||||
LIST_HEAD(connections);
|
||||
int tracefd = -1;
|
||||
bool keep_orphans = false;
|
||||
char *tracefile = NULL;
|
||||
const char *tracefile = NULL;
|
||||
static struct hashtable *nodes;
|
||||
unsigned int trace_flags = TRACE_OBJ | TRACE_IO;
|
||||
|
||||
@@ -137,6 +137,17 @@ void trace_destroy(const void *data, const char *type)
|
||||
trace("obj: DESTROY %s %p\n", type, data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return an absolute filename.
|
||||
* In case of a relative filename given as input, prepend XENSTORE_LIB_DIR.
|
||||
*/
|
||||
const char *absolute_filename(const void *ctx, const char *filename)
|
||||
{
|
||||
if (filename[0] != '/')
|
||||
return talloc_asprintf(ctx, XENSTORE_LIB_DIR "/%s", filename);
|
||||
return talloc_strdup(ctx, filename);
|
||||
}
|
||||
|
||||
void close_log(void)
|
||||
{
|
||||
if (tracefd >= 0)
|
||||
@@ -2759,7 +2770,7 @@ int main(int argc, char *argv[])
|
||||
#endif
|
||||
|
||||
if (tracefile)
|
||||
tracefile = talloc_strdup(NULL, tracefile);
|
||||
tracefile = absolute_filename(NULL, tracefile);
|
||||
|
||||
#ifndef NO_LIVE_UPDATE
|
||||
/* Read state in case of live update. */
|
||||
|
||||
@@ -341,7 +341,7 @@ void close_log(void);
|
||||
extern int orig_argc;
|
||||
extern char **orig_argv;
|
||||
|
||||
extern char *tracefile;
|
||||
extern const char *tracefile;
|
||||
extern int tracefd;
|
||||
|
||||
/* Trace flag values must be kept in sync with trace_switches[] contents. */
|
||||
@@ -405,6 +405,9 @@ void set_socket_fd(int fd);
|
||||
void mount_9pfs(void);
|
||||
#endif
|
||||
|
||||
const char *xenstore_rundir(void);
|
||||
const char *absolute_filename(const void *ctx, const char *filename);
|
||||
|
||||
/* Close stdin/stdout/stderr to complete daemonize */
|
||||
void finish_daemonize(void);
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ void lu_get_dump_state(struct lu_dump_state *state)
|
||||
state->size = 0;
|
||||
|
||||
state->filename = talloc_asprintf(NULL, "%s/state_dump",
|
||||
xenstore_daemon_rundir());
|
||||
xenstore_rundir());
|
||||
if (!state->filename)
|
||||
barf("Allocation failure");
|
||||
|
||||
@@ -65,7 +65,7 @@ FILE *lu_dump_open(const void *ctx)
|
||||
int fd;
|
||||
|
||||
filename = talloc_asprintf(ctx, "%s/state_dump",
|
||||
xenstore_daemon_rundir());
|
||||
xenstore_rundir());
|
||||
if (!filename)
|
||||
return NULL;
|
||||
|
||||
|
||||
@@ -128,3 +128,8 @@ void mount_9pfs(void)
|
||||
{
|
||||
create_thread("mount-9pfs", mount_thread, NULL);
|
||||
}
|
||||
|
||||
const char *xenstore_rundir(void)
|
||||
{
|
||||
return XENSTORE_LIB_DIR;
|
||||
}
|
||||
@@ -326,9 +326,10 @@ void early_init(bool live_update, bool dofork, const char *pidfile)
|
||||
{
|
||||
reopen_log();
|
||||
|
||||
/* Make sure xenstored directory exists. */
|
||||
/* Make sure xenstored directories exist. */
|
||||
/* Errors ignored here, will be reported when we open files */
|
||||
mkdir(xenstore_daemon_rundir(), 0755);
|
||||
mkdir(XENSTORE_LIB_DIR, 0755);
|
||||
|
||||
if (dofork) {
|
||||
openlog("xenstored", 0, LOG_DAEMON);
|
||||
@@ -406,3 +407,8 @@ void set_socket_fd(int fd)
|
||||
{
|
||||
sock = fd;
|
||||
}
|
||||
|
||||
const char *xenstore_rundir(void)
|
||||
{
|
||||
return xenstore_daemon_rundir();
|
||||
}
|
||||