root/src/filemanager/filenot.c

/* [previous][next][first][last][top][bottom][index][help]  */

DEFINITIONS

This source file includes following definitions.
  1. my_mkdir_rec
  2. my_mkdir
  3. my_rmdir

   1 /*
   2    Wrapper for routines to notify the
   3    tree about the changes made to the directory
   4    structure.
   5 
   6    Copyright (C) 2011-2024
   7    Free Software Foundation, Inc.
   8 
   9    Author:
  10    Janne Kukonlehto
  11    Miguel de Icaza
  12    Slava Zanko <slavazanko@gmail.com>, 2013
  13 
  14    This file is part of the Midnight Commander.
  15 
  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.
  20 
  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.
  25 
  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/>.
  28  */
  29 
  30 
  31 /** \file  filenot.c
  32  *  \brief Source: wrapper for routines to notify the
  33  *  tree about the changes made to the directory
  34  *  structure.
  35  */
  36 
  37 #include <config.h>
  38 
  39 #include <errno.h>
  40 #include <string.h>
  41 
  42 #include "lib/global.h"
  43 #include "lib/fs.h"
  44 #include "lib/util.h"
  45 #include "lib/vfs/vfs.h"
  46 
  47 #include "filenot.h"
  48 
  49 /*** global variables ****************************************************************************/
  50 
  51 /*** file scope macro definitions ****************************************************************/
  52 
  53 /*** file scope type declarations ****************************************************************/
  54 
  55 /*** forward declarations (file scope functions) *************************************************/
  56 
  57 /*** file scope variables ************************************************************************/
  58 
  59 /* --------------------------------------------------------------------------------------------- */
  60 /*** file scope functions ************************************************************************/
  61 /* --------------------------------------------------------------------------------------------- */
  62 
  63 static int
  64 my_mkdir_rec (const vfs_path_t *vpath, mode_t mode)
     /* [previous][next][first][last][top][bottom][index][help]  */
  65 {
  66     vfs_path_t *q;
  67     int result;
  68 
  69     if (mc_mkdir (vpath, mode) == 0)
  70         return 0;
  71     if (errno != ENOENT)
  72         return (-1);
  73 
  74     /* FIXME: should check instead if vpath is at the root of that filesystem */
  75     if (!vfs_file_is_local (vpath))
  76         return (-1);
  77 
  78     if (strcmp (vfs_path_as_str (vpath), PATH_SEP_STR) == 0)
  79     {
  80         errno = ENOTDIR;
  81         return (-1);
  82     }
  83 
  84     q = vfs_path_append_new (vpath, "..", (char *) NULL);
  85     result = my_mkdir_rec (q, mode);
  86     vfs_path_free (q, TRUE);
  87 
  88     if (result == 0)
  89         result = mc_mkdir (vpath, mode);
  90 
  91     return result;
  92 }
  93 
  94 /* --------------------------------------------------------------------------------------------- */
  95 /*** public functions ****************************************************************************/
  96 /* --------------------------------------------------------------------------------------------- */
  97 
  98 int
  99 my_mkdir (const vfs_path_t *vpath, mode_t mode)
     /* [previous][next][first][last][top][bottom][index][help]  */
 100 {
 101     int result;
 102 
 103     result = my_mkdir_rec (vpath, mode);
 104     return result;
 105 }
 106 
 107 /* --------------------------------------------------------------------------------------------- */
 108 
 109 int
 110 my_rmdir (const char *path)
     /* [previous][next][first][last][top][bottom][index][help]  */
 111 {
 112     int result;
 113     vfs_path_t *vpath;
 114 
 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;
 120 }
 121 
 122 /* --------------------------------------------------------------------------------------------- */

/* [previous][next][first][last][top][bottom][index][help]  */