/*****************************************************************************/ /* pemagination: a (virtual) tour into portable bits and executable bytes */ /* Copyright (C) 2013,2014,2015 Z. Gilboa */ /* Released under GPLv2 and GPLv3; see COPYING.PEMAGINE. */ /*****************************************************************************/ #include <psxtypes/psxtypes.h> #include <pemagine/pemagine.h> #include "pe_impl.h" int32_t pe_impl_strlen_ansi(const char * str) { const char * ch; const char * upper_bound; upper_bound = str + PE_STR_MAX_SYMBOL_LEN_ALLOWED; for (ch=str; *ch && ch<upper_bound; ) ch++; return (ch < upper_bound) ? ch - str : -1; } int32_t pe_impl_strlen_utf16(const wchar16_t * str) { const wchar16_t * wch; const wchar16_t * upper_bound; upper_bound = str + PE_STR_MAX_SYMBOL_LEN_ALLOWED; for (wch=str; *wch && wch<upper_bound; ) wch++; if (wch < upper_bound) return (wch - str) * sizeof(wchar16_t); else return -1; } wchar16_t pe_impl_utf16_char_to_lower(const wchar16_t c) { return ((c >= 'A') && (c <= 'Z')) ? c + 'a' - 'A' : c; }