Changeset 2309891 in mainline
- Timestamp:
- 2025-12-14T17:15:57Z (40 hours ago)
- Branches:
- master
- Parents:
- 144fafd
- Location:
- uspace
- Files:
-
- 13 added
- 19 edited
-
app/copy/copy.c (added)
-
app/copy/doc/doxygroups.h (added)
-
app/copy/meson.build (added)
-
app/meson.build (modified) (1 diff)
-
app/nav/copy.c (added)
-
app/nav/copy.h (added)
-
app/nav/dlg/copydlg.c (added)
-
app/nav/dlg/copydlg.h (added)
-
app/nav/menu.c (modified) (3 diffs)
-
app/nav/menu.h (modified) (1 diff)
-
app/nav/meson.build (modified) (3 diffs)
-
app/nav/nav.c (modified) (6 diffs)
-
app/nav/nav.h (modified) (1 diff)
-
app/nav/panel.c (modified) (1 diff)
-
app/nav/panel.h (modified) (1 diff)
-
app/nav/test/dlg/copydlg.c (added)
-
app/nav/test/main.c (modified) (1 diff)
-
app/nav/types/copy.h (added)
-
app/nav/types/dlg/copydlg.h (added)
-
app/nav/types/menu.h (modified) (1 diff)
-
lib/fmgt/include/fmgt.h (modified) (2 diffs)
-
lib/fmgt/include/fmgt/copy.h (added)
-
lib/fmgt/include/types/fmgt.h (modified) (2 diffs)
-
lib/fmgt/meson.build (modified) (2 diffs)
-
lib/fmgt/src/copy.c (added)
-
lib/fmgt/src/fmgt.c (modified) (2 diffs)
-
lib/fmgt/src/verify.c (modified) (6 diffs)
-
lib/fmgt/src/walk.c (modified) (10 diffs)
-
lib/fmgt/test/copy.c (added)
-
lib/fmgt/test/walk.c (modified) (3 diffs)
-
lib/ui/include/ui/filelist.h (modified) (1 diff)
-
lib/ui/src/filelist.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/meson.build
r144fafd r2309891 35 35 'blkdump', 36 36 'calculator', 37 'copy', 37 38 'corecfg', 38 39 'cpptest', -
uspace/app/nav/menu.c
r144fafd r2309891 58 58 ui_menu_entry_t *medit; 59 59 ui_menu_entry_t *mverify; 60 ui_menu_entry_t *mcopy; 60 61 ui_menu_entry_t *mfsep; 61 62 ui_menu_entry_t *mexit; … … 104 105 ui_menu_entry_set_cb(mverify, nav_menu_file_verify, (void *) menu); 105 106 107 rc = ui_menu_entry_create(mfile, "~C~opy", "Ctrl-C", &mcopy); 108 if (rc != EOK) 109 goto error; 110 111 ui_menu_entry_set_cb(mcopy, nav_menu_file_copy, (void *) menu); 112 106 113 rc = ui_menu_entry_sep_create(mfile, &mfsep); 107 114 if (rc != EOK) … … 214 221 } 215 222 223 /** File / Copy menu entry selected. 224 * 225 * @param mentry Menu entry 226 * @param arg Argument (navigator_t *) 227 */ 228 void nav_menu_file_copy(ui_menu_entry_t *mentry, void *arg) 229 { 230 nav_menu_t *menu = (nav_menu_t *)arg; 231 232 if (menu->cb != NULL && menu->cb->file_copy != NULL) 233 menu->cb->file_copy(menu->cb_arg); 234 } 235 216 236 /** File / Exit menu entry selected. 217 237 * -
uspace/app/nav/menu.h
r144fafd r2309891 50 50 extern void nav_menu_file_edit(ui_menu_entry_t *, void *); 51 51 extern void nav_menu_file_verify(ui_menu_entry_t *, void *); 52 extern void nav_menu_file_copy(ui_menu_entry_t *, void *); 52 53 extern void nav_menu_file_exit(ui_menu_entry_t *, void *); 53 54 -
uspace/app/nav/meson.build
r144fafd r2309891 29 29 deps = [ 'fmgt', 'ui' ] 30 30 src = files( 31 'dlg/copydlg.c', 31 32 'dlg/ioerrdlg.c', 32 33 'dlg/newfiledlg.c', 33 34 'dlg/progress.c', 34 35 'dlg/verifydlg.c', 36 'copy.c', 35 37 'main.c', 36 38 'menu.c', … … 42 44 43 45 test_src = files( 46 'dlg/copydlg.c', 44 47 'dlg/ioerrdlg.c', 45 48 'dlg/newfiledlg.c', 46 49 'dlg/progress.c', 47 50 'dlg/verifydlg.c', 51 'copy.c', 48 52 'menu.c', 49 53 'nav.c', … … 51 55 'panel.c', 52 56 'verify.c', 57 'test/dlg/copydlg.c', 53 58 'test/dlg/ioerrdlg.c', 54 59 'test/dlg/newfiledlg.c', -
uspace/app/nav/nav.c
r144fafd r2309891 48 48 #include <ui/ui.h> 49 49 #include <ui/window.h> 50 #include "copy.h" 50 51 #include "dlg/ioerrdlg.h" 51 52 #include "menu.h" … … 69 70 static void navigator_file_edit(void *); 70 71 static void navigator_file_verify(void *); 72 static void navigator_file_copy(void *); 71 73 static void navigator_file_exit(void *); 72 74 … … 76 78 .file_edit = navigator_file_edit, 77 79 .file_verify = navigator_file_verify, 80 .file_copy = navigator_file_copy, 78 81 .file_exit = navigator_file_exit 79 82 }; … … 141 144 navigator_file_verify((void *)navigator); 142 145 break; 146 case KC_C: 147 navigator_file_copy((void *)navigator); 148 break; 143 149 case KC_Q: 144 150 ui_quit(navigator->ui); … … 325 331 for (i = 0; i < navigator_panels; i++) { 326 332 if (panel_is_active(navigator->panel[i])) 333 return navigator->panel[i]; 334 } 335 336 /* This should not happen */ 337 assert(false); 338 return NULL; 339 } 340 341 /** Get the currently inactive navigator panel. 342 * 343 * @param navigator Navigator 344 * @return Currently inactive panel 345 */ 346 panel_t *navigator_get_inactive_panel(navigator_t *navigator) 347 { 348 int i; 349 350 for (i = 0; i < navigator_panels; i++) { 351 if (!panel_is_active(navigator->panel[i])) 327 352 return navigator->panel[i]; 328 353 } … … 561 586 } 562 587 588 /** File / Copy menu entry selected */ 589 static void navigator_file_copy(void *arg) 590 { 591 navigator_t *navigator = (navigator_t *)arg; 592 593 ui_file_list_entry_t *entry; 594 ui_file_list_entry_attr_t attr; 595 fmgt_flist_t *flist; 596 panel_t *panel; 597 errno_t rc; 598 599 panel = navigator_get_active_panel(navigator); 600 entry = ui_file_list_get_cursor(panel->flist); 601 ui_file_list_entry_get_attr(entry, &attr); 602 603 rc = fmgt_flist_create(&flist); 604 if (rc != EOK) 605 return; 606 607 rc = fmgt_flist_append(flist, attr.name); 608 if (rc != EOK) { 609 fmgt_flist_destroy(flist); 610 return; 611 } 612 613 /* flist ownership transferred */ 614 navigator_copy_dlg(navigator, flist); 615 } 616 563 617 /** File / Exit menu entry selected */ 564 618 static void navigator_file_exit(void *arg) -
uspace/app/nav/nav.h
r144fafd r2309891 49 49 extern errno_t navigator_run(const char *); 50 50 extern panel_t *navigator_get_active_panel(navigator_t *); 51 extern panel_t *navigator_get_inactive_panel(navigator_t *); 51 52 extern void navigator_switch_panel(navigator_t *); 52 53 extern void navigator_refresh_panels(navigator_t *); -
uspace/app/nav/panel.c
r144fafd r2309891 365 365 } 366 366 367 /** Get current directory from panel. 368 * 369 * @param panel Panel 370 * @return Path to current directory or @c NULL if out of memory 371 */ 372 char *panel_get_dir(panel_t *panel) 373 { 374 return ui_file_list_get_dir(panel->flist); 375 } 376 367 377 /** Refresh panel contents. 368 378 * -
uspace/app/nav/panel.h
r144fafd r2309891 58 58 extern void panel_deactivate(panel_t *); 59 59 extern errno_t panel_read_dir(panel_t *, const char *); 60 extern char *panel_get_dir(panel_t *); 60 61 extern errno_t panel_refresh(panel_t *); 61 62 extern void panel_activate_req(panel_t *); -
uspace/app/nav/test/main.c
r144fafd r2309891 31 31 PCUT_INIT; 32 32 33 PCUT_IMPORT(copydlg); 33 34 PCUT_IMPORT(ioerrdlg); 34 35 PCUT_IMPORT(newfiledlg); -
uspace/app/nav/types/menu.h
r144fafd r2309891 51 51 /** File / Verify */ 52 52 void (*file_verify)(void *); 53 /** File / Copy */ 54 void (*file_copy)(void *); 53 55 /** File / Exit */ 54 56 void (*file_exit)(void *); -
uspace/lib/fmgt/include/fmgt.h
r144fafd r2309891 42 42 #include <stddef.h> 43 43 #include <stdint.h> 44 #include "fmgt/copy.h" 44 45 #include "fmgt/flist.h" 45 46 #include "fmgt/newfile.h" … … 52 53 extern void fmgt_destroy(fmgt_t *); 53 54 extern void fmgt_set_init_update(fmgt_t *, bool); 55 extern const char *fmgt_basename(const char *); 56 extern bool fmgt_is_dir(const char *); 54 57 55 58 #endif -
uspace/lib/fmgt/include/types/fmgt.h
r144fafd r2309891 140 140 /** File system tree walk callbacks */ 141 141 typedef struct { 142 errno_t (*dir_enter)(void *, const char * );143 errno_t (*dir_leave)(void *, const char * );144 errno_t (*file)(void *, const char * );142 errno_t (*dir_enter)(void *, const char *, const char *); 143 errno_t (*dir_leave)(void *, const char *, const char *); 144 errno_t (*file)(void *, const char *, const char *); 145 145 } fmgt_walk_cb_t; 146 146 … … 149 149 /** List of files or directories (walk roots) */ 150 150 fmgt_flist_t *flist; 151 /** Destination path */ 152 const char *dest; 153 /** Copy files into destination directory. */ 154 bool into_dest; 151 155 /** Callbacks */ 152 156 fmgt_walk_cb_t *cb; -
uspace/lib/fmgt/meson.build
r144fafd r2309891 28 28 29 29 src = files( 30 'src/copy.c', 30 31 'src/flist.c', 31 32 'src/fmgt.c', … … 36 37 37 38 test_src = files( 39 'test/copy.c', 38 40 'test/flist.c', 39 41 'test/fmgt.c', -
uspace/lib/fmgt/src/fmgt.c
r144fafd r2309891 40 40 #include <stddef.h> 41 41 #include <str.h> 42 #include <str.h> 42 43 #include <vfs/vfs.h> 43 44 #include <dirent.h> … … 282 283 } 283 284 285 /** Return base name (without path component). 286 * 287 * @param path Pathname 288 * @return Base name without directory components 289 */ 290 const char *fmgt_basename(const char *path) 291 { 292 const char *p; 293 294 p = str_rchr(path, '/'); 295 if (p != NULL) 296 return p + 1; 297 else 298 return path; 299 } 300 301 /** Determine if pathname is an existing directory. 302 * 303 * @param path Pathname 304 * @return @c true if @a path exists and is a directory 305 */ 306 bool fmgt_is_dir(const char *path) 307 { 308 vfs_stat_t stat; 309 errno_t rc; 310 311 rc = vfs_stat_path(path, &stat); 312 if (rc != EOK) 313 return false; 314 315 return stat.is_directory; 316 } 317 284 318 /** @} 285 319 */ -
uspace/lib/fmgt/src/verify.c
r144fafd r2309891 33 33 */ 34 34 35 //#include <dirent.h>36 35 #include <errno.h> 37 36 #include <stdbool.h> 38 //#include <stdio.h>39 37 #include <stdlib.h> 40 //#include <stddef.h>41 //#include <str.h>42 38 #include <vfs/vfs.h> 43 //#include <dirent.h>44 39 45 40 #include "fmgt.h" … … 47 42 #include "../private/fmgt.h" 48 43 49 static errno_t fmgt_verify_file(void *, const char * );44 static errno_t fmgt_verify_file(void *, const char *, const char *); 50 45 51 46 static fmgt_walk_cb_t fmgt_verify_cb = { … … 53 48 }; 54 49 55 static errno_t fmgt_verify_file(void *arg, const char *fname) 50 /** Verify a single file. 51 * 52 * @param arg Argument (fmgt_t *) 53 * @param fname File name 54 * @param unused Unused 55 * @return EOK on success or an error code 56 */ 57 static errno_t fmgt_verify_file(void *arg, const char *fname, 58 const char *unused) 56 59 { 57 60 fmgt_t *fmgt = (fmgt_t *)arg; … … 63 66 fmgt_error_action_t action; 64 67 errno_t rc; 68 69 (void)unused; 65 70 66 71 buffer = calloc(BUFFER_SIZE, 1); … … 95 100 free(buffer); 96 101 vfs_put(fd); 102 fmgt_final_progress_update(fmgt); 97 103 return rc; 98 104 } … … 104 110 free(buffer); 105 111 vfs_put(fd); 112 fmgt_final_progress_update(fmgt); 106 113 return EINTR; 107 114 } -
uspace/lib/fmgt/src/walk.c
r144fafd r2309891 46 46 #include "fmgt/walk.h" 47 47 48 static errno_t fmgt_walk_subtree(fmgt_walk_params_t *, const char *); 48 static errno_t fmgt_walk_subtree(fmgt_walk_params_t *, const char *, 49 const char *); 49 50 50 51 /** Initialize walk parameters. … … 63 64 * 64 65 * @param params Walk parameters 65 * @param fname File path 66 * 67 * @return EOK on success or an error code 68 */ 69 static errno_t fmgt_walk_file(fmgt_walk_params_t *params, const char *fname) 66 * @param fname Source path 67 * @param dest Destination path 68 * 69 * @return EOK on success or an error code 70 */ 71 static errno_t fmgt_walk_file(fmgt_walk_params_t *params, const char *fname, 72 const char *dest) 70 73 { 71 74 if (params->cb->file != NULL) 72 return params->cb->file(params->arg, fname );75 return params->cb->file(params->arg, fname, dest); 73 76 else 74 77 return EOK; … … 78 81 * 79 82 * @param params Walk parameters 80 * @param dname Directory path 83 * @param dname Source directory 84 * @param dest Destination path 81 85 * @return EOK on success or an error code 82 86 */ 83 87 static errno_t fmgt_walk_dir_enter(fmgt_walk_params_t *params, 84 const char *dname )88 const char *dname, const char *dest) 85 89 { 86 90 if (params->cb->dir_enter != NULL) 87 return params->cb->dir_enter(params->arg, dname );91 return params->cb->dir_enter(params->arg, dname, dest); 88 92 else 89 93 return EOK; … … 94 98 * @param params Walk parameters 95 99 * @param dname Directory path 100 * @param dest Destination path 96 101 * @return EOK on success or an error code 97 102 */ 98 103 static errno_t fmgt_walk_dir_leave(fmgt_walk_params_t *params, 99 const char *dname )100 { 101 if (params->cb->dir_ enter!= NULL)102 return params->cb->dir_leave(params->arg, dname );104 const char *dname, const char *dest) 105 { 106 if (params->cb->dir_leave != NULL) 107 return params->cb->dir_leave(params->arg, dname, dest); 103 108 else 104 109 return EOK; … … 109 114 * @param params Walk parameters 110 115 * @param dname Directory name 111 * @return EOK on success or an error code 112 */ 113 static errno_t fmgt_walk_dir(fmgt_walk_params_t *params, const char *dname) 116 * @param dest Destination path or @c NULL 117 * @return EOK on success or an error code 118 */ 119 static errno_t fmgt_walk_dir(fmgt_walk_params_t *params, const char *dname, 120 const char *dest) 114 121 { 115 122 DIR *dir = NULL; 116 123 struct dirent *de; 117 124 errno_t rc; 118 char *pathname = NULL; 125 char *srcpath = NULL; 126 char *destpath = NULL; 119 127 int rv; 120 128 121 rc = fmgt_walk_dir_enter(params, dname );129 rc = fmgt_walk_dir_enter(params, dname, dest); 122 130 if (rc != EOK) 123 131 goto error; … … 131 139 de = readdir(dir); 132 140 while (de != NULL) { 133 rv = asprintf(& pathname, "%s/%s", dname, de->d_name);141 rv = asprintf(&srcpath, "%s/%s", dname, de->d_name); 134 142 if (rv < 0) { 135 143 rc = ENOMEM; … … 137 145 } 138 146 139 rc = fmgt_walk_subtree(params, pathname); 147 if (dest != NULL) { 148 rv = asprintf(&destpath, "%s/%s", dest, de->d_name); 149 if (rv < 0) { 150 rc = ENOMEM; 151 free(srcpath); 152 goto error; 153 } 154 } 155 156 rc = fmgt_walk_subtree(params, srcpath, destpath); 140 157 if (rc != EOK) { 141 free(pathname); 158 free(srcpath); 159 if (destpath != NULL) 160 free(destpath); 142 161 goto error; 143 162 } 144 163 145 free(pathname); 164 free(srcpath); 165 if (destpath != NULL) 166 free(destpath); 146 167 de = readdir(dir); 147 168 } 148 169 149 rc = fmgt_walk_dir_leave(params, dname );170 rc = fmgt_walk_dir_leave(params, dname, dest); 150 171 if (rc != EOK) 151 172 return rc; … … 161 182 /** Walk subtree. 162 183 * 163 * @params params Walk parameters. 164 * @params fname Subtree path. 184 * @param params Walk parameters. 185 * @param fname Subtree path. 186 * @param dest Destination path 165 187 * 166 188 * @return EOK on success or an error code. 167 189 */ 168 static errno_t fmgt_walk_subtree(fmgt_walk_params_t *params, const char *fname) 190 static errno_t fmgt_walk_subtree(fmgt_walk_params_t *params, const char *fname, 191 const char *dest) 169 192 { 170 193 vfs_stat_t stat; … … 177 200 if (stat.is_directory) { 178 201 /* Directory */ 179 rc = fmgt_walk_dir(params, fname );202 rc = fmgt_walk_dir(params, fname, dest); 180 203 if (rc != EOK) 181 204 return rc; 182 205 } else { 183 206 /* Not a directory */ 184 rc = fmgt_walk_file(params, fname );207 rc = fmgt_walk_file(params, fname, dest); 185 208 if (rc != EOK) 186 209 return rc; … … 202 225 { 203 226 fmgt_flist_entry_t *entry; 227 char *destname; 204 228 errno_t rc; 229 int rv; 205 230 206 231 entry = fmgt_flist_first(params->flist); 207 232 while (entry != NULL) { 208 rc = fmgt_walk_subtree(params, entry->fname); 233 if (params->into_dest) { 234 rv = asprintf(&destname, "%s/%s", 235 params->dest, fmgt_basename(entry->fname)); 236 if (rv < 0) 237 return ENOMEM; 238 } else { 239 destname = NULL; 240 } 241 242 rc = fmgt_walk_subtree(params, entry->fname, 243 destname != NULL ? destname : params->dest); 209 244 if (rc != EOK) 210 245 return rc; -
uspace/lib/fmgt/test/walk.c
r144fafd r2309891 39 39 PCUT_TEST_SUITE(walk); 40 40 41 static errno_t test_walk_dir_enter(void *, const char * );42 static errno_t test_walk_dir_leave(void *, const char * );43 static errno_t test_walk_file(void *, const char * );41 static errno_t test_walk_dir_enter(void *, const char *, const char *); 42 static errno_t test_walk_dir_leave(void *, const char *, const char *); 43 static errno_t test_walk_file(void *, const char *, const char *); 44 44 45 45 static fmgt_walk_cb_t test_walk_cb = { … … 55 55 char *dirname; 56 56 char *fname; 57 char *dest; 58 char *de_dest; 59 char *dl_dest; 57 60 errno_t rc; 58 61 } test_resp_t; 59 62 60 /** Walk file system tree . */61 PCUT_TEST(walk_ success)63 /** Walk file system tree with no destination and successful result. */ 64 PCUT_TEST(walk_nodest_success) 62 65 { 63 66 char buf[L_tmpnam]; … … 129 132 } 130 133 131 errno_t test_walk_dir_enter(void *arg, const char *fname) 134 /** Walk file system tree with destination and successful result. */ 135 PCUT_TEST(walk_dest_success) 136 { 137 char buf[L_tmpnam]; 138 char *fname; 139 FILE *f; 140 char *p; 141 int rv; 142 fmgt_flist_t *flist; 143 fmgt_walk_params_t params; 144 test_resp_t resp; 145 errno_t rc; 146 147 /* Create name for temporary directory */ 148 p = tmpnam(buf); 149 PCUT_ASSERT_NOT_NULL(p); 150 151 /* Create temporary directory */ 152 rc = vfs_link_path(p, KIND_DIRECTORY, NULL); 153 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 154 155 rv = asprintf(&fname, "%s/%s", p, "a"); 156 PCUT_ASSERT_TRUE(rv >= 0); 157 158 f = fopen(fname, "wb"); 159 PCUT_ASSERT_NOT_NULL(f); 160 161 rv = fprintf(f, "X"); 162 PCUT_ASSERT_TRUE(rv >= 0); 163 164 rv = fclose(f); 165 PCUT_ASSERT_INT_EQUALS(0, rv); 166 167 rc = fmgt_flist_create(&flist); 168 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 169 170 rc = fmgt_flist_append(flist, p); 171 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 172 173 fmgt_walk_params_init(¶ms); 174 params.flist = flist; 175 params.dest = "foo"; 176 params.cb = &test_walk_cb; 177 params.arg = &resp; 178 179 resp.dir_enter = false; 180 resp.dir_leave = false; 181 resp.file_proc = false; 182 resp.rc = EOK; 183 184 rc = fmgt_walk(¶ms); 185 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 186 187 PCUT_ASSERT_TRUE(resp.dir_enter); 188 PCUT_ASSERT_TRUE(resp.dir_leave); 189 PCUT_ASSERT_TRUE(resp.file_proc); 190 PCUT_ASSERT_STR_EQUALS(p, resp.dirname); 191 PCUT_ASSERT_STR_EQUALS(fname, resp.fname); 192 printf("dest='%s'\n", resp.dest); 193 printf("de_dest='%s'\n", resp.de_dest); 194 printf("dl_dest='%s'\n", resp.dl_dest); 195 196 free(resp.dirname); 197 free(resp.fname); 198 fmgt_flist_destroy(flist); 199 200 rv = remove(fname); 201 PCUT_ASSERT_INT_EQUALS(0, rv); 202 203 rv = remove(p); 204 PCUT_ASSERT_INT_EQUALS(0, rv); 205 206 free(fname); 207 } 208 209 errno_t test_walk_dir_enter(void *arg, const char *fname, const char *dest) 132 210 { 133 211 test_resp_t *resp = (test_resp_t *)arg; 134 212 resp->dir_enter = true; 135 213 resp->dirname = str_dup(fname); 214 resp->de_dest = str_dup(dest); 136 215 return resp->rc; 137 216 } 138 217 139 errno_t test_walk_dir_leave(void *arg, const char *fname )218 errno_t test_walk_dir_leave(void *arg, const char *fname, const char *dest) 140 219 { 141 220 test_resp_t *resp = (test_resp_t *)arg; 142 221 resp->dir_leave = true; 222 resp->dl_dest = str_dup(dest); 143 223 return resp->rc; 144 224 } 145 225 146 errno_t test_walk_file(void *arg, const char *fname )226 errno_t test_walk_file(void *arg, const char *fname, const char *dest) 147 227 { 148 228 test_resp_t *resp = (test_resp_t *)arg; 149 229 resp->file_proc = true; 150 230 resp->fname = str_dup(fname); 231 resp->dest = str_dup(dest); 151 232 return resp->rc; 152 233 } -
uspace/lib/ui/include/ui/filelist.h
r144fafd r2309891 50 50 extern void ui_file_list_set_rect(ui_file_list_t *, gfx_rect_t *); 51 51 extern errno_t ui_file_list_read_dir(ui_file_list_t *, const char *); 52 extern char *ui_file_list_get_dir(ui_file_list_t *); 52 53 extern errno_t ui_file_list_activate(ui_file_list_t *); 53 54 extern errno_t ui_file_list_refresh(ui_file_list_t *); -
uspace/lib/ui/src/filelist.c
r144fafd r2309891 424 424 } 425 425 426 /** Return path to the current directory. 427 * 428 * @return Path to current directory or @c NULL if out of memory 429 */ 430 char *ui_file_list_get_dir(ui_file_list_t *flist) 431 { 432 return str_dup(flist->dir); 433 } 434 426 435 /** Re-read file list from directory. 427 436 *
Note:
See TracChangeset
for help on using the changeset viewer.
