1 /* Dia -- an diagram creation/manipulation program
2 * Copyright (C) 1998 Alexander Larsson
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 /* This file contains some code from glib.
20 Here is the copyright notice:
22 * GLIB - Library of useful routines for C programming
23 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
49 format_string_length_upper_bound (const char* fmt
, va_list *args
)
72 len
+= va_arg(*args
, int);
84 len
+= strtol (fmt
, (char **)&fmt
, 10);
93 /* I ignore 'q' and 'L', they're not portable anyway. */
96 tmp
= va_arg(*args
, char *);
100 len
+= strlen ("(null)");
110 (void)va_arg (*args
, long);
112 (void)va_arg (*args
, int);
114 (void)va_arg (*args
, int);
121 (void)va_arg (*args
, long);
129 (void)va_arg (*args
, double);
134 (void)va_arg (*args
, int);
140 (void)va_arg (*args
, void*);
160 #ifndef HAVE_SNPRINTF
162 snprintf ( char *str
, size_t n
, const char *format
, ... )
164 static char *buf
= NULL
;
165 static int alloc
= 0;
169 va_start (args
, format
);
170 len
= format_string_length_upper_bound (format
, &args
);
177 alloc
= nearest_pow (MAX(len
+ 1, 1024));
179 buf
= g_new (char, alloc
);
182 va_start (args2
, format
);
183 vsprintf (buf
, format
, args2
);
186 strncpy(str
, buf
, n
);
189 return (len
>= n
)?-1:strlen(str
);