projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allow lttng_directory_handle to be moved
[lttng-tools.git]
/
src
/
common
/
compat
/
directory-handle.c
diff --git
a/src/common/compat/directory-handle.c
b/src/common/compat/directory-handle.c
index 562a7928719031856164f5a7fb2333fe30bcfc75..6e04c6a3c250bf20530656ab8bb9d336ecaa4036 100644
(file)
--- a/
src/common/compat/directory-handle.c
+++ b/
src/common/compat/directory-handle.c
@@
-41,6
+41,8
@@
int _run_as_mkdir(const struct lttng_directory_handle *handle, const char *path,
static
int _run_as_mkdir_recursive(const struct lttng_directory_handle *handle,
const char *path, mode_t mode, uid_t uid, gid_t gid);
static
int _run_as_mkdir_recursive(const struct lttng_directory_handle *handle,
const char *path, mode_t mode, uid_t uid, gid_t gid);
+static
+void lttng_directory_handle_invalidate(struct lttng_directory_handle *handle);
#ifdef COMPAT_DIRFD
#ifdef COMPAT_DIRFD
@@
-79,13
+81,15
@@
void lttng_directory_handle_fini(struct lttng_directory_handle *handle)
{
int ret;
{
int ret;
- if (handle->dirfd == AT_FDCWD) {
-
return
;
+ if (handle->dirfd == AT_FDCWD
|| handle->dirfd == -1
) {
+
goto end
;
}
ret = close(handle->dirfd);
if (ret == -1) {
PERROR("Failed to close directory file descriptor of directory handle");
}
}
ret = close(handle->dirfd);
if (ret == -1) {
PERROR("Failed to close directory file descriptor of directory handle");
}
+end:
+ lttng_directory_handle_invalidate(handle);
}
LTTNG_HIDDEN
}
LTTNG_HIDDEN
@@
-106,6
+110,12
@@
int lttng_directory_handle_copy(const struct lttng_directory_handle *handle,
return ret;
}
return ret;
}
+static
+void lttng_directory_handle_invalidate(struct lttng_directory_handle *handle)
+{
+ handle->dirfd = -1;
+}
+
static
int lttng_directory_handle_stat(const struct lttng_directory_handle *handle,
const char *path, struct stat *st)
static
int lttng_directory_handle_stat(const struct lttng_directory_handle *handle,
const char *path, struct stat *st)
@@
-241,6
+251,7
@@
LTTNG_HIDDEN
void lttng_directory_handle_fini(struct lttng_directory_handle *handle)
{
free(handle->base_path);
void lttng_directory_handle_fini(struct lttng_directory_handle *handle)
{
free(handle->base_path);
+ lttng_directory_handle_invalidate(handle);
}
LTTNG_HIDDEN
}
LTTNG_HIDDEN
@@
-251,6
+262,12
@@
int lttng_directory_handle_copy(const struct lttng_directory_handle *handle,
return new_copy->base_path ? 0 : -1;
}
return new_copy->base_path ? 0 : -1;
}
+static
+void lttng_directory_handle_invalidate(struct lttng_directory_handle *handle)
+{
+ handle->base_path = NULL;
+}
+
static
int get_full_path(const struct lttng_directory_handle *handle,
const char *subdirectory, char *fullpath, size_t size)
static
int get_full_path(const struct lttng_directory_handle *handle,
const char *subdirectory, char *fullpath, size_t size)
@@
-385,6
+402,16
@@
end:
}
/* Common implementation. */
}
/* Common implementation. */
+LTTNG_HIDDEN
+struct lttng_directory_handle
+lttng_directory_handle_move(struct lttng_directory_handle *original)
+{
+ const struct lttng_directory_handle tmp = *original;
+
+ lttng_directory_handle_invalidate(original);
+ return tmp;
+}
+
static
int create_directory_recursive(const struct lttng_directory_handle *handle,
const char *path, mode_t mode)
static
int create_directory_recursive(const struct lttng_directory_handle *handle,
const char *path, mode_t mode)
This page took
0.02451 seconds
and
4
git commands to generate.