1 /*
2 Copyright (C) 2015-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5 
6 /*
7 	WARNING: This file was generated by the dkct program (see
8 	http://dktools.sourceforge.net/ for details).
9 	Changes you make here will be lost if dkct is run again!
10 	You should modify the original source and run dkct on it.
11 	Original source: dk4error.ctr
12 */
13 
14 /**	@file dk4error.c The dk4error module.
15 */
16 
17 
18 #include "dk4conf.h"
19 
20 #if DK4_ON_WINDOWS && (DK4_WIN_AVOID_CRT || DK4_WIN_DENY_CRT)
21 #ifndef WINDOWS_H_INCLUDED
22 #include <windows.h>
23 #define	WINDOWS_H_INCLUDED 1
24 #endif
25 #endif
26 
27 #include <libdk4base/dk4types.h>
28 #include <libdk4base/dk4error.h>
29 #include <libdk4base/dk4mem.h>
30 
31 #if DK4_HAVE_STRING_H
32 #ifndef STRING_H_INCLUDED
33 #include <string.h>
34 #define	STRING_H_INCLUDED 1
35 #endif
36 #endif
37 
38 
39 
40 
41 
42 
43 
44 void
45 
dk4error_init(dk4_er_t * erp)46 dk4error_init(dk4_er_t *erp)
47 {
48 
49   if (NULL != erp) {
50 #if DK4_ON_WINDOWS
51   /* +++ Windows */
52 #if DK4_WIN_AVOID_CRT || DK4_WIN_DENY_CRT
53     ZeroMemory(erp, sizeof(dk4_er_t));
54 #else
55     memset(erp, 0, sizeof(dk4_er_t));
56 #endif
57   /* --- Windows */
58 #else
59   /* +++ non-Windows */
60 #if DK4_HAVE_MEMSET
61     memset(erp, 0, sizeof(dk4_er_t));
62 #else
63 #if DK4_HAVE_BZERO
64     bzero(erp, sizeof(dk4_er_t);
65 #else
66     {
67       register char	*ptr;
68       register size_t	 sz;
69       ptr = (char *)erp; sz = sizeof(dk4_er_t);
70       while(sz--) { *(ptr++) = '\0'; }
71     }
72 #endif
73 #endif
74   /* --- non-Windows */
75 #endif
76     erp->ec = DK4_E_NONE;
77   }
78 
79 }
80 
81 
82 
83 void
84 
dk4error_set_simple_error_code(dk4_er_t * erp,int ec)85 dk4error_set_simple_error_code(dk4_er_t *erp, int ec)
86 {
87   if (NULL != erp) {
88     if (DK4_E_NONE == erp->ec) {
89       erp->ec = ec;
90     }
91   }
92 }
93 
94 
95 
96 void
97 
dk4error_set_elsize_nelem(dk4_er_t * erp,int ec,size_t sz,size_t ne)98 dk4error_set_elsize_nelem(dk4_er_t *erp, int ec, size_t sz, size_t ne)
99 {
100   if (NULL != erp) {
101     if (DK4_E_NONE == erp->ec) {
102       erp->ec = ec;
103       (erp->dt).mem.elsize = sz;
104       (erp->dt).mem.nelem  = ne;
105     }
106   }
107 }
108 
109 
110 
111 void
112 
dk4error_set_idetails(dk4_er_t * erp,int ec,int errnval)113 dk4error_set_idetails(dk4_er_t *erp, int ec, int errnval)
114 {
115   if (NULL != erp) {
116     if (DK4_E_NONE == erp->ec) {
117       erp->ec = ec;
118       (erp->dt).iDetails1 = errnval;
119     }
120   }
121 }
122 
123 
124 void
125 
dk4error_set_ldetails(dk4_er_t * erp,int ec,long errnval)126 dk4error_set_ldetails(dk4_er_t *erp, int ec, long errnval)
127 {
128   if (NULL != erp) {
129     if (DK4_E_NONE == erp->ec) {
130       erp->ec = ec;
131       (erp->dt).lDetails1 = errnval;
132     }
133   }
134 }
135 
136 
137 
138 void
139 
dk4error_set_with_position(dk4_er_t * erp,int ec,dk4_um_t byteno,dk4_um_t lineno,dk4_um_t charno,dk4_um_t charinline)140 dk4error_set_with_position(
141   dk4_er_t	*erp,
142   int		 ec,
143   dk4_um_t	 byteno,
144   dk4_um_t	 lineno,
145   dk4_um_t	 charno,
146   dk4_um_t	 charinline
147 )
148 {
149   if (NULL != erp) {
150     if (DK4_E_NONE == erp->ec) {
151       erp->ec = ec;
152 
153 
154 
155 
156       (erp->dt).fpos.byteno = byteno;
157       (erp->dt).fpos.lineno = lineno;
158       (erp->dt).fpos.charno = charno;
159       (erp->dt).fpos.charinline = charinline;
160     }
161   }
162 }
163 
164 
165 
166 void
167 
dk4error_copy(dk4_er_t * dptr,const dk4_er_t * sptr)168 dk4error_copy(dk4_er_t *dptr, const dk4_er_t *sptr)
169 {
170   if ((NULL != dptr) && (NULL != sptr)) {
171     if (DK4_E_NONE == dptr->ec) {
172 #if DK4_ON_WINDOWS
173   /* +++ Windows */
174 #if DK4_WIN_AVOID_CRT || DK4_WIN_DENY_CRT
175       CopyMemory(dptr, sptr, sizeof(dk4_er_t));
176 #else
177       memcpy(dptr, sptr, sizeof(dk4_er_t));
178 #endif
179   /* --- Windows */
180 #else
181   /* +++ non-Windows */
182 #if DK4_HAVE_MEMCPY
183       memcpy(dptr, sptr, sizeof(dk4_er_t));
184 #else
185 #if DK4_HAVE_BCOPY
186       bcopy(sptr, dptr, sizeof(dk4_er_t));
187 #else
188       register 		unsigned char	*dp;	/* Destination pointer */
189       register const	unsigned char	*sp;	/* Source pointer */
190       register		size_t		 xsz;	/* Number remaining bytes */
191 
192       dp = (unsigned char *)dptr;
193       sp = (const unsigned char *)sptr;
194       xsz = sizeof(dk4_er_t);
195       while(0 < xsz--) { *(dp++) = *(sp++); }
196 #endif
197 #endif
198   /* --- non-Windows */
199 #endif
200     }
201   }
202 }
203 
204