mirror of
https://github.com/upa/mscp.git
synced 2026-02-14 17:24:42 +08:00
cleanup error message handling
The top-level funtion in a thread should print errors using priv_get_err(), while lower-level functions should set error messages using priv_set_err() except that error mesesages should be printed immediately, e.g., under walk_src_path().
This commit is contained in:
29
src/path.c
29
src/path.c
@@ -104,7 +104,7 @@ static char *resolve_dst_path(const char *src_file_path, struct path_resolve_arg
|
||||
strncpy(copy, a->src_path, PATH_MAX);
|
||||
prefix = dirname(copy);
|
||||
if (!prefix) {
|
||||
priv_set_errv("dirname: %s", strerrno());
|
||||
pr_err("dirname: %s", strerrno());
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ static struct chunk *alloc_chunk(struct path *p)
|
||||
struct chunk *c;
|
||||
|
||||
if (!(c = malloc(sizeof(*c)))) {
|
||||
priv_set_errv("malloc %s", strerrno());
|
||||
pr_err("malloc %s", strerrno());
|
||||
return NULL;
|
||||
}
|
||||
memset(c, 0, sizeof(*c));
|
||||
@@ -231,8 +231,10 @@ static int append_path(sftp_session sftp, const char *path, struct stat st,
|
||||
memset(p, 0, sizeof(*p));
|
||||
INIT_LIST_HEAD(&p->list);
|
||||
p->path = strndup(path, PATH_MAX);
|
||||
if (!p->path)
|
||||
if (!p->path) {
|
||||
pr_err("strndup: %s", strerrno());
|
||||
goto free_out;
|
||||
}
|
||||
p->size = st.st_size;
|
||||
p->mode = st.st_mode;
|
||||
p->state = FILE_STATE_INIT;
|
||||
@@ -306,7 +308,11 @@ static int walk_path_recursive(sftp_session sftp, const char *path,
|
||||
|
||||
walk_path_recursive(sftp, next_path, path_list, a);
|
||||
/* do not stop even when walk_path_recursive returns
|
||||
* -1 due to an unreadable file. go to a next file. */
|
||||
* -1 due to an unreadable file. go to a next
|
||||
* file. Thus, do not pass error messages via
|
||||
* priv_set_err() under walk_path_recursive. Print
|
||||
* the error with pr_err immediately.
|
||||
*/
|
||||
}
|
||||
|
||||
mscp_closedir(d);
|
||||
@@ -320,16 +326,6 @@ int walk_src_path(sftp_session src_sftp, const char *src_path,
|
||||
return walk_path_recursive(src_sftp, src_path, path_list, a);
|
||||
}
|
||||
|
||||
void path_dump(struct list_head *path_list)
|
||||
{
|
||||
struct path *p;
|
||||
|
||||
list_for_each_entry(p, path_list, list) {
|
||||
printf("src: %s %lu-byte\n", p->path, p->size);
|
||||
printf("dst: %s\n", p->dst_path);
|
||||
}
|
||||
}
|
||||
|
||||
/* based on
|
||||
* https://stackoverflow.com/questions/2336242/recursive-mkdir-system-call-on-unix */
|
||||
static int touch_dst_path(struct path *p, sftp_session sftp)
|
||||
@@ -390,7 +386,6 @@ static int prepare_dst_path(struct path *p, sftp_session dst_sftp)
|
||||
if (p->state == FILE_STATE_INIT) {
|
||||
if (touch_dst_path(p, dst_sftp) < 0) {
|
||||
ret = -1;
|
||||
pr_err("failed to prepare dst path: %s", priv_get_err());
|
||||
goto out;
|
||||
}
|
||||
p->state = FILE_STATE_OPENED;
|
||||
@@ -608,11 +603,11 @@ int copy_chunk(struct chunk *c, sftp_session src_sftp, sftp_session dst_sftp,
|
||||
|
||||
/* sync stat */
|
||||
if (mscp_stat(c->p->path, &st, src_sftp) < 0) {
|
||||
pr_err("mscp_stat: %s: %s", c->p->path, strerrno());
|
||||
priv_set_errv("mscp_stat: %s: %s", c->p->path, strerrno());
|
||||
return -1;
|
||||
}
|
||||
if (mscp_setstat(c->p->dst_path, &st, preserve_ts, dst_sftp) < 0) {
|
||||
pr_err("mscp_setstat: %s: %s", c->p->path, strerrno());
|
||||
priv_set_errv("mscp_setstat: %s: %s", c->p->path, strerrno());
|
||||
return -1;
|
||||
}
|
||||
pr_info("copy done: %s", c->p->path);
|
||||
|
||||
Reference in New Issue
Block a user