From 964eed7331c807e553ec42637151fda21b5495d9 Mon Sep 17 00:00:00 2001 From: midipix Date: Jun 28 2016 23:46:40 +0000 Subject: string functions: added __ntapi_tt_strncmp_multibyte(). --- diff --git a/include/ntapi/nt_string.h b/include/ntapi/nt_string.h index 241bb37..d5ad05d 100644 --- a/include/ntapi/nt_string.h +++ b/include/ntapi/nt_string.h @@ -51,6 +51,11 @@ typedef int __cdecl ntapi_tt_strcmp_utf16( __in const wchar16_t * a, __in const wchar16_t * b); +typedef int __cdecl ntapi_tt_strncmp_multibyte( + __in const char * a, + __in const char * b, + __in size_t n); + typedef void __cdecl ntapi_tt_init_unicode_string_from_utf16( __out nt_unicode_string * str_dest, __in wchar16_t * str_src); diff --git a/include/ntapi/ntapi.h b/include/ntapi/ntapi.h index 723ee9c..770b9d6 100644 --- a/include/ntapi/ntapi.h +++ b/include/ntapi/ntapi.h @@ -402,6 +402,7 @@ typedef struct _ntapi_vtbl { ntapi_tt_string_null_offset_ptrsize * tt_string_null_offset_ptrsize; ntapi_tt_strcmp_multibyte * tt_strcmp_multibyte; ntapi_tt_strcmp_utf16 * tt_strcmp_utf16; + ntapi_tt_strncmp_multibyte * tt_strncmp_multibyte; ntapi_tt_aligned_block_memset * tt_aligned_block_memset; ntapi_tt_aligned_block_memcpy * tt_aligned_block_memcpy; ntapi_tt_aligned_memcpy_utf16 * tt_aligned_memcpy_utf16; diff --git a/project/common.mk b/project/common.mk index 7e2b832..bbeb2fc 100644 --- a/project/common.mk +++ b/project/common.mk @@ -76,6 +76,7 @@ COMMON_SRCS = \ src/string/ntapi_tt_strcmp_multibyte.c \ src/string/ntapi_tt_strcmp_utf16.c \ src/string/ntapi_tt_string_null_offset.c \ + src/string/ntapi_tt_strncmp_multibyte.c \ src/string/ntapi_tt_uintptr_to_hex_utf16.c \ src/string/ntapi_tt_uintptr_to_hex_utf8.c \ src/sync/ntapi_tt_create_event.c \ diff --git a/src/internal/ntapi.c b/src/internal/ntapi.c index f053431..c71aeb5 100644 --- a/src/internal/ntapi.c +++ b/src/internal/ntapi.c @@ -169,6 +169,7 @@ static int32_t __fastcall __ntapi_init_once(ntapi_vtbl ** pvtbl) __ntapi->tt_string_null_offset_ptrsize = __ntapi_tt_string_null_offset_ptrsize; __ntapi->tt_strcmp_multibyte = __ntapi_tt_strcmp_multibyte; __ntapi->tt_strcmp_utf16 = __ntapi_tt_strcmp_utf16; + __ntapi->tt_strncmp_multibyte = __ntapi_tt_strncmp_multibyte; __ntapi->strlen = __ntapi_tt_string_null_offset_multibyte; __ntapi->wcslen = __ntapi_wcslen; __ntapi->tt_aligned_block_memset = __ntapi_tt_aligned_block_memset; diff --git a/src/internal/ntapi_fnapi.h b/src/internal/ntapi_fnapi.h index d752e70..684f12a 100644 --- a/src/internal/ntapi_fnapi.h +++ b/src/internal/ntapi_fnapi.h @@ -55,6 +55,7 @@ ntapi_tt_string_null_offset_qword __ntapi_tt_string_null_offset_qword; ntapi_tt_string_null_offset_ptrsize __ntapi_tt_string_null_offset_ptrsize; ntapi_tt_strcmp_multibyte __ntapi_tt_strcmp_multibyte; ntapi_tt_strcmp_utf16 __ntapi_tt_strcmp_utf16; +ntapi_tt_strncmp_multibyte __ntapi_tt_strncmp_multibyte; ntapi_wcslen __ntapi_wcslen; ntapi_tt_aligned_block_memset __ntapi_tt_aligned_block_memset; ntapi_tt_aligned_block_memcpy __ntapi_tt_aligned_block_memcpy; diff --git a/src/string/ntapi_tt_strncmp_multibyte.c b/src/string/ntapi_tt_strncmp_multibyte.c new file mode 100644 index 0000000..d66865d --- /dev/null +++ b/src/string/ntapi_tt_strncmp_multibyte.c @@ -0,0 +1,22 @@ +/********************************************************/ +/* ntapi: Native API core library */ +/* Copyright (C) 2013--2016 Z. Gilboa */ +/* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */ +/********************************************************/ + +#include +#include + +int __cdecl __ntapi_tt_strncmp_multibyte( + __in const char * a, + __in const char * b, + __in size_t n) +{ + if (n == 0) + return 0; + + for (--n; n && (*a == *b) && *a; a++, b++) + n--; + + return (int)*a - (int)*b; +}