Commit Diff


commit - ed6b5030fc87f1d187b18f724e18beb2212f6104
commit + ce031e9edbda06714eec1e83db6d05ea9230c1d2
blob - 6a24cf54d2c45cf985a0dd535b1ffcc55d464de5
blob + cd71af884a039a30fc8dc6aa6f915db2fe7a1069
--- lib/worktree.c
+++ lib/worktree.c
@@ -1292,12 +1292,15 @@ is_bad_symlink_target(int *is_bad_symlink, const char 
 	 * in which the blob object is being installed.
 	 */
 	if (!got_path_is_absolute(target_path)) {
-		char *abspath;
-		char *parent = dirname(ondisk_path);
-		if (parent == NULL)
-			return got_error_from_errno2("dirname", ondisk_path);
-		if (asprintf(&abspath, "%s/%s",  parent, target_path) == -1)
+		char *abspath, *parent;
+		err = got_path_dirname(&parent, ondisk_path);
+		if (err)
+			return err;
+		if (asprintf(&abspath, "%s/%s",  parent, target_path) == -1) {
+			free(parent);
 			return got_error_from_errno("asprintf");
+		}
+		free(parent);
 		if (strlen(abspath) >= sizeof(canonpath)) {
 			err = got_error_path(abspath, GOT_ERR_BAD_PATH);
 			free(abspath);