if (ret) {
PERROR("Failed to fstat directory file descriptor %i", dirfd);
lttng_directory_handle_release(&handle->ref);
+ handle = NULL;
+ goto end;
}
} else {
handle->directory_inode = RESERVED_AT_FDCWD_INO;
struct lttng_directory_handle *handle =
container_of(ref, struct lttng_directory_handle, ref);
+ if (handle->destroy_cb) {
+ handle->destroy_cb(handle, handle->destroy_cb_data);
+ }
+
if (handle->dirfd == AT_FDCWD || handle->dirfd == -1) {
goto end;
}
int lttng_directory_handle_rmdir(
const struct lttng_directory_handle *handle, const char *name)
{
- return unlinkat(handle->dirfd, name, AT_REMOVEDIR);
+ int ret = unlinkat(handle->dirfd, name, AT_REMOVEDIR);
+ if (ret) {
+ PERROR("Failed to remove directory `%s`", name);
+ }
+
+ return ret;
}
static
bool lttng_directory_handle_equals(const struct lttng_directory_handle *lhs,
const struct lttng_directory_handle *rhs)
{
- return strcmp(lhs->path, rhs->path) == 0;
+ return strcmp(lhs->base_path, rhs->base_path) == 0;
}
static