Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Migrate absolutepath into the library renamed pkg_absolutepath
Baptiste Daroussin committed 11 years ago
commit d38903c0066b3fb7ff9c94d5bd4739cf770e3759
parent b264e3a
6 files changed +55 -55
modified libpkg/libpkg.ver
@@ -1,5 +1,6 @@
LIBPKG_1.3 {
global:
+
	pkg_absolutepath;
	pkg_add;
	pkg_add_from_remote;
	pkg_add_port;
modified libpkg/pkg.h.in
@@ -1643,5 +1643,6 @@ char *pkg_utils_tokenize(char **);
int pkg_utils_count_spaces(const char *);
int pkg_add_port(struct pkgdb *db, struct pkg *pkg, const char *root, \
    const char *locationn, bool testing, bool old);
+
char *pkg_absolutepath(const char *src, char *dest, size_t dest_len);

#endif
modified libpkg/utils.c
@@ -987,4 +987,55 @@ pkg_utils_count_spaces(const char *args)
	return (spaces);
}

+
/* unlike realpath(3), this routine does not expand symbolic links */
+
char *
+
pkg_absolutepath(const char *src, char *dest, size_t dest_size) {
+
	size_t dest_len, src_len, cur_len;
+
	const char *cur, *next;
+

+
	src_len = strlen(src);
+
	bzero(dest, dest_size);
+
	if (src_len != 0 && src[0] != '/') {
+
		/* relative path, we use cwd */
+
		if (getcwd(dest, dest_size) == NULL)
+
			return (NULL);
+
	}
+
	dest_len = strlen(dest);
+

+
	for (cur = next = src; next != NULL; cur = next + 1) {
+
		next = strchr(cur, '/');
+
		if (next != NULL)
+
			cur_len = next - cur;
+
		else
+
			cur_len = strlen(cur);
+

+
		/* check for special cases "", "." and ".." */
+
		if (cur_len == 0)
+
			continue;
+
		else if (cur_len == 1 && cur[0] == '.')
+
			continue;
+
		else if (cur_len == 2 && cur[0] == '.' && cur[1] == '.') {
+
			const char *slash = strrchr(dest, '/');
+
			if (slash != NULL) {
+
				dest_len = slash - dest;
+
				dest[dest_len] = '\0';
+
			}
+
			continue;
+
		}
+

+
		if (dest_len + 1 + cur_len >= dest_size)
+
			return (NULL);
+
		dest[dest_len++] = '/';
+
		(void)memcpy(dest + dest_len, cur, cur_len);
+
		dest_len += cur_len;
+
		dest[dest_len] = '\0';
+
	}
+

+
	if (dest_len == 0) {
+
		if (strlcpy(dest, "/", dest_size) >= dest_size)
+
			return (NULL);
+
	}
+

+
	return (dest);
+
}

modified src/pkgcli.h
@@ -253,7 +253,6 @@ int query_select(const char *msg, const char **opts, int ncnt, int deft);
bool query_tty_yesno(bool deft, const char *msg, ...);
int info_flags(uint64_t opt, bool remote);
void print_info(struct pkg * const pkg, uint64_t opt);
-
char *absolutepath(const char *src, char *dest, size_t dest_len);
int print_jobs_summary(struct pkg_jobs *j, const char *msg, ...);
int hash_file(const char *, char[SHA256_DIGEST_LENGTH * 2 +1]);

modified src/utils.c
@@ -208,58 +208,6 @@ cleanup:
	return (i);
}

-
/* unlike realpath(3), this routine does not expand symbolic links */
-
char *
-
absolutepath(const char *src, char *dest, size_t dest_size) {
-
	size_t dest_len, src_len, cur_len;
-
	const char *cur, *next;
-

-
	src_len = strlen(src);
-
	bzero(dest, dest_size);
-
	if (src_len != 0 && src[0] != '/') {
-
		/* relative path, we use cwd */
-
		if (getcwd(dest, dest_size) == NULL)
-
			return (NULL);
-
	}
-
	dest_len = strlen(dest);
-

-
	for (cur = next = src; next != NULL; cur = next + 1) {
-
		next = strchr(cur, '/');
-
		if (next != NULL)
-
			cur_len = next - cur;
-
		else
-
			cur_len = strlen(cur);
-

-
		/* check for special cases "", "." and ".." */
-
		if (cur_len == 0)
-
			continue;
-
		else if (cur_len == 1 && cur[0] == '.')
-
			continue;
-
		else if (cur_len == 2 && cur[0] == '.' && cur[1] == '.') {
-
			const char *slash = strrchr(dest, '/');
-
			if (slash != NULL) {
-
				dest_len = slash - dest;
-
				dest[dest_len] = '\0';
-
			}
-
			continue;
-
		}
-

-
		if (dest_len + 1 + cur_len >= dest_size)
-
			return (NULL);
-
		dest[dest_len++] = '/';
-
		(void)memcpy(dest + dest_len, cur, cur_len);
-
		dest_len += cur_len;
-
		dest[dest_len] = '\0';
-
	}
-

-
	if (dest_len == 0) {
-
		if (strlcpy(dest, "/", dest_size) >= dest_size)
-
			return (NULL);
-
	}
-

-
	return (dest);
-
}
-

/* what the pkg needs to load in order to display the requested info */
int
info_flags(uint64_t opt, bool remote)
modified src/which.c
@@ -154,14 +154,14 @@ exec_which(int argc, char **argv)
					retcode = EX_OSERR;
					goto cleanup;
				} else {
-
					absolutepath(match, pathabs, sizeof(pathabs));
+
					pkg_absolutepath(match, pathabs, sizeof(pathabs));
					free(match);
				}
			}
		}

		if (!glob && !search)
-
			absolutepath(argv[0], pathabs, sizeof(pathabs));
+
			pkg_absolutepath(argv[0], pathabs, sizeof(pathabs));
		else if (!search) {
			if (strlcpy(pathabs, argv[0], sizeof(pathabs)) >= sizeof(pathabs)) {
				retcode = EX_USAGE;