Lines Matching +full:left +full:-

1 /*	$OpenBSD: sftp-realpath.c,v 1.2 2021/09/02 21:03:54 deraadt Exp $ */
46 /* XXX rewrite sftp-server to use POSIX realpath and remove this hack */
55 * in which case the path which caused trouble is left in (resolved).
65 char left[PATH_MAX], next_token[PATH_MAX], symlink[PATH_MAX]; in sftp_realpath() local
89 left_len = strlcpy(left, path + 1, sizeof(left)); in sftp_realpath()
99 left_len = strlcpy(left, path, sizeof(left)); in sftp_realpath()
101 if (left_len >= sizeof(left) || resolved_len >= PATH_MAX) { in sftp_realpath()
107 * Iterate over path components in `left'. in sftp_realpath()
111 * Extract the next path component and adjust `left' in sftp_realpath()
114 p = strchr(left, '/'); in sftp_realpath()
115 s = p ? p : left + left_len; in sftp_realpath()
116 if (s - left >= (ptrdiff_t)sizeof(next_token)) { in sftp_realpath()
120 memcpy(next_token, left, s - left); in sftp_realpath()
121 next_token[s - left] = '\0'; in sftp_realpath()
122 left_len -= s - left; in sftp_realpath()
124 memmove(left, s + 1, left_len + 1); in sftp_realpath()
125 if (resolved[resolved_len - 1] != '/') { in sftp_realpath()
143 resolved[resolved_len - 1] = '\0'; in sftp_realpath()
146 resolved_len = q - resolved; in sftp_realpath()
154 * there are no more path components left. in sftp_realpath()
173 slen = readlink(resolved, symlink, sizeof(symlink) - 1); in sftp_realpath()
182 resolved[resolved_len - 1] = '\0'; in sftp_realpath()
185 resolved_len = q - resolved; in sftp_realpath()
189 * If there are any path components left, then in sftp_realpath()
191 * in `left'. in sftp_realpath()
194 if (symlink[slen - 1] != '/') { in sftp_realpath()
203 left_len = strlcat(symlink, left, sizeof(symlink)); in sftp_realpath()
209 left_len = strlcpy(left, symlink, sizeof(left)); in sftp_realpath()
217 if (resolved_len > 1 && resolved[resolved_len - 1] == '/') in sftp_realpath()
218 resolved[resolved_len - 1] = '\0'; in sftp_realpath()