HelenOS sources
This source file includes following definitions.
- PCUT_TEST
- test_walk_dir_enter
- test_walk_dir_leave
- test_walk_file
#include <errno.h>
#include <fmgt.h>
#include <pcut/pcut.h>
#include <stdbool.h>
#include <stdio.h>
#include <str.h>
#include <vfs/vfs.h>
PCUT_INIT;
PCUT_TEST_SUITE(walk);
static errno_t test_walk_dir_enter(void *, const char *);
static errno_t test_walk_dir_leave(void *, const char *);
static errno_t test_walk_file(void *, const char *);
static fmgt_walk_cb_t test_walk_cb = {
.dir_enter = test_walk_dir_enter,
.dir_leave = test_walk_dir_leave,
.file = test_walk_file
};
typedef struct {
bool dir_enter;
bool dir_leave;
bool file_proc;
char *dirname;
char *fname;
errno_t rc;
} test_resp_t;
PCUT_TEST(walk_success)
{
char buf[L_tmpnam];
char *fname;
FILE *f;
char *p;
int rv;
fmgt_flist_t *flist;
fmgt_walk_params_t params;
test_resp_t resp;
errno_t rc;
p = tmpnam(buf);
PCUT_ASSERT_NOT_NULL(p);
rc = vfs_link_path(p, KIND_DIRECTORY, NULL);
PCUT_ASSERT_ERRNO_VAL(EOK, rc);
rv = asprintf(&fname, "%s/%s", p, "a");
PCUT_ASSERT_TRUE(rv >= 0);
f = fopen(fname, "wb");
PCUT_ASSERT_NOT_NULL(f);
rv = fprintf(f, "X");
PCUT_ASSERT_TRUE(rv >= 0);
rv = fclose(f);
PCUT_ASSERT_INT_EQUALS(0, rv);
rc = fmgt_flist_create(&flist);
PCUT_ASSERT_ERRNO_VAL(EOK, rc);
rc = fmgt_flist_append(flist, p);
PCUT_ASSERT_ERRNO_VAL(EOK, rc);
fmgt_walk_params_init(¶ms);
params.flist = flist;
params.cb = &test_walk_cb;
params.arg = &resp;
resp.dir_enter = false;
resp.dir_leave = false;
resp.file_proc = false;
resp.rc = EOK;
rc = fmgt_walk(¶ms);
PCUT_ASSERT_ERRNO_VAL(EOK, rc);
PCUT_ASSERT_TRUE(resp.dir_enter);
PCUT_ASSERT_TRUE(resp.dir_leave);
PCUT_ASSERT_TRUE(resp.file_proc);
PCUT_ASSERT_STR_EQUALS(p, resp.dirname);
PCUT_ASSERT_STR_EQUALS(fname, resp.fname);
free(resp.dirname);
free(resp.fname);
fmgt_flist_destroy(flist);
rv = remove(fname);
PCUT_ASSERT_INT_EQUALS(0, rv);
rv = remove(p);
PCUT_ASSERT_INT_EQUALS(0, rv);
free(fname);
}
errno_t test_walk_dir_enter(void *arg, const char *fname)
{
test_resp_t *resp = (test_resp_t *)arg;
resp->dir_enter = true;
resp->dirname = str_dup(fname);
return resp->rc;
}
errno_t test_walk_dir_leave(void *arg, const char *fname)
{
test_resp_t *resp = (test_resp_t *)arg;
resp->dir_leave = true;
return resp->rc;
}
errno_t test_walk_file(void *arg, const char *fname)
{
test_resp_t *resp = (test_resp_t *)arg;
resp->file_proc = true;
resp->fname = str_dup(fname);
return resp->rc;
}
PCUT_EXPORT(walk);
HelenOS homepage, sources at GitHub