Rev 4874 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4874 | Rev 4921 | ||
---|---|---|---|
1 | /* |
1 | /* |
2 | * Copyright (c) 1990 The Regents of the University of California. |
2 | * Copyright (c) 1990 The Regents of the University of California. |
3 | * All rights reserved. |
3 | * All rights reserved. |
4 | * |
4 | * |
5 | * Redistribution and use in source and binary forms are permitted |
5 | * Redistribution and use in source and binary forms are permitted |
6 | * provided that the above copyright notice and this paragraph are |
6 | * provided that the above copyright notice and this paragraph are |
7 | * duplicated in all such forms and that any documentation, |
7 | * duplicated in all such forms and that any documentation, |
8 | * advertising materials, and other materials related to such |
8 | * advertising materials, and other materials related to such |
9 | * distribution and use acknowledge that the software was developed |
9 | * distribution and use acknowledge that the software was developed |
10 | * by the University of California, Berkeley. The name of the |
10 | * by the University of California, Berkeley. The name of the |
11 | * University may not be used to endorse or promote products derived |
11 | * University may not be used to endorse or promote products derived |
12 | * from this software without specific prior written permission. |
12 | * from this software without specific prior written permission. |
13 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR |
13 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR |
14 | * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED |
14 | * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED |
15 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
15 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
16 | */ |
16 | */ |
17 | /* doc in vfprintf.c */ |
17 | /* doc in vfprintf.c */ |
18 | 18 | ||
19 | #if defined(LIBC_SCCS) && !defined(lint) |
19 | #if defined(LIBC_SCCS) && !defined(lint) |
20 | static char sccsid[] = "%W% (Berkeley) %G%"; |
20 | static char sccsid[] = "%W% (Berkeley) %G%"; |
21 | #endif /* LIBC_SCCS and not lint */ |
21 | #endif /* LIBC_SCCS and not lint */ |
22 | 22 | ||
23 | #include <_ansi.h> |
23 | #include <_ansi.h> |
24 | #include |
24 | #include |
25 | #include |
25 | #include |
26 | #include |
26 | #include |
27 | #include |
27 | #include |
28 | #include |
28 | #include |
29 | 29 | ||
30 | #include "local.h" |
30 | #include "local.h" |
31 | 31 | ||
32 | #ifndef _REENT_ONLY |
32 | #ifndef _REENT_ONLY |
33 | 33 | ||
34 | int |
34 | int |
35 | _DEFUN(vsnprintf, (str, size, fmt, ap), |
35 | _DEFUN(vsnprintf, (str, size, fmt, ap), |
36 | char *str _AND |
36 | char *__restrict str _AND |
37 | size_t size _AND |
37 | size_t size _AND |
38 | const char *fmt _AND |
38 | const char *__restrict fmt _AND |
39 | va_list ap) |
39 | va_list ap) |
40 | { |
40 | { |
41 | return _vsnprintf_r (_REENT, str, size, fmt, ap); |
41 | return _vsnprintf_r (_REENT, str, size, fmt, ap); |
42 | } |
42 | } |
43 | 43 | ||
44 | #endif /* !_REENT_ONLY */ |
44 | #endif /* !_REENT_ONLY */ |
45 | 45 | ||
46 | int |
46 | int |
47 | _DEFUN(_vsnprintf_r, (ptr, str, size, fmt, ap), |
47 | _DEFUN(_vsnprintf_r, (ptr, str, size, fmt, ap), |
48 | struct _reent *ptr _AND |
48 | struct _reent *ptr _AND |
49 | char *str _AND |
49 | char *__restrict str _AND |
50 | size_t size _AND |
50 | size_t size _AND |
51 | const char *fmt _AND |
51 | const char *__restrict fmt _AND |
52 | va_list ap) |
52 | va_list ap) |
53 | { |
53 | { |
54 | int ret; |
54 | int ret; |
55 | FILE f; |
55 | FILE f; |
56 | 56 | ||
57 | if (size > INT_MAX) |
57 | if (size > INT_MAX) |
58 | { |
58 | { |
59 | ptr->_errno = EOVERFLOW; |
59 | ptr->_errno = EOVERFLOW; |
60 | return EOF; |
60 | return EOF; |
61 | } |
61 | } |
62 | f._flags = __SWR | __SSTR; |
62 | f._flags = __SWR | __SSTR; |
63 | f._bf._base = f._p = (unsigned char *) str; |
63 | f._bf._base = f._p = (unsigned char *) str; |
64 | f._bf._size = f._w = (size > 0 ? size - 1 : 0); |
64 | f._bf._size = f._w = (size > 0 ? size - 1 : 0); |
65 | f._file = -1; /* No file. */ |
65 | f._file = -1; /* No file. */ |
66 | ret = _svfprintf_r (ptr, &f, fmt, ap); |
66 | ret = _svfprintf_r (ptr, &f, fmt, ap); |
67 | if (ret < EOF) |
67 | if (ret < EOF) |
68 | ptr->_errno = EOVERFLOW; |
68 | ptr->_errno = EOVERFLOW; |
69 | if (size > 0) |
69 | if (size > 0) |
70 | *f._p = 0; |
70 | *f._p = 0; |
71 | return ret; |
71 | return ret; |
72 | }> |
72 | }> |