vasprintf.c (1b0181df2f46ef73a41ea8c9b7026718f8eec3a1) vasprintf.c (6a18a77221ca134826742f1aa91fe4966f772b22)
1/* $OpenBSD: vasprintf.c,v 1.4 1998/06/21 22:13:47 millert Exp $ */
2
3/*
4 * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 22 unchanged lines hidden (view full) ---

31__FBSDID("$FreeBSD$");
32
33#include <stdio.h>
34#include <stdlib.h>
35#include <errno.h>
36#include "local.h"
37
38int
1/* $OpenBSD: vasprintf.c,v 1.4 1998/06/21 22:13:47 millert Exp $ */
2
3/*
4 * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 22 unchanged lines hidden (view full) ---

31__FBSDID("$FreeBSD$");
32
33#include <stdio.h>
34#include <stdlib.h>
35#include <errno.h>
36#include "local.h"
37
38int
39vasprintf(str, fmt, ap)
40 char **str;
41 const char *fmt;
42 __va_list ap;
39vasprintf(char **str, const char *fmt, __va_list ap)
43{
40{
44 int ret;
45 FILE f = FAKE_FILE;
41 FILE f = FAKE_FILE;
42 int ret;
46
47 f._flags = __SWR | __SSTR | __SALC;
43
44 f._flags = __SWR | __SSTR | __SALC;
48 f._bf._base = f._p = (unsigned char *)malloc(128);
45 f._bf._base = f._p = malloc(128);
49 if (f._bf._base == NULL) {
50 *str = NULL;
51 errno = ENOMEM;
52 return (-1);
53 }
54 f._bf._size = f._w = 127; /* Leave room for the NUL */
55 ret = __vfprintf(&f, fmt, ap);
56 if (ret < 0) {
57 free(f._bf._base);
58 *str = NULL;
59 errno = ENOMEM;
60 return (-1);
61 }
62 *f._p = '\0';
63 *str = (char *)f._bf._base;
64 return (ret);
65}
46 if (f._bf._base == NULL) {
47 *str = NULL;
48 errno = ENOMEM;
49 return (-1);
50 }
51 f._bf._size = f._w = 127; /* Leave room for the NUL */
52 ret = __vfprintf(&f, fmt, ap);
53 if (ret < 0) {
54 free(f._bf._base);
55 *str = NULL;
56 errno = ENOMEM;
57 return (-1);
58 }
59 *f._p = '\0';
60 *str = (char *)f._bf._base;
61 return (ret);
62}