Subject: Re: magic symlinks: uid keyword translation
To: None <>
From: Christian Biere <>
List: tech-kern
Date: 10/30/2006 19:42:45
Joerg Sonnenberger wrote:
> On Mon, Oct 30, 2006 at 04:59:54PM +0100, Christian Biere wrote:
> > Too bad, you can only return structs but not plain strings in C.
> hugh? I certainly have functions which return strings and libc has as
> well. E.g. strstr.

Those return a pointer to a string.

What I had in mind is something like this:

	printf("%s", uid_to_string(uid));

but without resorting to a static buffer (or heap-allocated) buffer.

You could write code like this:

	typedef struct uid_string_buf {
	} uid_string_buf_t;

	uid_to_string(uid_t uid)
		uid_string_buf_t buf;
		snprintf(buf.str, sizeof buf.str, [...]);
		return buf;

	uid_string_buf_t uid_str;

	uid_str = uid_to_string(uid);
	printf("%s", uid_str.str);

So everything is stack-based. No worries about leaks or buffer sizes.
Of course, the additionally required variable is somewhat awkward
but you can't even write this, unfortunately:

	printf("%s", uid_to_string_buf(uid).str); /* not legal */