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