Changeset cd0dce3 in mainline


Ignore:
Timestamp:
2026-02-11T23:17:49Z (13 hours ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Parents:
f9c30b9a
Message:

Create new directory (Navigator + command line utility).

Location:
uspace
Files:
13 added
13 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/meson.build

    rf9c30b9a rcd0dce3  
    7272        'nav',
    7373        'netecho',
     74        'newdir',
    7475        'newfile',
    7576        'nic',
  • uspace/app/nav/menu.c

    rf9c30b9a rcd0dce3  
    5555        ui_menu_t *mfile;
    5656        ui_menu_entry_t *mnew;
     57        ui_menu_entry_t *mnewdir;
    5758        ui_menu_entry_t *mopen;
    5859        ui_menu_entry_t *medit;
     
    8889        ui_menu_entry_set_cb(mnew, nav_menu_file_new_file, (void *) menu);
    8990
     91        rc = ui_menu_entry_create(mfile, "New Di~r~ectory", "Ctrl-N", &mnewdir);
     92        if (rc != EOK)
     93                goto error;
     94
     95        ui_menu_entry_set_cb(mnewdir, nav_menu_file_new_dir, (void *) menu);
     96
    9097        rc = ui_menu_entry_create(mfile, "~O~pen", "Enter", &mopen);
    9198        if (rc != EOK)
     
    189196}
    190197
     198/** File / New Directory menu entry selected.
     199 *
     200 * @param mentry Menu entry
     201 * @param arg Argument (navigator_t *)
     202 */
     203void nav_menu_file_new_dir(ui_menu_entry_t *mentry, void *arg)
     204{
     205        nav_menu_t *menu = (nav_menu_t *)arg;
     206
     207        if (menu->cb != NULL && menu->cb->file_new_dir != NULL)
     208                menu->cb->file_new_dir(menu->cb_arg);
     209}
     210
    191211/** File / Open menu entry selected.
    192212 *
  • uspace/app/nav/menu.h

    rf9c30b9a rcd0dce3  
    4646extern void nav_menu_destroy(nav_menu_t *);
    4747extern ui_control_t *nav_menu_ctl(nav_menu_t *);
     48extern void nav_menu_file_new_dir(ui_menu_entry_t *, void *);
    4849extern void nav_menu_file_new_file(ui_menu_entry_t *, void *);
    4950extern void nav_menu_file_open(ui_menu_entry_t *, void *);
  • uspace/app/nav/meson.build

    rf9c30b9a rcd0dce3  
    3333        'dlg/ioerrdlg.c',
    3434        'dlg/movedlg.c',
     35        'dlg/newdirdlg.c',
    3536        'dlg/newfiledlg.c',
    3637        'dlg/progress.c',
     
    4142        'move.c',
    4243        'nav.c',
     44        'newdir.c',
    4345        'newfile.c',
    4446        'panel.c',
     
    5153        'dlg/ioerrdlg.c',
    5254        'dlg/movedlg.c',
     55        'dlg/newdirdlg.c',
    5356        'dlg/newfiledlg.c',
    5457        'dlg/progress.c',
     
    5861        'move.c',
    5962        'nav.c',
     63        'newdir.c',
    6064        'newfile.c',
    6165        'panel.c',
     
    6569        'test/dlg/ioerrdlg.c',
    6670        'test/dlg/movedlg.c',
     71        'test/dlg/newdirdlg.c',
    6772        'test/dlg/newfiledlg.c',
    6873        'test/dlg/progress.c',
  • uspace/app/nav/nav.c

    rf9c30b9a rcd0dce3  
    5353#include "menu.h"
    5454#include "move.h"
     55#include "newdir.h"
    5556#include "newfile.h"
    5657#include "nav.h"
     
    6970
    7071static void navigator_file_new_file(void *);
     72static void navigator_file_new_dir(void *);
    7173static void navigator_file_open(void *);
    7274static void navigator_file_edit(void *);
     
    7880static nav_menu_cb_t navigator_menu_cb = {
    7981        .file_new_file = navigator_file_new_file,
     82        .file_new_dir = navigator_file_new_dir,
    8083        .file_open = navigator_file_open,
    8184        .file_edit = navigator_file_edit,
     
    153156                case KC_M:
    154157                        navigator_new_file_dlg(navigator);
     158                        break;
     159                case KC_N:
     160                        navigator_new_dir_dlg(navigator);
    155161                        break;
    156162                case KC_E:
     
    448454}
    449455
     456/** File / New Directory menu entry selected */
     457static void navigator_file_new_dir(void *arg)
     458{
     459        navigator_t *navigator = (navigator_t *)arg;
     460
     461        navigator_new_dir_dlg(navigator);
     462}
     463
    450464/** File / Open menu entry selected */
    451465static void navigator_file_open(void *arg)
  • uspace/app/nav/types/menu.h

    rf9c30b9a rcd0dce3  
    4545        /** File / New File */
    4646        void (*file_new_file)(void *);
     47        /** File / New Directory */
     48        void (*file_new_dir)(void *);
    4749        /** File / Open */
    4850        void (*file_open)(void *);
  • uspace/lib/fmgt/include/fmgt.h

    rf9c30b9a rcd0dce3  
    4545#include "fmgt/flist.h"
    4646#include "fmgt/move.h"
     47#include "fmgt/newdir.h"
    4748#include "fmgt/newfile.h"
    4849#include "fmgt/verify.h"
  • uspace/lib/fmgt/meson.build

    rf9c30b9a rcd0dce3  
    3333        'src/fsops.c',
    3434        'src/move.c',
     35        'src/newdir.c',
    3536        'src/newfile.c',
    3637        'src/verify.c',
     
    4546        'test/main.c',
    4647        'test/move.c',
     48        'test/newdir.c',
    4749        'test/newfile.c',
    4850        'test/verify.c',
  • uspace/lib/fmgt/private/fsops.h

    rf9c30b9a rcd0dce3  
    4545errno_t fmgt_open(fmgt_t *, const char *, int *);
    4646errno_t fmgt_create_file(fmgt_t *, const char *, int *, fmgt_exists_action_t *);
    47 errno_t fmgt_create_dir(fmgt_t *, const char *);
     47errno_t fmgt_create_dir(fmgt_t *, const char *, bool);
    4848errno_t fmgt_remove(fmgt_t *, const char *);
    4949errno_t fmgt_read(fmgt_t *, int, const char *, aoff64_t *, void *, size_t,
  • uspace/lib/fmgt/src/copy.c

    rf9c30b9a rcd0dce3  
    6464
    6565        (void)dest;
    66         return fmgt_create_dir(fmgt, dest);
     66        return fmgt_create_dir(fmgt, dest, false);
    6767}
    6868
  • uspace/lib/fmgt/src/fsops.c

    rf9c30b9a rcd0dce3  
    135135 * @param fmgt File management object
    136136 * @param dname Directory name
    137  * @return EOK on success or an error code
    138  */
    139 errno_t fmgt_create_dir(fmgt_t *fmgt, const char *dname)
     137 * @param exclusive If @c true, directory must not exist.
     138 * @return EOK on success or an error code
     139 */
     140errno_t fmgt_create_dir(fmgt_t *fmgt, const char *dname, bool exclusive)
    140141{
    141142        fmgt_io_error_t err;
     
    146147                rc = vfs_link_path(dname, KIND_DIRECTORY, NULL);
    147148
    148                 /* It is okay if the directory exists. */
    149149                if (rc == EOK || rc == EEXIST)
    150150                        break;
     
    160160        } while (action == fmgt_er_retry);
    161161
    162         if (rc == EEXIST)
     162        if (rc == EEXIST && !exclusive)
    163163                return EOK;
    164164
  • uspace/lib/fmgt/src/move.c

    rf9c30b9a rcd0dce3  
    6666
    6767        (void)dest;
    68         return fmgt_create_dir(fmgt, dest);
     68        return fmgt_create_dir(fmgt, dest, false);
    6969}
    7070
  • uspace/lib/fmgt/test/fsops.c

    rf9c30b9a rcd0dce3  
    122122        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    123123
    124         rc = fmgt_create_dir(fmgt, p);
     124        rc = fmgt_create_dir(fmgt, p, true);
    125125        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    126126
Note: See TracChangeset for help on using the changeset viewer.