public inbox for sid@sourceware.org
 help / color / mirror / Atom feed
* Using vsnprintf or vasprintf in sid
@ 2003-05-23 18:17 Dave Brolley
  2003-05-26  4:47 ` Ben Elliston
  2003-05-26 17:28 ` Dave Brolley
  0 siblings, 2 replies; 4+ messages in thread
From: Dave Brolley @ 2003-05-23 18:17 UTC (permalink / raw)
  To: sid

Hi,

I have a need for printf-like printing into a buffer, however I have no 
control over the input and so I don't know the size of the buffer which 
will be required. It looks like vsnprintf (_ISOC99_SOURCE) or vasprintf 
(_GNU_SOURCE) are what I need. Is it ok to use these function in sid 
and, if so, how do I get configure to add the necessary -Dxxxx to the 
sid compilations and (if necessary) specify the library to look in?

Thanks,
Dave

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Using vsnprintf or vasprintf in sid
  2003-05-23 18:17 Using vsnprintf or vasprintf in sid Dave Brolley
@ 2003-05-26  4:47 ` Ben Elliston
  2003-05-26  5:18   ` Scott Dattalo
  2003-05-26 17:28 ` Dave Brolley
  1 sibling, 1 reply; 4+ messages in thread
From: Ben Elliston @ 2003-05-26  4:47 UTC (permalink / raw)
  To: sid

Hi Dave!

Dave Brolley <brolley@redhat.com> writes:

> I have a need for printf-like printing into a buffer, however I have
> no control over the input and so I don't know the size of the buffer
> which will be required. It looks like vsnprintf (_ISOC99_SOURCE) or
> vasprintf (_GNU_SOURCE) are what I need. Is it ok to use these
> function in sid and, if so, how do I get configure to add the
> necessary -Dxxxx to the sid compilations and (if necessary) specify
> the library to look in?

I'm not aware of any policy (the problem with SID is that it lacks the
strict policies and exciting politics of other free software
projects!) that would prevent you from using either of these functions
in SID, provided that you use Autoconf tests as you suggest.  I think
it's important to have a fall-back implementation, though, in the case
that neither is available.

Take a look at using AC_CHECK_FUNC to do the test and set a #define in
config.h to indicate the function(s) presence.  If you can, try and
isolate the test to the configure script used in the part of the
source tree you're working in rather than running the test in the
top-level configure script.

Cheers, Ben


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Using vsnprintf or vasprintf in sid
  2003-05-26  4:47 ` Ben Elliston
@ 2003-05-26  5:18   ` Scott Dattalo
  0 siblings, 0 replies; 4+ messages in thread
From: Scott Dattalo @ 2003-05-26  5:18 UTC (permalink / raw)
  Cc: sid

On 26 May 2003, Ben Elliston wrote:

> Hi Dave!
> 
> Dave Brolley <brolley@redhat.com> writes:
> 
> > I have a need for printf-like printing into a buffer, however I have
> > no control over the input and so I don't know the size of the buffer
> > which will be required. It looks like vsnprintf (_ISOC99_SOURCE) or
> > vasprintf (_GNU_SOURCE) are what I need. Is it ok to use these
> > function in sid and, if so, how do I get configure to add the
> > necessary -Dxxxx to the sid compilations and (if necessary) specify
> > the library to look in?
> 
> I'm not aware of any policy (the problem with SID is that it lacks the
> strict policies and exciting politics of other free software
> projects!) that would prevent you from using either of these functions
> in SID, provided that you use Autoconf tests as you suggest.  I think
> it's important to have a fall-back implementation, though, in the case
> that neither is available.
> 
> Take a look at using AC_CHECK_FUNC to do the test and set a #define in
> config.h to indicate the function(s) presence.  If you can, try and
> isolate the test to the configure script used in the part of the
> source tree you're working in rather than running the test in the
> top-level configure script.

IIRC, when I used vnsprintf in SDCC the Solaris users were affected. 
Here's the code in question:


#ifdef USE_VSNPRINTF
  // Alas, vsnprintf is not ANSI standard, and does not exist
  // on Solaris (and probably other non-Gnu flavored Unixes).

/*-----------------------------------------------------------------*/
/* SAFE_snprintf - like snprintf except the string pointer is      */
/*                 after the string has been printed to. This is   */
/*                 useful for printing to string as though if it   */
/*                 were a stream.                                  */
/*-----------------------------------------------------------------*/
void SAFE_snprintf(char **str, size_t *size, const  char  *format, ...)
{
  va_list val;
  int len;

  if(!str || !*str)
    return;

  va_start(val, format);

  vsnprintf(*str, *size, format, val);

  va_end (val);

  len = strlen(*str);
  if(len > *size) {
    fprintf(stderr,"WARNING, it looks like %s has 
overflowed\n",__FUNCTION__);
    fprintf(stderr,"len = %d is > str size %d\n",len,*size);
  }

  *str += len;
  *size -= len;

}

#else  //  USE_VSNPRINTF

// This version is *not* safe, despite the name.

void SAFE_snprintf(char **str, size_t *size, const  char  *format, ...)
{
  va_list val;
  int len;
  static char buffer[1024]; /* grossly conservative, but still not 
inherently safe */

  if(!str || !*str)
    return;

  va_start(val, format);

  vsprintf(buffer, format, val);
  va_end (val);

  len = strlen(buffer);
  if(len > *size) {
    fprintf(stderr,"WARNING, it looks like %s has 
overflowed\n",__FUNCTION__);
    fprintf(stderr,"len = %d is > str size %d\n",len,*size);
  }

  strcpy(*str, buffer);
  *str += len;
  *size -= len;

}

#endif    //  USE_VSNPRINTF


So the fix is a hack that really isn't fool-proof. 

Scott

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Using vsnprintf or vasprintf in sid
  2003-05-23 18:17 Using vsnprintf or vasprintf in sid Dave Brolley
  2003-05-26  4:47 ` Ben Elliston
@ 2003-05-26 17:28 ` Dave Brolley
  1 sibling, 0 replies; 4+ messages in thread
From: Dave Brolley @ 2003-05-26 17:28 UTC (permalink / raw)
  To: Dave Brolley; +Cc: sid

Thanks Ben and Scott for your suggestions. I do need Solaris support 
and, as it turns out, I chose an implementation using a large buffer 
with overflow checking, like Scott suggested, until I can figure out how 
the autoconf magic works.

Dave

Dave Brolley wrote:

> Hi,
>
> I have a need for printf-like printing into a buffer, however I have 
> no control over the input and so I don't know the size of the buffer 
> which will be required. It looks like vsnprintf (_ISOC99_SOURCE) or 
> vasprintf (_GNU_SOURCE) are what I need. Is it ok to use these 
> function in sid and, if so, how do I get configure to add the 
> necessary -Dxxxx to the sid compilations and (if necessary) specify 
> the library to look in?
>
> Thanks,
> Dave
>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-05-26 17:28 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-23 18:17 Using vsnprintf or vasprintf in sid Dave Brolley
2003-05-26  4:47 ` Ben Elliston
2003-05-26  5:18   ` Scott Dattalo
2003-05-26 17:28 ` Dave Brolley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).