1 /*
2 NETWIB
3 Network library
4 Copyright(c) 1999-2010 Laurent Constantin
5 -----
6
7 Main server : http://www.laurentconstantin.com/
8 Backup server : http://laurentconstantin.free.fr/
9 [my current email address is on the web servers]
10
11 -----
12 This file is part of Netwib.
13
14 Netwib is free software: you can redistribute it and/or modify
15 it under the terms of the GNU General Public License version 3
16 as published by the Free Software Foundation.
17
18 Netwib is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details (http://www.gnu.org/).
22
23 ------------------------------------------------------------------------
24 */
25
26 #include <netwib/inc/maininc.h>
27
28 /*-------------------------------------------------------------*/
netwib_buf_append_err(netwib_err error,netwib_err_encodetype encodetype,netwib_buf * pbuf)29 netwib_err netwib_buf_append_err(netwib_err error,
30 netwib_err_encodetype encodetype,
31 netwib_buf *pbuf)
32 {
33 netwib_buf buf;
34 netwib_uint32 varerrno, varherrno, vargetlasterror;
35 netwib_uint32 savedsize;
36 netwib_err ret;
37
38 netwib_er(netwib_priv_err_syserrors(&varerrno, &varherrno,
39 &vargetlasterror));
40
41 if (pbuf == NULL) {
42 /* we work on a fake buf, just to test error */
43 netwib_er(netwib_buf_init_mallocdefault(&buf));
44 ret = netwib_priv_err_append_err(error, varerrno, varherrno,
45 vargetlasterror, encodetype, &buf);
46 netwib_er(netwib_buf_close(&buf));
47 return(ret);
48 }
49
50 /* save position in case of error */
51 savedsize = netwib__buf_ref_data_size(pbuf);
52
53 ret = netwib_priv_err_append_err(error, varerrno, varherrno,
54 vargetlasterror, encodetype, pbuf);
55
56 /* on error, restore first pos */
57 if (ret != NETWIB_ERR_OK) {
58 pbuf->endoffset = pbuf->beginoffset + savedsize;
59 }
60 return(ret);
61 }
62
63 /*-------------------------------------------------------------*/
netwib_err_display(netwib_err error,netwib_err_encodetype encodetype)64 netwib_err netwib_err_display(netwib_err error,
65 netwib_err_encodetype encodetype)
66 {
67 netwib_buf buf;
68 netwib_string pc;
69 netwib_uint32 varerrno, varherrno, vargetlasterror;
70 netwib_char arr[4096];
71
72 netwib_er(netwib_priv_err_syserrors(&varerrno, &varherrno,
73 &vargetlasterror));
74
75 netwib_er(netwib_buf_init_ext_arraysizeofempty(arr, &buf));
76 netwib_er(netwib_priv_err_append_err(error, varerrno, varherrno,
77 vargetlasterror, encodetype, &buf));
78 netwib_er(netwib_buf_ref_string(&buf, &pc));
79 printf("%s", pc);
80 fflush(stdout);
81
82 return(NETWIB_ERR_OK);
83 }
84