Changeset 59ed424e in mainline for uspace/lib/fmgt/src/walk.c


Ignore:
Timestamp:
2026-02-11T12:02:03Z (22 hours ago)
Author:
Jiri Svoboda <jiri@…>
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)
Message:

Do not print error when user requests abort because file exists.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/fmgt/src/walk.c

    r857fba8 r59ed424e  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4646#include "fmgt/walk.h"
    4747
    48 static errno_t fmgt_walk_subtree(fmgt_walk_params_t *, const char *,
    49     const char *);
     48static errno_t fmgt_walk_subtree(fmgt_walk_t *, const char *, const char *);
    5049
    5150/** Initialize walk parameters.
     
    6362/** Walk file (invoke file callback).
    6463 *
    65  * @param params Walk parameters
     64 * @param walk Walk
    6665 * @param fname Source path
    6766 * @param dest Destination path
     
    6968 * @return EOK on success or an error code
    7069 */
    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);
     70static 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);
    7675        else
    7776                return EOK;
     
    8079/** Enter directory (invoke directory entry callback).
    8180 *
    82  * @param params Walk parameters
     81 * @param walk Walk
    8382 * @param dname Source directory
    8483 * @param dest Destination path
    8584 * @return EOK on success or an error code
    8685 */
    87 static errno_t fmgt_walk_dir_enter(fmgt_walk_params_t *params,
    88     const char *dname, const char *dest)
    89 {
    90         if (params->cb->dir_enter != NULL)
    91                 return params->cb->dir_enter(params->arg, dname, dest);
     86static 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);
    9291        else
    9392                return EOK;
     
    9695/** Leave directory (invoke directory exit callback).
    9796 *
    98  * @param params Walk parameters
     97 * @param walk Walk
    9998 * @param dname Directory path
    10099 * @param dest Destination path
    101100 * @return EOK on success or an error code
    102101 */
    103 static errno_t fmgt_walk_dir_leave(fmgt_walk_params_t *params,
    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);
     102static 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);
    108107        else
    109108                return EOK;
     
    112111/** Walk directory.
    113112 *
    114  * @param params Walk parameters
     113 * @param walk Walk
    115114 * @param dname Directory name
    116115 * @param dest Destination path or @c NULL
    117116 * @return EOK on success or an error code
    118117 */
    119 static errno_t fmgt_walk_dir(fmgt_walk_params_t *params, const char *dname,
     118static errno_t fmgt_walk_dir(fmgt_walk_t *walk, const char *dname,
    120119    const char *dest)
    121120{
     
    127126        int rv;
    128127
    129         rc = fmgt_walk_dir_enter(params, dname, dest);
     128        rc = fmgt_walk_dir_enter(walk, dname, dest);
    130129        if (rc != EOK)
    131130                goto error;
     
    138137
    139138        de = readdir(dir);
    140         while (de != NULL) {
     139        while (!walk->stop && de != NULL) {
    141140                rv = asprintf(&srcpath, "%s/%s", dname, de->d_name);
    142141                if (rv < 0) {
     
    154153                }
    155154
    156                 rc = fmgt_walk_subtree(params, srcpath, destpath);
     155                rc = fmgt_walk_subtree(walk, srcpath, destpath);
    157156                if (rc != EOK) {
    158157                        free(srcpath);
     
    168167        }
    169168
    170         rc = fmgt_walk_dir_leave(params, dname, dest);
     169        rc = fmgt_walk_dir_leave(walk, dname, dest);
    171170        if (rc != EOK)
    172171                return rc;
     
    182181/** Walk subtree.
    183182 *
    184  * @param params Walk parameters.
    185  * @param fname Subtree path.
     183 * @param walk Walk
     184 * @param fname Subtree path
    186185 * @param dest Destination path
    187186 *
    188187 * @return EOK on success or an error code.
    189188 */
    190 static errno_t fmgt_walk_subtree(fmgt_walk_params_t *params, const char *fname,
     189static errno_t fmgt_walk_subtree(fmgt_walk_t *walk, const char *fname,
    191190    const char *dest)
    192191{
     
    200199        if (stat.is_directory) {
    201200                /* Directory */
    202                 rc = fmgt_walk_dir(params, fname, dest);
     201                rc = fmgt_walk_dir(walk, fname, dest);
    203202                if (rc != EOK)
    204203                        return rc;
    205204        } else {
    206205                /* Not a directory */
    207                 rc = fmgt_walk_file(params, fname, dest);
     206                rc = fmgt_walk_file(walk, fname, dest);
    208207                if (rc != EOK)
    209208                        return rc;
     
    225224{
    226225        fmgt_flist_entry_t *entry;
     226        fmgt_walk_t walk;
    227227        char *destname;
    228228        errno_t rc;
    229229        int rv;
    230230
     231        walk.params = params;
     232        walk.stop = false;
     233
    231234        entry = fmgt_flist_first(params->flist);
    232         while (entry != NULL) {
     235        while (!walk.stop && entry != NULL) {
    233236                if (params->into_dest) {
    234237                        rv = asprintf(&destname, "%s/%s",
     
    240243                }
    241244
    242                 rc = fmgt_walk_subtree(params, entry->fname,
     245                rc = fmgt_walk_subtree(&walk, entry->fname,
    243246                    destname != NULL ? destname : params->dest);
    244247                if (rc != EOK)
Note: See TracChangeset for help on using the changeset viewer.