}
}
-void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
- const char *path)
+static void notify_parent_dir(connection_struct *conn,
+ uint32 action, uint32 filter,
+ const char *path)
{
- char *fullpath;
+ struct smb_filename smb_fname_parent;
char *parent;
const char *name;
- if (path[0] == '.' && path[1] == '/') {
- path += 2;
+ if (!parent_dirname(talloc_tos(), path, &parent, &name)) {
+ return;
}
- if (parent_dirname(talloc_tos(), path, &parent, &name)) {
- struct smb_filename smb_fname_parent;
- ZERO_STRUCT(smb_fname_parent);
- smb_fname_parent.base_name = parent;
+ ZERO_STRUCT(smb_fname_parent);
+ smb_fname_parent.base_name = parent;
- if (SMB_VFS_STAT(conn, &smb_fname_parent) != -1) {
- notify_onelevel(conn->notify_ctx, action, filter,
- SMB_VFS_FILE_ID_CREATE(conn, &smb_fname_parent.st),
- name);
- }
+ if (SMB_VFS_STAT(conn, &smb_fname_parent) == -1) {
+ goto done;
+ }
+ notify_onelevel(conn->notify_ctx, action, filter,
+ SMB_VFS_FILE_ID_CREATE(conn, &smb_fname_parent.st),
+ name);
+done:
+ TALLOC_FREE(parent);
+}
+
+void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
+ const char *path)
+{
+ char *fullpath;
+
+ if (path[0] == '.' && path[1] == '/') {
+ path += 2;
}
+ notify_parent_dir(conn, action, filter, path);
fullpath = talloc_asprintf(talloc_tos(), "%s/%s", conn->connectpath,
path);