Beispiel #1
0
static int getlusize(uint8_t fmt, uint8_t flags, unsigned long ln)
{
  struct lib_outstream_s nulloutstream;
  lib_nulloutstream(&nulloutstream);

  lutoascii(&nulloutstream, fmt, flags, ln);
  return nulloutstream.nput;
}
Beispiel #2
0
static int getpsize(uint8_t flags, FAR void *p)
{
  struct lib_outstream_s nulloutstream;
  lib_nulloutstream(&nulloutstream);

  ptohex(&nulloutstream, flags, p);
  return nulloutstream.nput;
}
Beispiel #3
0
static int getdblsize(uint8_t fmt, int trunc, uint8_t flags, double n)
{
  struct lib_outstream_s nulloutstream;
  lib_nulloutstream(&nulloutstream);

  lib_dtoa(&nulloutstream, fmt, trunc, flags, n);
  return nulloutstream.nput;
}
Beispiel #4
0
int asprintf (FAR char **ptr, const char *fmt, ...)
{
  struct lib_outstream_s nulloutstream;
  struct lib_memoutstream_s memoutstream;
  FAR char *buf;
  va_list ap;
  int     nbytes;

  DEBUGASSERT(ptr && fmt);

  /* First, use a nullstream to get the size of the buffer.  The number
   * of bytes returned may or may not include the null terminator.
   */
  
  lib_nulloutstream(&nulloutstream);
  va_start(ap, fmt);
  nbytes = lib_vsprintf((FAR struct lib_outstream_s *)&nulloutstream, fmt, ap);
  va_end(ap);

  /* Then allocate a buffer to hold that number of characters, adding one
   * for the null terminator.
   */

  buf = (FAR char *)malloc(nulloutstream.nput + 1);
  if (!buf)
    {
      return ERROR;
    }

  /* Initialize a memory stream to write into the allocated buffer.  The
   * memory stream will reserve one byte at the end of the buffer for the
   * null terminator and will not report this in the number of output bytes.
   */

  lib_memoutstream((FAR struct lib_memoutstream_s *)&memoutstream,
                   buf, nulloutstream.nput + 1);

  /* Then let lib_vsprintf do it's real thing */

  va_start(ap, fmt);
  nbytes = lib_vsprintf((FAR struct lib_outstream_s *)&memoutstream.public, fmt, ap);
  va_end(ap);

  /* Return a pointer to the string to the caller.  NOTE: the memstream put()
   * method has already added the NUL terminator to the end of the string (not
   * included in the nput count).
   *
   * Hmmm.. looks like the memory would be stranded if lib_vsprintf() returned
   * an error.  Does that ever happen?
   */

  DEBUGASSERT(nbytes < 0 || nbytes == nulloutstream.nput);
  *ptr = buf;
  return nbytes;
}