1 /* -------------------------------------------------------------------- */
2 /* 									*/
3 /*									*/
4 /*									*/
5 /* Copyright (C) 2000 Angelo Masci					*/
6 /*       								*/
7 /* This program is free software; you can redistribute it and/or modify	*/
8 /* it under the terms of the GNU General Public License as published by	*/
9 /* the Free Software Foundation; either version 2 of the License, or	*/
10 /* (at your option) any later version.					*/
11 /*									*/
12 /* This program is distributed in the hope that it will be useful,	*/
13 /* but WITHOUT ANY WARRANTY; without even the implied warranty of	*/
14 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	*/
15 /* GNU General Public License for more details.				*/
16 /*									*/
17 /* You should have received a copy of the GNU General Public License	*/
18 /* along with this program; if not, write to the Free Software		*/
19 /* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.		*/
20 /* 									*/
21 /*  You can contact the author at this e-mail address:			*/
22 /*									*/
23 /*  angelo@styx.demon.co.uk						*/
24 /*									*/
25 /* --------------------------------------------------------------------
26    $Id$
27    -------------------------------------------------------------------- */
28 
29 #include <stdio.h>
30 #include <stdarg.h>
31 
32 #include "common.h"
33 #include "format.h"
34 
35 /* -------------------------------------------------------------------- */
36 /* -------------------------------------------------------------------- */
37 struct charbuf_struct
38 {
39 	char 	*buf,
40 		*ptr;
41 	int	len;
42 };
43 
44 /* -------------------------------------------------------------------- */
45 /* -------------------------------------------------------------------- */
copytobuf(void * cfarg,char * str,int len)46 static int copytobuf(void *cfarg, char *str, int len)
47 {
48 	struct 	charbuf_struct
49 		*cbuf;
50 	int	n;
51 
52 
53 	cbuf = (struct charbuf_struct *)cfarg;
54 
55 	n = 0;
56 	while (len--)
57 	{
58 		if (cbuf->len == -1)
59 		{
60 			*cbuf->ptr++ = *str++;
61 			n++;
62 		}
63 		else
64 		if (cbuf->len == 0)
65 		{
66 			*cbuf->ptr = '\0';
67 		}
68 		else
69 		{	cbuf->len--;
70 			*cbuf->ptr++ = *str++;
71 			n++;
72 		}
73 	}
74 
75 	return n;
76 }
77 
78 
79 /* -------------------------------------------------------------------- */
80 /* -------------------------------------------------------------------- */
libcommon_vsnprintf(char * buf,int len,char * fmt,va_list args)81 int libcommon_vsnprintf(char *buf, int len, char *fmt, va_list args)
82 {
83 	struct charbuf_struct cbuf;
84 
85 	cbuf.buf = buf;
86 	cbuf.ptr = buf;
87 	cbuf.len = len;
88 
89 	return format(copytobuf, NULL, &cbuf, fmt, args);
90 }
91 
92 
93 
94