Re: fdprintf() Anyone?

Joel Sherrill <[email protected]> Thu, 11 Dec 2025 18:38:23 -0600
Newsgroups gmane.comp.lib.newlib
Message-ID <CAF9ehCUfa-eteCWcmk8Jr_fPV_z=A=cio0f4=DjD9E00uTvTew@mail.gmail.com>
Thank you for the quick response and pointing out the POSIX standard
functions!!!

I am honestly quite happy not to have to seriously add anything
non-standard.

Looking at the git log, these have been in newlib a LONG time.

Thanks again.

--joel

On Thu, Dec 11, 2025 at 6:19 PM John Scott <[email protected]> wrote:

> Joel Sherrill wrote:
> > int fdprintf (int fd, const char *format,...)
>
> POSIX.1-2008 has already standardized a version of printf() for writing to
> file descriptors, and it has the same prototype: it's called dprintf
> (without the 'f' at the beginning). There is also a va_list variant named
> vdprintf(). These are widely available and I think GNU folks drove their
> specification.
>
> These are already included at
> https://sourceware.org/git/?p=newlib-cygwin.git;a=blob;f=newlib/libc/stdio/dprintf.c
> however I think the following text is no longer accurate:
> > PORTABILITY
> > This function is originally a GNU extension in glibc and is not portable.
>
> Post-standardization I think implementations picked this up without
> hesitation. You probably just missed this; in fact, dprintf() returns the
> same value as fdprintf() does to indicate success or error. I think the
> NetBurner folks giving their function a different name was, at least in
> hindsight, a botch.
>
> > But the user is using a system where they are in <fcntl.h>.
> For compatibility with that particular application I'm sure you could make
> fdprintf() an alias for dprintf(). If a user is wanting to use Newlib with
> NetBurner such a shim might be welcome in a directory specific to that
> class of systems.
>
> > Is there any interest in these eventually landing in newlib?
> The equivalent standard functions are already in Newlib and my preference
> (as someone who, to be frank, has never contributed to Newlib) is to do
> nothing here. If your users are porting an application away, defining
> '-Dfdprintf=dprintf' may be all they need to do.
>