diff options
Diffstat (limited to 'support/dktools/dk4rec18.ctr')
-rw-r--r-- | support/dktools/dk4rec18.ctr | 194 |
1 files changed, 0 insertions, 194 deletions
diff --git a/support/dktools/dk4rec18.ctr b/support/dktools/dk4rec18.ctr deleted file mode 100644 index c20d2c4f03..0000000000 --- a/support/dktools/dk4rec18.ctr +++ /dev/null @@ -1,194 +0,0 @@ -%% options - -copyright owner = Dirk Krause -copyright year = 2015-xxxx -SPDX-License-Identifier: BSD-3-Clause - - -%% header - -/** @file - String recoding from 32 bit to UTF-8. - - CRT on Windows: Not used. -*/ - -#ifndef DK4CONF_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4conf.h" -#else -#include <dktools-4/dk4conf.h> -#endif -#endif - -#ifndef DK4TYPES_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4types.h" -#else -#include <dktools-4/dk4types.h> -#endif -#endif - -#ifndef DK4ERROR_H_INCLUDED -#if DK4_BUILDING_DKTOOLS4 -#include "dk4error.h" -#else -#include <dktools-4/dk4error.h> -#endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/** Recode string from 32 bit to UTF-8. - @param dstb Destination buffer. - @param szdstb Size of destination buffer (number of bytes). - @param src Source string to convert. - @param erp Error report, may be NULL. - @return 1 on success, 0 on error. - - Error codes: - - DK4_E_INVALID_ARGUMENTS<br> - if src or dstb is NULL or szdstb is 0, - - DK4_E_BUFFER_TOO_SMALL<br> - if dstb is too small, - - DK4_E_SYNTAX<br> - with the number of successfully recoded characters in nelem if a - non-recodable character was found. -*/ -int -dk4recode_c32_to_utf8( - char *dstb, size_t szdstb, const dk4_c32_t *src, dk4_er_t *erp -); - -/** Calculate required buffer size (including final 0x00 byte) - for C32 to UTF-8 conversion. - @param src C32 source string. - @param erp Error report, may be NULL. - @return Positive buffer size on success, 0 on error. - - Error codes: - - DK4_E_INVALID_ARGUMENTS<br> - if src or dstb is NULL or szdstb is 0, - - DK4_E_SYNTAX<br> - with the number of successfully recoded characters in nelem if a - non-recodable character was found. -*/ -size_t -dk4recode_size_c32_to_utf8(const dk4_c32_t *src, dk4_er_t *erp); - -#ifdef __cplusplus -} -#endif - -%% module - -#include "dk4conf.h" -#include "dk4rec18.h" -#include "dk4mem.h" -#include "dk4utf8.h" - -#if DK4_HAVE_ASSERT_H -#ifndef ASSERT_H_INCLUDED -#include <assert.h> -#define ASSERT_H_INCLUDED 1 -#endif -#endif - - -$!trace-include - - - -size_t -dk4recode_size_c32_to_utf8(const dk4_c32_t *src, dk4_er_t *erp) -{ - dk4_er_t er; - unsigned char buf[8]; - size_t sz; - size_t rd = 0; - size_t back = 0; - dk4_c32_t c32 = dkC32(0); -#if DK4_USE_ASSERT - assert(NULL != src); -#endif - if (NULL != src) { - dk4error_init(&er); - while (dkC32(0) != (c32 = *(src++))) { - sz = sizeof(buf); - if (0 != dk4utf8_encode(buf, &sz, c32, &er)) { - if ((SIZE_MAX - sz) >= back) { - back += sz; - rd++; - } else { - dk4error_set_simple_error_code(&er, DK4_E_MATH_OVERFLOW); - } - } - } - if (SIZE_MAX > back) { - back++; - } else { - dk4error_set_simple_error_code(&er, DK4_E_MATH_OVERFLOW); - } - if (DK4_E_NONE != er.ec) { - back = 0; - dk4error_copy(erp, &er); - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; -} - - - -int -dk4recode_c32_to_utf8( - char *dstb, size_t szdstb, const dk4_c32_t *src, dk4_er_t *erp -) -{ - unsigned char buf[8]; - size_t sz; - size_t rd = 0; - size_t used = 0; - dk4_c32_t c32 = dkC32(0); - int back = 0; -#if DK4_USE_ASSERT - assert(NULL != dstb); - assert(0 < szdstb); - assert(NULL != src); -#endif - if ((NULL != dstb) && (0 < szdstb) && (NULL != src)) { - back = 1; - while((dkC32(0) != *src) && (1 == back) && (used < szdstb)) { - c32 = *(src++); - sz = sizeof(buf); - if (0 != dk4utf8_encode(buf, &sz, c32, erp)) { - if ((szdstb - used) > sz) { - DK4_MEMCPY(&(dstb[used]),buf,sz); - used += sz; - } else { - back = 0; - dk4error_set_simple_error_code(erp, DK4_E_BUFFER_TOO_SMALL); - } - } else { - back = 0; - dk4error_set_elsize_nelem(erp, DK4_E_SYNTAX, 4, rd); - } - if (0 != back) { rd++; } - } - if (used < szdstb) { - dstb[used] = '\0'; - } else { - dstb[szdstb - 1] = '\0'; - back = 0; - dk4error_set_simple_error_code(erp, DK4_E_BUFFER_TOO_SMALL); - } - } else { - dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); - } - return back; -} - - |