Changeset f9c30b9a in mainline


Ignore:
Timestamp:
2026-02-11T18:02:17Z (34 hours ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
cd0dce3
Parents:
59ed424e
Message:

Moving files (Navigator and command line utility).

Location:
uspace
Files:
13 added
18 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/copy/copy.c

    r59ed424e rf9c30b9a  
    155155        case fmgt_io_create:
    156156                fmt = "Error creating %s. (%s)\n";
     157                break;
     158        case fmgt_io_delete:
     159                fmt = "Error deleting %s. (%s)\n";
    157160                break;
    158161        case fmgt_io_open:
  • uspace/app/meson.build

    r59ed424e rf9c30b9a  
    11#
    2 # Copyright (c) 2025 Jiri Svoboda
     2# Copyright (c) 2026 Jiri Svoboda
    33# Copyright (c) 2019 Jiří Zárevúcky
    44# All rights reserved.
     
    6969        'mkmfs',
    7070        'modplay',
     71        'move',
    7172        'nav',
    7273        'netecho',
  • uspace/app/nav/dlg/copydlg.c

    r59ed424e rf9c30b9a  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    277277}
    278278
    279 /** Destroy new file dialog.
    280  *
    281  * @param dialog New file dialog or @c NULL
     279/** Destroy copy dialog.
     280 *
     281 * @param dialog Copy dialog or @c NULL
    282282 */
    283283void copy_dlg_destroy(copy_dlg_t *dialog)
     
    290290}
    291291
    292 /** Set new file dialog callback.
    293  *
    294  * @param dialog new file dialog
     292/** Set copy dialog callback.
     293 *
     294 * @param dialog Copy dialog
    295295 * @param cb New file dialog callbacks
    296296 * @param arg Callback argument
     
    303303}
    304304
    305 /** New file dialog window close handler.
     305/** Copy dialog window close handler.
    306306 *
    307307 * @param window Window
     
    318318}
    319319
    320 /** New file dialog window keyboard event handler.
     320/** Copy dialog window keyboard event handler.
    321321 *
    322322 * @param window Window
     
    349349}
    350350
    351 /** New file dialog OK button click handler.
     351/** Copy dialog OK button click handler.
    352352 *
    353353 * @param pbutton Push button
     
    363363}
    364364
    365 /** New file dialog cancel button click handler.
     365/** Copy dialog cancel button click handler.
    366366 *
    367367 * @param pbutton Push button
  • uspace/app/nav/menu.c

    r59ed424e rf9c30b9a  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5959        ui_menu_entry_t *mverify;
    6060        ui_menu_entry_t *mcopy;
     61        ui_menu_entry_t *mmove;
    6162        ui_menu_entry_t *mfsep;
    6263        ui_menu_entry_t *mexit;
     
    111112        ui_menu_entry_set_cb(mcopy, nav_menu_file_copy, (void *) menu);
    112113
     114        rc = ui_menu_entry_create(mfile, "~M~ove", "Ctrl-X", &mmove);
     115        if (rc != EOK)
     116                goto error;
     117
     118        ui_menu_entry_set_cb(mmove, nav_menu_file_move, (void *) menu);
     119
    113120        rc = ui_menu_entry_sep_create(mfile, &mfsep);
    114121        if (rc != EOK)
     
    234241}
    235242
     243/** File / Move menu entry selected.
     244 *
     245 * @param mentry Menu entry
     246 * @param arg Argument (navigator_t *)
     247 */
     248void nav_menu_file_move(ui_menu_entry_t *mentry, void *arg)
     249{
     250        nav_menu_t *menu = (nav_menu_t *)arg;
     251
     252        if (menu->cb != NULL && menu->cb->file_move != NULL)
     253                menu->cb->file_move(menu->cb_arg);
     254}
     255
    236256/** File / Exit menu entry selected.
    237257 *
  • uspace/app/nav/menu.h

    r59ed424e rf9c30b9a  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5151extern void nav_menu_file_verify(ui_menu_entry_t *, void *);
    5252extern void nav_menu_file_copy(ui_menu_entry_t *, void *);
     53extern void nav_menu_file_move(ui_menu_entry_t *, void *);
    5354extern void nav_menu_file_exit(ui_menu_entry_t *, void *);
    5455
  • uspace/app/nav/meson.build

    r59ed424e rf9c30b9a  
    3232        'dlg/existsdlg.c',
    3333        'dlg/ioerrdlg.c',
     34        'dlg/movedlg.c',
    3435        'dlg/newfiledlg.c',
    3536        'dlg/progress.c',
     
    3839        'main.c',
    3940        'menu.c',
     41        'move.c',
    4042        'nav.c',
    4143        'newfile.c',
     
    4850        'dlg/existsdlg.c',
    4951        'dlg/ioerrdlg.c',
     52        'dlg/movedlg.c',
    5053        'dlg/newfiledlg.c',
    5154        'dlg/progress.c',
     
    5356        'copy.c',
    5457        'menu.c',
     58        'move.c',
    5559        'nav.c',
    5660        'newfile.c',
     
    6064        'test/dlg/existsdlg.c',
    6165        'test/dlg/ioerrdlg.c',
     66        'test/dlg/movedlg.c',
    6267        'test/dlg/newfiledlg.c',
    6368        'test/dlg/progress.c',
  • uspace/app/nav/nav.c

    r59ed424e rf9c30b9a  
    5252#include "dlg/ioerrdlg.h"
    5353#include "menu.h"
     54#include "move.h"
    5455#include "newfile.h"
    5556#include "nav.h"
     
    7273static void navigator_file_verify(void *);
    7374static void navigator_file_copy(void *);
     75static void navigator_file_move(void *);
    7476static void navigator_file_exit(void *);
    7577
     
    8082        .file_verify = navigator_file_verify,
    8183        .file_copy = navigator_file_copy,
     84        .file_move = navigator_file_move,
    8285        .file_exit = navigator_file_exit
    8386};
     
    160163                        navigator_file_copy((void *)navigator);
    161164                        break;
     165                case KC_X:
     166                        navigator_file_move((void *)navigator);
     167                        break;
    162168                case KC_Q:
    163169                        ui_quit(navigator->ui);
     
    630636        /* flist ownership transferred */
    631637        navigator_copy_dlg(navigator, flist);
     638}
     639
     640/** File / Move menu entry selected */
     641static void navigator_file_move(void *arg)
     642{
     643        navigator_t *navigator = (navigator_t *)arg;
     644
     645        ui_file_list_entry_t *entry;
     646        ui_file_list_entry_attr_t attr;
     647        fmgt_flist_t *flist;
     648        panel_t *panel;
     649        errno_t rc;
     650
     651        panel = navigator_get_active_panel(navigator);
     652        entry = ui_file_list_get_cursor(panel->flist);
     653        ui_file_list_entry_get_attr(entry, &attr);
     654
     655        rc = fmgt_flist_create(&flist);
     656        if (rc != EOK)
     657                return;
     658
     659        rc = fmgt_flist_append(flist, attr.name);
     660        if (rc != EOK) {
     661                fmgt_flist_destroy(flist);
     662                return;
     663        }
     664
     665        /* flist ownership transferred */
     666        navigator_move_dlg(navigator, flist);
    632667}
    633668
     
    783818                fmt = "Error creating %s.";
    784819                break;
     820        case fmgt_io_delete:
     821                fmt = "Error deleting %s.";
     822                break;
    785823        }
    786824
  • uspace/app/nav/test/main.c

    r59ed424e rf9c30b9a  
    3838PCUT_IMPORT(verifydlg);
    3939PCUT_IMPORT(menu);
     40PCUT_IMPORT(movedlg);
    4041PCUT_IMPORT(nav);
    4142PCUT_IMPORT(panel);
  • uspace/app/nav/types/dlg/copydlg.h

    r59ed424e rf9c30b9a  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3434 */
    3535
    36 #ifndef TYPES_DLG_VERIFYDLG_H
    37 #define TYPES_DLG_VERIFYDLG_H
     36#ifndef TYPES_DLG_COPYDLG_H
     37#define TYPES_DLG_COPYDLG_H
    3838
    3939#include <errno.h>
  • uspace/app/nav/types/menu.h

    r59ed424e rf9c30b9a  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5353        /** File / Copy */
    5454        void (*file_copy)(void *);
     55        /** File / Move */
     56        void (*file_move)(void *);
    5557        /** File / Exit */
    5658        void (*file_exit)(void *);
  • uspace/lib/fmgt/include/fmgt.h

    r59ed424e rf9c30b9a  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4444#include "fmgt/copy.h"
    4545#include "fmgt/flist.h"
     46#include "fmgt/move.h"
    4647#include "fmgt/newfile.h"
    4748#include "fmgt/verify.h"
  • uspace/lib/fmgt/include/types/fmgt.h

    r59ed424e rf9c30b9a  
    6969        fmgt_io_open,
    7070        /** Create */
    71         fmgt_io_create
     71        fmgt_io_create,
     72        /** Delete */
     73        fmgt_io_delete
    7274} fmgt_io_op_type_t;
    7375
  • uspace/lib/fmgt/meson.build

    r59ed424e rf9c30b9a  
    3232        'src/fmgt.c',
    3333        'src/fsops.c',
     34        'src/move.c',
    3435        'src/newfile.c',
    3536        'src/verify.c',
     
    4344        'test/fsops.c',
    4445        'test/main.c',
     46        'test/move.c',
    4547        'test/newfile.c',
    4648        'test/verify.c',
  • uspace/lib/fmgt/private/fsops.h

    r59ed424e rf9c30b9a  
    4646errno_t fmgt_create_file(fmgt_t *, const char *, int *, fmgt_exists_action_t *);
    4747errno_t fmgt_create_dir(fmgt_t *, const char *);
     48errno_t fmgt_remove(fmgt_t *, const char *);
    4849errno_t fmgt_read(fmgt_t *, int, const char *, aoff64_t *, void *, size_t,
    4950    size_t *);
  • uspace/lib/fmgt/src/fsops.c

    r59ed424e rf9c30b9a  
    166166}
    167167
     168/** Remove file or empty directory.
     169 *
     170 * @param fmgt File management object
     171 * @param fame File or directory name
     172 * @return EOK on success or an error code
     173 */
     174errno_t fmgt_remove(fmgt_t *fmgt, const char *fname)
     175{
     176        fmgt_io_error_t err;
     177        fmgt_error_action_t action;
     178        errno_t rc;
     179
     180        do {
     181                rc = vfs_unlink_path(fname);
     182                if (rc == EOK)
     183                        break;
     184
     185                /* I/O error */
     186                err.fname = fname;
     187                err.optype = fmgt_io_delete;
     188                err.rc = rc;
     189
     190                fmgt_timer_stop(fmgt);
     191                action = fmgt_io_error_query(fmgt, &err);
     192                fmgt_timer_start(fmgt);
     193        } while (action == fmgt_er_retry);
     194
     195        return rc;
     196}
     197
    168198/** Read data from file.
    169199 *
  • uspace/lib/fmgt/test/copy.c

    r59ed424e rf9c30b9a  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    167167        char *fname;
    168168        char *dname;
     169        char *rname;
    169170        FILE *f;
    170171        char *p;
     
    181182        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    182183
    183         rv = asprintf(&fname, "%s/%s", p, "a");
    184         PCUT_ASSERT_TRUE(rv >= 0);
    185 
    186         rv = asprintf(&dname, "%s/%s", p, "b");
     184        rv = asprintf(&fname, "%s/a", p);
     185        PCUT_ASSERT_TRUE(rv >= 0);
     186
     187        rv = asprintf(&dname, "%s/b", p);
     188        PCUT_ASSERT_TRUE(rv >= 0);
     189
     190        rv = asprintf(&rname, "%s/b/a", p);
    187191        PCUT_ASSERT_TRUE(rv >= 0);
    188192
     
    208212        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    209213
    210         rc = fmgt_flist_append(flist, dname);
    211         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    212 
    213214        rc = fmgt_copy(fmgt, flist, dname);
    214215        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     
    217218
    218219        rv = remove(fname);
     220        PCUT_ASSERT_INT_EQUALS(0, rv);
     221
     222        rv = remove(rname);
    219223        PCUT_ASSERT_INT_EQUALS(0, rv);
    220224
  • uspace/lib/fmgt/test/fsops.c

    r59ed424e rf9c30b9a  
    131131}
    132132
     133/** Remove file. */
     134PCUT_TEST(remove)
     135{
     136        fmgt_t *fmgt = NULL;
     137        char buf[L_tmpnam];
     138        FILE *f;
     139        char *p;
     140        int rv;
     141        errno_t rc;
     142
     143        /* Create name for temporary file */
     144        p = tmpnam(buf);
     145        PCUT_ASSERT_NOT_NULL(p);
     146
     147        f = fopen(p, "wb");
     148        PCUT_ASSERT_NOT_NULL(f);
     149
     150        rv = fprintf(f, "X");
     151        PCUT_ASSERT_TRUE(rv >= 0);
     152
     153        rv = fclose(f);
     154        PCUT_ASSERT_INT_EQUALS(0, rv);
     155
     156        rc = fmgt_create(&fmgt);
     157        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     158
     159        rc = fmgt_remove(fmgt, p);
     160        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     161
     162        fmgt_destroy(fmgt);
     163}
     164
    133165/** Read data from file. */
    134166PCUT_TEST(read)
  • uspace/lib/fmgt/test/main.c

    r59ed424e rf9c30b9a  
    3131PCUT_INIT;
    3232
     33PCUT_IMPORT(copy);
    3334PCUT_IMPORT(flist);
    3435PCUT_IMPORT(fmgt);
    3536PCUT_IMPORT(fsops);
     37PCUT_IMPORT(move);
    3638PCUT_IMPORT(newfile);
    3739PCUT_IMPORT(verify);
Note: See TracChangeset for help on using the changeset viewer.