Changeset 1ec732a in mainline for uspace/lib/fmgt


Ignore:
Timestamp:
2025-11-28T20:40:11Z (3 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
144fafd
Parents:
3a4c6d9
Message:

Verify file - navigator operation and command-line utility.

Location:
uspace/lib/fmgt
Files:
6 added
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/fmgt/include/fmgt.h

    r3a4c6d9 r1ec732a  
    4242#include <stddef.h>
    4343#include <stdint.h>
     44#include "fmgt/flist.h"
    4445#include "fmgt/newfile.h"
     46#include "fmgt/verify.h"
    4547#include "types/fmgt.h"
    4648
  • uspace/lib/fmgt/include/fmgt/newfile.h

    r3a4c6d9 r1ec732a  
    3232/**
    3333 * @file
    34  * @brief File management library - creating new files.
     34 * @brief Create new files.
    3535 */
    3636
  • uspace/lib/fmgt/include/types/fmgt.h

    r3a4c6d9 r1ec732a  
    3838#define TYPES_FMGT_H
    3939
     40#include <adt/list.h>
    4041#include <capa.h>
    4142#include <errno.h>
    4243#include <fibril_synch.h>
    4344#include <stdbool.h>
     45
     46#define FMGT_FILE_COUNT_BUFSIZE 16
    4447
    4548/** File management progress update */
     
    5154        /** Percent of current file processed */
    5255        char curf_percent[5];
     56        /** Total number of bytes processed */
     57        char total_procb[CAPA_BLOCKS_BUFSIZE];
     58        /** Number of files processed */
     59        char total_procf[FMGT_FILE_COUNT_BUFSIZE];
    5360} fmgt_progress_t;
    5461
     
    101108        /** Progress was displayed for current file */
    102109        bool curf_progr;
     110        /** Total number of processed bytes */
     111        uint64_t total_procb;
     112        /** Total number of processed files */
     113        unsigned total_procf;
    103114        /** Post an immediate initial progress update */
    104115        bool do_init_update;
    105116} fmgt_t;
    106117
    107 /** New file flags. */
     118/** New file flags */
    108119typedef enum {
    109120        nf_none = 0x0,
     
    111122} fmgt_nf_flags_t;
    112123
     124/** File list */
     125typedef struct {
     126        /** List of fmgt_flist_entry_t */
     127        list_t files;
     128} fmgt_flist_t;
     129
     130/** File list entry */
     131typedef struct {
     132        /** Containing file list */
     133        fmgt_flist_t *flist;
     134        /** Link to flist->files */
     135        link_t lfiles;
     136        /** File name */
     137        char *fname;
     138} fmgt_flist_entry_t;
     139
     140/** File system tree walk callbacks */
     141typedef struct {
     142        errno_t (*dir_enter)(void *, const char *);
     143        errno_t (*dir_leave)(void *, const char *);
     144        errno_t (*file)(void *, const char *);
     145} fmgt_walk_cb_t;
     146
     147/** File system tree walk parameters */
     148typedef struct {
     149        /** List of files or directories (walk roots) */
     150        fmgt_flist_t *flist;
     151        /** Callbacks */
     152        fmgt_walk_cb_t *cb;
     153        /** Callback argument */
     154        void *arg;
     155} fmgt_walk_params_t;
     156
    113157#endif
    114158
  • uspace/lib/fmgt/meson.build

    r3a4c6d9 r1ec732a  
    2828
    2929src = files(
     30        'src/flist.c',
    3031        'src/fmgt.c',
    31         'src/newfile.c'
     32        'src/newfile.c',
     33        'src/verify.c',
     34        'src/walk.c'
    3235)
    3336
  • uspace/lib/fmgt/private/fmgt.h

    r3a4c6d9 r1ec732a  
    4747extern bool fmgt_abort_query(fmgt_t *);
    4848extern fmgt_error_action_t fmgt_io_error_query(fmgt_t *, fmgt_io_error_t *);
     49extern void fmgt_progress_init(fmgt_t *);
     50extern void fmgt_progress_init_file(fmgt_t *, const char *);
     51extern void fmgt_progress_incr_bytes(fmgt_t *, uint64_t);
     52extern void fmgt_progress_incr_files(fmgt_t *);
    4953extern void fmgt_initial_progress_update(fmgt_t *);
    5054extern void fmgt_final_progress_update(fmgt_t *);
  • uspace/lib/fmgt/src/fmgt.c

    r3a4c6d9 r1ec732a  
    104104}
    105105
     106/** Initialize progress counters at beginning of operation.
     107 *
     108 * @param fmgt File management object
     109 */
     110void fmgt_progress_init(fmgt_t *fmgt)
     111{
     112        fmgt->total_procf = 0;
     113        fmgt->total_procb = 0;
     114
     115        fmgt->curf_procb = 0;
     116        fmgt->curf_totalb = 0;
     117        fmgt->curf_progr = false;
     118}
     119
     120/** Initialize progress counters at beginning of processing a file.
     121 *
     122 * @param fmgt File management object
     123 * @param fname File name
     124 */
     125void fmgt_progress_init_file(fmgt_t *fmgt, const char *fname)
     126{
     127        vfs_stat_t stat;
     128        errno_t rc;
     129
     130        fmgt->curf_procb = 0;
     131        fmgt->curf_totalb = 0;
     132
     133        rc = vfs_stat_path(fname, &stat);
     134        if (rc == EOK)
     135                fmgt->curf_totalb = stat.size;
     136}
     137
     138/** Increase count of processed bytes.
     139 *
     140 * @param fmgt File management object
     141 * @param nbytes Number of newly processed bytes
     142 */
     143void fmgt_progress_incr_bytes(fmgt_t *fmgt, uint64_t nbytes)
     144{
     145        fmgt->curf_procb += nbytes;
     146        fmgt->total_procb += nbytes;
     147}
     148
     149/** Increase count of processed files.
     150 *
     151 * @parma fmgt File management object
     152 */
     153void fmgt_progress_incr_files(fmgt_t *fmgt)
     154{
     155        ++fmgt->total_procf;
     156}
     157
    106158/** Get progress update report.
    107159 *
     
    124176        snprintf(progress->curf_percent, sizeof(progress->curf_percent), "%u%%",
    125177            percent);
     178        snprintf(progress->total_procf, sizeof(progress->total_procf), "%u",
     179            fmgt->total_procf);
     180        capa_blocks_format_buf(fmgt->total_procb, 1, progress->total_procb,
     181            sizeof(progress->total_procb));
    126182}
    127183
  • uspace/lib/fmgt/src/newfile.c

    r3a4c6d9 r1ec732a  
    3030 * @{
    3131 */
    32 /** @file File management library - creating new files.
     32/** @file Create new files.
    3333 */
    3434
     
    109109        }
    110110
    111         fmgt->curf_procb = 0;
    112         fmgt->curf_totalb = fsize;
    113         fmgt->curf_progr = false;
    114         fmgt_timer_start(fmgt);
    115 
     111        /* Clear statistics. */
     112        fmgt_progress_init(fmgt);
    116113        fmgt_initial_progress_update(fmgt);
    117114
     
    149146                }
    150147
    151                 fmgt->curf_procb += nw;
     148                fmgt_progress_incr_bytes(fmgt, nw);
    152149
    153150                /* User requested abort? */
Note: See TracChangeset for help on using the changeset viewer.