diff options
author | djm@openbsd.org <djm@openbsd.org> | 2020-12-04 03:41:10 +0100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2020-12-04 03:43:01 +0100 |
commit | e4d1a0b40add800b6e9352b40c2223e44acc3a45 (patch) | |
tree | 5c6f615c562f21abebb4308824f7125c4ae9e98e /sftp.c | |
parent | upstream: make ssh_free(NULL) a no-op (diff) | |
download | openssh-e4d1a0b40add800b6e9352b40c2223e44acc3a45.tar.xz openssh-e4d1a0b40add800b6e9352b40c2223e44acc3a45.zip |
upstream: shuffle a few utility functions into sftp-client.c; from
Jakub Jelen
OpenBSD-Commit-ID: fdeb1aae1f6149b193f12cd2af158f948c514a2a
Diffstat (limited to 'sftp.c')
-rw-r--r-- | sftp.c | 58 |
1 files changed, 5 insertions, 53 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: sftp.c,v 1.204 2020/10/29 02:52:43 djm Exp $ */ +/* $OpenBSD: sftp.c,v 1.205 2020/12/04 02:41:10 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> * @@ -385,20 +385,6 @@ path_strip(const char *path, const char *strip) return (xstrdup(path)); } -static char * -make_absolute(char *p, const char *pwd) -{ - char *abs_str; - - /* Derelativise */ - if (p && !path_absolute(p)) { - abs_str = path_append(pwd, p); - free(p); - return(abs_str); - } else - return(p); -} - static int parse_getput_flags(const char *cmd, char **argv, int argc, int *aflag, int *fflag, int *pflag, int *rflag) @@ -608,40 +594,6 @@ parse_no_flags(const char *cmd, char **argv, int argc) } static int -is_dir(const char *path) -{ - struct stat sb; - - /* XXX: report errors? */ - if (stat(path, &sb) == -1) - return(0); - - return(S_ISDIR(sb.st_mode)); -} - -static int -remote_is_dir(struct sftp_conn *conn, const char *path) -{ - Attrib *a; - - /* XXX: report errors? */ - if ((a = do_stat(conn, path, 1)) == NULL) - return(0); - if (!(a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS)) - return(0); - return(S_ISDIR(a->perm)); -} - -/* Check whether path returned from glob(..., GLOB_MARK, ...) is a directory */ -static int -pathname_is_dir(const char *pathname) -{ - size_t l = strlen(pathname); - - return l > 0 && pathname[l - 1] == '/'; -} - -static int process_get(struct sftp_conn *conn, const char *src, const char *dst, const char *pwd, int pflag, int rflag, int resume, int fflag) { @@ -670,7 +622,7 @@ process_get(struct sftp_conn *conn, const char *src, const char *dst, * If multiple matches then dst must be a directory or * unspecified. */ - if (g.gl_matchc > 1 && dst != NULL && !is_dir(dst)) { + if (g.gl_matchc > 1 && dst != NULL && !local_is_dir(dst)) { error("Multiple source paths, but destination " "\"%s\" is not a directory", dst); err = -1; @@ -687,7 +639,7 @@ process_get(struct sftp_conn *conn, const char *src, const char *dst, } if (g.gl_matchc == 1 && dst) { - if (is_dir(dst)) { + if (local_is_dir(dst)) { abs_dst = path_append(dst, filename); } else { abs_dst = xstrdup(dst); @@ -706,7 +658,7 @@ process_get(struct sftp_conn *conn, const char *src, const char *dst, else if (!quiet && !resume) mprintf("Fetching %s to %s\n", g.gl_pathv[i], abs_dst); - if (pathname_is_dir(g.gl_pathv[i]) && (rflag || global_rflag)) { + if (globpath_is_dir(g.gl_pathv[i]) && (rflag || global_rflag)) { if (download_dir(conn, g.gl_pathv[i], abs_dst, NULL, pflag || global_pflag, 1, resume, fflag || global_fflag) == -1) @@ -799,7 +751,7 @@ process_put(struct sftp_conn *conn, const char *src, const char *dst, else if (!quiet && !resume) mprintf("Uploading %s to %s\n", g.gl_pathv[i], abs_dst); - if (pathname_is_dir(g.gl_pathv[i]) && (rflag || global_rflag)) { + if (globpath_is_dir(g.gl_pathv[i]) && (rflag || global_rflag)) { if (upload_dir(conn, g.gl_pathv[i], abs_dst, pflag || global_pflag, 1, resume, fflag || global_fflag) == -1) |