Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4921 Serge 1
/*
2
 * Copyright (c) 1990, 2007 The Regents of the University of California.
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms are permitted
6
 * provided that the above copyright notice and this paragraph are
7
 * duplicated in all such forms and that any documentation,
8
 * advertising materials, and other materials related to such
9
 * distribution and use acknowledge that the software was developed
10
 * by the University of California, Berkeley.  The name of the
11
 * University may not be used to endorse or promote products derived
12
 * from this software without specific prior written permission.
13
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16
 */
17
/* This code was copied from sprintf.c */
18
/* doc in sprintf.c */
19
 
20
#include <_ansi.h>
21
#include 
22
#include 
23
#include 
24
#include 
25
#include "local.h"
26
 
27
int
28
_DEFUN(_asprintf_r, (ptr, strp, fmt),
29
       struct _reent *ptr _AND
30
       char **__restrict strp        _AND
31
       const char *__restrict fmt _DOTS)
32
{
33
  int ret;
34
  va_list ap;
35
  FILE f;
36
 
37
  /* mark a zero-length reallocatable buffer */
38
  f._flags = __SWR | __SSTR | __SMBF;
39
  f._bf._base = f._p = NULL;
40
  f._bf._size = f._w = 0;
41
  f._file = -1;  /* No file. */
42
  va_start (ap, fmt);
43
  ret = _svfprintf_r (ptr, &f, fmt, ap);
44
  va_end (ap);
45
  if (ret >= 0)
46
    {
47
      *f._p = 0;
48
      *strp = (char *) f._bf._base;
49
    }
50
  return (ret);
51
}
52
 
53
#ifndef _REENT_ONLY
54
 
55
int
56
_DEFUN(asprintf, (strp, fmt),
57
       char **__restrict strp _AND
58
       const char *__restrict fmt _DOTS)
59
{
60
  int ret;
61
  va_list ap;
62
  FILE f;
63
 
64
  /* mark a zero-length reallocatable buffer */
65
  f._flags = __SWR | __SSTR | __SMBF;
66
  f._bf._base = f._p = NULL;
67
  f._bf._size = f._w = 0;
68
  f._file = -1;  /* No file. */
69
  va_start (ap, fmt);
70
  ret = _svfprintf_r (_REENT, &f, fmt, ap);
71
  va_end (ap);
72
  if (ret >= 0)
73
    {
74
      *f._p = 0;
75
      *strp = (char *) f._bf._base;
76
    }
77
  return (ret);
78
}
79
 
80
#endif /* ! _REENT_ONLY */