"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: capsicum work: add fd field to got_repository, change got_packidx
To:
Yang Zhong <yzhong@freebsdfoundation.org>
Cc:
gameoftrees@openbsd.org
Date:
Tue, 15 Dec 2020 22:02:46 +0100

Download raw body.

Thread
On Tue, Dec 15, 2020 at 11:46:26AM -0800, Yang Zhong wrote:
> It worries me as well, as I've gotten burned by this a few times already.
> It's very confusing. I've attached this patch with a possible fix: I made
> a variation of got_error_from_errno2 that takes in three parameters,
> assumes the last two are path components, and joins them together.
>
> That way, if I have a path relative to, for example, got_repository's root
> directory, I can just pass in the repo's root path as well as the relative
> one. It's convenient since the repo's fd and path are stored in the same
> place. I hope to have relative paths be relative to these root fds
> whenever possible, so I feel that this solution will work most of the
> time. What do you think?

I'm afraid we'll end up with even more got_error functions to cover
combinations of the number of path components (separeated by /) and
error message components (separated by :).

Have you considered a construct such as:

	if (fd == -1) {
		char abspath[PATH_MAX];
		snprintf(abspath, sizeof(abspath), "%s/%s", rootpath, relpath);
		err = got_error_from_errno2("openat", abspath);
		goto done;
	}

That's just 2 extra lines of code compared to the case where an abspath is
already available, which isn't too bad.