/********************************************************/ /* ntapi: Native API core library */ /* Copyright (C) 2013--2017 Z. Gilboa */ /* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */ /********************************************************/ #include #include #include "ntapi_impl.h" int32_t __stdcall __ntapi_tt_get_env_var_meta_utf8( __in char * env_var_name, __in char ** envp, __out nt_env_var_meta_utf8 * env_var_meta) { char ** penv; char * ch; /* lookup */ for (penv=envp; *penv; penv++) { for (ch=penv[0]; *ch && (*ch != '='); ) ch++; if (*ch != '=') return NT_STATUS_INVALID_USER_BUFFER; if ((ch > *penv) && !(__ntapi->tt_strncmp_multibyte( *penv, env_var_name, ch - *penv))) { /* match */ env_var_meta->name = *penv; env_var_meta->value = ++ch; env_var_meta->envp_index = penv - envp; env_var_meta->flags = 0; return NT_STATUS_SUCCESS; } } return NT_STATUS_NOT_FOUND; } int32_t __stdcall __ntapi_tt_get_env_var_meta_utf16( __in wchar16_t * env_var_name, __in wchar16_t ** envp, __out nt_env_var_meta_utf16 * env_var_meta) { wchar16_t ** penv; wchar16_t * wch; /* lookup */ for (penv=envp; *penv; penv++) { for (wch=penv[0]; *wch && (*wch != '='); ) wch++; if (*wch != '=') return NT_STATUS_INVALID_USER_BUFFER; if ((wch > *penv) && !(__ntapi->tt_strncmp_utf16( *penv, env_var_name, wch - *penv))) { /* match */ env_var_meta->name = *penv; env_var_meta->value = ++wch; env_var_meta->envp_index = penv - envp; env_var_meta->flags = 0; return NT_STATUS_SUCCESS; } } return NT_STATUS_NOT_FOUND; }