src/filemanager/chattr.c: fix coding style.
[midnight-commander.git] / src / filemanager / filenot.c
blob33ca17e898abda7dd3b85516b6aa3079530cd407
1 /*
2 Wrapper for routines to notify the
3 tree about the changes made to the directory
4 structure.
6 Copyright (C) 2011-2024
7 Free Software Foundation, Inc.
9 Author:
10 Janne Kukonlehto
11 Miguel de Icaza
12 Slava Zanko <slavazanko@gmail.com>, 2013
14 This file is part of the Midnight Commander.
16 The Midnight Commander is free software: you can redistribute it
17 and/or modify it under the terms of the GNU General Public License as
18 published by the Free Software Foundation, either version 3 of the License,
19 or (at your option) any later version.
21 The Midnight Commander is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 GNU General Public License for more details.
26 You should have received a copy of the GNU General Public License
27 along with this program. If not, see <http://www.gnu.org/licenses/>.
31 /** \file filenot.c
32 * \brief Source: wrapper for routines to notify the
33 * tree about the changes made to the directory
34 * structure.
37 #include <config.h>
39 #include <errno.h>
40 #include <string.h>
42 #include "lib/global.h"
43 #include "lib/fs.h"
44 #include "lib/util.h"
45 #include "lib/vfs/vfs.h"
47 #include "filenot.h"
49 /*** global variables ****************************************************************************/
51 /*** file scope macro definitions ****************************************************************/
53 /*** file scope type declarations ****************************************************************/
55 /*** forward declarations (file scope functions) *************************************************/
57 /*** file scope variables ************************************************************************/
59 /* --------------------------------------------------------------------------------------------- */
60 /*** file scope functions ************************************************************************/
61 /* --------------------------------------------------------------------------------------------- */
63 static int
64 my_mkdir_rec (const vfs_path_t *vpath, mode_t mode)
66 vfs_path_t *q;
67 int result;
69 if (mc_mkdir (vpath, mode) == 0)
70 return 0;
71 if (errno != ENOENT)
72 return (-1);
74 /* FIXME: should check instead if vpath is at the root of that filesystem */
75 if (!vfs_file_is_local (vpath))
76 return (-1);
78 if (strcmp (vfs_path_as_str (vpath), PATH_SEP_STR) == 0)
80 errno = ENOTDIR;
81 return (-1);
84 q = vfs_path_append_new (vpath, "..", (char *) NULL);
85 result = my_mkdir_rec (q, mode);
86 vfs_path_free (q, TRUE);
88 if (result == 0)
89 result = mc_mkdir (vpath, mode);
91 return result;
94 /* --------------------------------------------------------------------------------------------- */
95 /*** public functions ****************************************************************************/
96 /* --------------------------------------------------------------------------------------------- */
98 int
99 my_mkdir (const vfs_path_t *vpath, mode_t mode)
101 int result;
103 result = my_mkdir_rec (vpath, mode);
104 return result;
107 /* --------------------------------------------------------------------------------------------- */
110 my_rmdir (const char *path)
112 int result;
113 vfs_path_t *vpath;
115 vpath = vfs_path_from_str_flags (path, VPF_NO_CANON);
116 /* FIXME: Should receive a Wtree! */
117 result = mc_rmdir (vpath);
118 vfs_path_free (vpath, TRUE);
119 return result;
122 /* --------------------------------------------------------------------------------------------- */