1 /* This program is free software; you can redistribute it and/or modify *
2 * it under the terms of the GNU General Public License as published by *
3 * the Free Software Foundation; either version 2 of the License, or *
4 * (at your option) any later version. *
6 (C) 2001 by The Genes Development Team
7 Original author: Peter Verthez (Peter.Verthez@advalvas.be)
13 #include "gedcom_internal.h"
16 #define INITIAL_BUF_SIZE 256
17 char *mess_buffer = NULL;
20 Gedcom_msg_handler msg_handler = NULL;
22 void gedcom_set_message_handler(Gedcom_msg_handler func)
27 void reset_mess_buffer()
29 if (mess_buffer != NULL)
30 mess_buffer[0] = '\0';
33 void init_mess_buffer()
35 if (mess_buffer == NULL) {
36 mess_buffer = (char *)malloc(INITIAL_BUF_SIZE);
37 mess_buffer[0] = '\0';
38 bufsize = INITIAL_BUF_SIZE;
42 int safe_buf_vappend(char *s, va_list ap)
47 len = strlen(mess_buffer);
49 char *buf_ptr = mess_buffer + len;
50 int rest_size = bufsize - len;
52 res = vsnprintf(buf_ptr, rest_size, s, ap);
54 if (res > -1 && res < rest_size) {
59 mess_buffer = realloc(mess_buffer, bufsize);
65 int safe_buf_append(char *s, ...)
71 res = safe_buf_vappend(s, ap);
77 int gedcom_message(char* s, ...)
84 res = safe_buf_vappend(s, ap);
86 safe_buf_append("\n");
88 (*msg_handler)(MESSAGE, mess_buffer);
92 int gedcom_warning(char* s, ...)
98 safe_buf_append("Warning on line %d: ", line_no);
100 res = safe_buf_vappend(s, ap);
102 safe_buf_append("\n");
104 (*msg_handler)(WARNING, mess_buffer);
109 int gedcom_error(char* s, ...)
115 safe_buf_append("Error on line %d: ", line_no);
117 res = safe_buf_vappend(s, ap);
119 safe_buf_append("\n");
121 (*msg_handler)(ERROR, mess_buffer);