Changeset 59ed424e in mainline for uspace/lib/fmgt/src/walk.c
- Timestamp:
- 2026-02-11T12:02:03Z (22 hours ago)
- Branches:
- master
- Children:
- f9c30b9a
- Parents:
- 857fba8
- git-author:
- Jiri Svoboda <jiri@…> (2026-02-10 20:01:03)
- git-committer:
- Jiri Svoboda <jiri@…> (2026-02-11 12:02:03)
- File:
-
- 1 edited
-
uspace/lib/fmgt/src/walk.c (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/fmgt/src/walk.c
r857fba8 r59ed424e 1 1 /* 2 * Copyright (c) 202 5Jiri Svoboda2 * Copyright (c) 2026 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 46 46 #include "fmgt/walk.h" 47 47 48 static errno_t fmgt_walk_subtree(fmgt_walk_params_t *, const char *, 49 const char *); 48 static errno_t fmgt_walk_subtree(fmgt_walk_t *, const char *, const char *); 50 49 51 50 /** Initialize walk parameters. … … 63 62 /** Walk file (invoke file callback). 64 63 * 65 * @param params Walk parameters64 * @param walk Walk 66 65 * @param fname Source path 67 66 * @param dest Destination path … … 69 68 * @return EOK on success or an error code 70 69 */ 71 static errno_t fmgt_walk_file(fmgt_walk_ params_t *params, const char *fname,72 const char *dest) 73 { 74 if ( params->cb->file != NULL)75 return params->cb->file(params->arg, fname, dest);70 static errno_t fmgt_walk_file(fmgt_walk_t *walk, const char *fname, 71 const char *dest) 72 { 73 if (walk->params->cb->file != NULL) 74 return walk->params->cb->file(walk, fname, dest); 76 75 else 77 76 return EOK; … … 80 79 /** Enter directory (invoke directory entry callback). 81 80 * 82 * @param params Walk parameters81 * @param walk Walk 83 82 * @param dname Source directory 84 83 * @param dest Destination path 85 84 * @return EOK on success or an error code 86 85 */ 87 static errno_t fmgt_walk_dir_enter(fmgt_walk_ params_t *params,88 const char *d name, const char *dest)89 { 90 if ( params->cb->dir_enter != NULL)91 return params->cb->dir_enter(params->arg, dname, dest);86 static errno_t fmgt_walk_dir_enter(fmgt_walk_t *walk, const char *dname, 87 const char *dest) 88 { 89 if (walk->params->cb->dir_enter != NULL) 90 return walk->params->cb->dir_enter(walk, dname, dest); 92 91 else 93 92 return EOK; … … 96 95 /** Leave directory (invoke directory exit callback). 97 96 * 98 * @param params Walk parameters97 * @param walk Walk 99 98 * @param dname Directory path 100 99 * @param dest Destination path 101 100 * @return EOK on success or an error code 102 101 */ 103 static errno_t fmgt_walk_dir_leave(fmgt_walk_ params_t *params,104 const char *d name, const char *dest)105 { 106 if ( params->cb->dir_leave != NULL)107 return params->cb->dir_leave(params->arg, dname, dest);102 static errno_t fmgt_walk_dir_leave(fmgt_walk_t *walk, const char *dname, 103 const char *dest) 104 { 105 if (walk->params->cb->dir_leave != NULL) 106 return walk->params->cb->dir_leave(walk, dname, dest); 108 107 else 109 108 return EOK; … … 112 111 /** Walk directory. 113 112 * 114 * @param params Walk parameters113 * @param walk Walk 115 114 * @param dname Directory name 116 115 * @param dest Destination path or @c NULL 117 116 * @return EOK on success or an error code 118 117 */ 119 static errno_t fmgt_walk_dir(fmgt_walk_ params_t *params, const char *dname,118 static errno_t fmgt_walk_dir(fmgt_walk_t *walk, const char *dname, 120 119 const char *dest) 121 120 { … … 127 126 int rv; 128 127 129 rc = fmgt_walk_dir_enter( params, dname, dest);128 rc = fmgt_walk_dir_enter(walk, dname, dest); 130 129 if (rc != EOK) 131 130 goto error; … … 138 137 139 138 de = readdir(dir); 140 while ( de != NULL) {139 while (!walk->stop && de != NULL) { 141 140 rv = asprintf(&srcpath, "%s/%s", dname, de->d_name); 142 141 if (rv < 0) { … … 154 153 } 155 154 156 rc = fmgt_walk_subtree( params, srcpath, destpath);155 rc = fmgt_walk_subtree(walk, srcpath, destpath); 157 156 if (rc != EOK) { 158 157 free(srcpath); … … 168 167 } 169 168 170 rc = fmgt_walk_dir_leave( params, dname, dest);169 rc = fmgt_walk_dir_leave(walk, dname, dest); 171 170 if (rc != EOK) 172 171 return rc; … … 182 181 /** Walk subtree. 183 182 * 184 * @param params Walk parameters.185 * @param fname Subtree path .183 * @param walk Walk 184 * @param fname Subtree path 186 185 * @param dest Destination path 187 186 * 188 187 * @return EOK on success or an error code. 189 188 */ 190 static errno_t fmgt_walk_subtree(fmgt_walk_ params_t *params, const char *fname,189 static errno_t fmgt_walk_subtree(fmgt_walk_t *walk, const char *fname, 191 190 const char *dest) 192 191 { … … 200 199 if (stat.is_directory) { 201 200 /* Directory */ 202 rc = fmgt_walk_dir( params, fname, dest);201 rc = fmgt_walk_dir(walk, fname, dest); 203 202 if (rc != EOK) 204 203 return rc; 205 204 } else { 206 205 /* Not a directory */ 207 rc = fmgt_walk_file( params, fname, dest);206 rc = fmgt_walk_file(walk, fname, dest); 208 207 if (rc != EOK) 209 208 return rc; … … 225 224 { 226 225 fmgt_flist_entry_t *entry; 226 fmgt_walk_t walk; 227 227 char *destname; 228 228 errno_t rc; 229 229 int rv; 230 230 231 walk.params = params; 232 walk.stop = false; 233 231 234 entry = fmgt_flist_first(params->flist); 232 while ( entry != NULL) {235 while (!walk.stop && entry != NULL) { 233 236 if (params->into_dest) { 234 237 rv = asprintf(&destname, "%s/%s", … … 240 243 } 241 244 242 rc = fmgt_walk_subtree( params, entry->fname,245 rc = fmgt_walk_subtree(&walk, entry->fname, 243 246 destname != NULL ? destname : params->dest); 244 247 if (rc != EOK)
Note:
See TracChangeset
for help on using the changeset viewer.
