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: dk4rec15.ctr
12 */
13
14 /** @file dk4rec15.c The dk4rec15 module.
15 */
16
17
18 #include "dk4conf.h"
19 #include <libdk4c/dk4rec15.h>
20 #include <libdk4c/dk4ansi.h>
21
22 #if DK4_HAVE_ASSERT_H
23 #ifndef ASSERT_H_INCLUDED
24 #include <assert.h>
25 #define ASSERT_H_INCLUDED 1
26 #endif
27 #endif
28
29
30 int
dk4recode_ansi_to_c32(dk4_c32_t * dstb,size_t szdstb,const char * src,dk4_er_t * erp)31 dk4recode_ansi_to_c32(
32 dk4_c32_t *dstb, size_t szdstb, const char *src, dk4_er_t *erp
33 )
34 {
35 size_t used = 0;
36 size_t rdb = 0;
37 dk4_c32_t c32 = dkC32(0);
38 int back = 0;
39 #if DK4_USE_ASSERT
40 assert(NULL != dstb);
41 assert(0 < szdstb);
42 assert(NULL != src);
43 #endif
44 if ((NULL != dstb) && (NULL != src) && (0 < szdstb)) {
45 back = 1;
46 while (('\0' != *src) && (1 == back) && (used < szdstb)) {
47 if (0 != dk4ansi_decode(&c32, (unsigned char)(*(src++)))) {
48 dstb[used++] = c32;
49 } else {
50 back = 0;
51 dk4error_set_elsize_nelem(erp, DK4_E_SYNTAX, 1, rdb);
52 }
53 if (0 != back) { rdb++; }
54 }
55 if (used < szdstb) {
56 dstb[used] = '\0';
57 } else {
58 dstb[szdstb - 1] = '\0';
59 back = 0;
60 dk4error_set_simple_error_code(erp, DK4_E_BUFFER_TOO_SMALL);
61 }
62 } else {
63 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
64 }
65 return back;
66 }
67
68