示例#1
0
int main(void){
    size_t length;

    plan(7);

    ok(SUCCEEDED(StringCbLengthA("", 1, &length)),
            "Calculate length of empty string.");
    is_int(0, length,
            "Value for length of empty string.");

    ok(SUCCEEDED(StringCbLengthA("test", 5, &length)),
            "Calculate length of short string.");
    is_int(4, length,
            "Value for length of short string.");
    
    ok(SUCCEEDED(StringCbLengthA("test\0test", 10, &length)),
            "Calculate length of string with embedded null character.");
    is_int(4, length,
            "Value for length of string with embedded null character.");
    
    ok(StringCbLengthA("too long", 8, &length) ==
            STRSAFE_E_INVALID_PARAMETER,
            "Make sure error is thrown if null termination is not found.");

    return 0;
}
示例#2
0
LPSTR WINAPI StringDupA(_In_ HANDLE hHeap, _In_ LPCSTR lpszString)
{
	LPSTR lpszCopy;
	size_t cbCopy;
	HRESULT hr;

	if (!lpszString)
		return NULL;

	hr = StringCbLengthA(lpszString, (STRSAFE_MAX_CCH-1) * sizeof(CHAR), &cbCopy);
	if (FAILED(hr))
		return NULL;

	if ((cbCopy + sizeof(CHAR)) <= cbCopy)
		return NULL;

	cbCopy += sizeof(CHAR);
	lpszCopy = (LPSTR) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, cbCopy);
	if (!lpszCopy)
		return NULL;

	hr = StringCbCopyNA(lpszCopy, cbCopy, lpszString, cbCopy);
	if (FAILED(hr)) {
		HeapSafeFree(hHeap, 0, lpszCopy);
		return NULL;
	}

	return lpszCopy;
}
示例#3
0
/*****************************************************************************
DWORD WriteSfvHeader(CONST HANDLE hFile)
hFile		: (IN) handle to an open file

Return Value:
- returns NOERROR or GetLastError()
*****************************************************************************/
DWORD WriteSfvHeader(CONST HANDLE hFile)
{
    TCHAR szLine[MAX_LINE_LENGTH];
#ifdef UNICODE
    CHAR szLineAnsi[MAX_LINE_LENGTH];
#endif
    DWORD dwNumberOfBytesWritten;
    size_t stStringLength;
    VOID *szOutLine=szLine;

    StringCbPrintf(szLine, MAX_LINE_LENGTH, TEXT("; Generated by WIN-SFV32 v1 (compatible; RapidCRC http://rapidcrc.sourceforge.net unicode-file mod by OV2)%s;%s"),
                   g_program_options.bCreateUnixStyle ? TEXT("\n") : TEXT("\r\n"), g_program_options.bCreateUnixStyle ? TEXT("\n") : TEXT("\r\n"));

    StringCbLength(szLine, MAX_LINE_LENGTH, & stStringLength);

#ifdef UNICODE
    if(!g_program_options.bCreateUnicodeFiles || g_program_options.iUnicodeSaveType == UTF_8 || g_program_options.iUnicodeSaveType==UTF_8_BOM) {
        if(!WideCharToMultiByte(CP_ACP, 0, szLine, -1, szLineAnsi, MAX_UTF8_PATH, NULL, NULL) )
            return GetLastError();

        StringCbLengthA(szLineAnsi, MAX_LINE_LENGTH, & stStringLength);
        szOutLine=szLineAnsi;
    }
#endif

    if(!WriteFile(hFile, szOutLine, (DWORD)stStringLength, & dwNumberOfBytesWritten, NULL) )
        return GetLastError();

    return NOERROR;
}
示例#4
0
/*---------------------------------------------------------------------------------------------*/
static HRESULT _get_value_length(unsigned int value_type, const void* value, size_t* length)
{
	HRESULT hr;
	size_t l;

	switch (value_type)
	{
	case AXV_INT8: case AXV_UINT8: *length = 1; return S_OK;
	case AXV_INT16: case AXV_UINT16: *length = 2; return S_OK;
	case AXV_INT32: case AXV_UINT32: *length = 4; return S_OK;
	case AXV_INT64: case AXV_UINT64: *length = 8; return S_OK;
	case AXV_FLOAT32: *length = 4; return S_OK;
	case AXV_FLOAT64: *length = 8; return S_OK;
	case AXV_STR_ACP: case AXV_STR_UTF8:
	{
		hr = StringCbLengthA((const char*)value, AXTRACE_MAX_VALUE_LENGTH - 1, &l);
		if (FAILED(hr)) return hr;
		*length = l + 1;
		return S_OK;
	}
	case AXV_STR_UTF16:
	{
		hr = StringCbLengthW((const wchar_t*)value, AXTRACE_MAX_VALUE_LENGTH - 1, &l);
		if (FAILED(hr)) return hr;
		*length = l + 2;
		return S_OK;
	}
	default: break;
	}
	return E_FAIL;
}
示例#5
0
BOOL CDbgHook::InitHook(PVOID pfnAddr, LPCSTR Name)
{
	BYTE OrgByte;
	BYTE Int3 = 0xCC;
	CHAR* buf;
	size_t len;

	StringCbLengthA(Name, MAX_PATH, &len);

	buf = new CHAR[len+1];

	StringCbCopyA(buf, len+1, Name);

	if (!ReadProcessMemory(m_cpdi.hProcess,
		pfnAddr, &OrgByte, sizeof(BYTE), NULL))
	{
		return FALSE;
	}

	if (!WriteProcessMemory(m_cpdi.hProcess, pfnAddr,
		(LPCVOID)&Int3, sizeof(BYTE), NULL))
	{
		return FALSE;
	}

	OrgBytes.insert(hsOrgOpcode::value_type(pfnAddr, OrgByte));
	Funcs.insert(hsFuncName::value_type(pfnAddr, buf));

	return TRUE;
}
示例#6
0
/*****************************************************************************
DWORD WriteHashLine(CONST HANDLE hFile, CONST TCHAR szFilename[MAX_PATH_EX], CONST TCHAR szHashResult[RESULT_AS_STRING_MAX_LENGTH], BOOL bIsSfv)
	hFile		    : (IN) handle to an open file
	szFilename	    : (IN) string of the filename that we want to write into the hash file
	szHashResult	: (IN) string of the hash result
    bIsSfv          : (IN) is this a sfv hash

Return Value:
- returns NOERROR or GetLastError()
*****************************************************************************/
DWORD WriteHashLine(CONST HANDLE hFile, CONST TCHAR szFilename[MAX_PATH_EX], CONST TCHAR szHashResult[RESULT_AS_STRING_MAX_LENGTH], BOOL bIsSfv)
{
	TCHAR szFilenameTemp[MAX_PATH_EX];
	TCHAR szLine[MAX_LINE_LENGTH];
#ifdef UNICODE
	CHAR szLineAnsi[MAX_LINE_LENGTH];
#endif
	DWORD dwNumberOfBytesWritten;
	size_t stStringLength;
	VOID *szOutLine=szLine;

    if(!RegularFromLongFilename(szFilenameTemp, szFilename)) {
	    if(g_program_options.bCreateUnixStyle)
		    ReplaceChar(szFilenameTemp, MAX_PATH_EX, TEXT('\\'), TEXT('/'));
    }

    if(bIsSfv)
        StringCchPrintf(szLine, MAX_LINE_LENGTH, TEXT("%s %s%s"), szFilenameTemp,
		    szHashResult, g_program_options.bCreateUnixStyle ? TEXT("\n") : TEXT("\r\n"));
    else
        StringCchPrintf(szLine, MAX_LINE_LENGTH, TEXT("%s *%s%s"), szHashResult,
		    szFilenameTemp, g_program_options.bCreateUnixStyle ? TEXT("\n") : TEXT("\r\n"));

	StringCbLength(szLine, MAX_LINE_LENGTH, & stStringLength);

#ifdef UNICODE
    // we only need the conversion if we don't write unicode data
	if(!g_program_options.bCreateUnicodeFiles) {
		if(!WideCharToMultiByte(CP_ACP, 0, szLine, -1, szLineAnsi, MAX_UTF8_PATH, NULL, NULL) )
			return GetLastError();

		StringCbLengthA(szLineAnsi, MAX_LINE_LENGTH, & stStringLength);
		szOutLine=szLineAnsi;
    } else if(g_program_options.iUnicodeSaveType == UTF_8 || g_program_options.iUnicodeSaveType==UTF_8_BOM) {
		if(!WideCharToMultiByte(CP_UTF8, 0, szLine, -1, szLineAnsi, MAX_UTF8_PATH, NULL, NULL) )
			return GetLastError();

		StringCbLengthA(szLineAnsi, MAX_LINE_LENGTH, & stStringLength);
		szOutLine=szLineAnsi;
	}
#endif

	if(!WriteFile(hFile, szOutLine, (DWORD)stStringLength, & dwNumberOfBytesWritten, NULL) )
		return GetLastError();

	return NOERROR;
}
示例#7
0
文件: perfstat.c 项目: aosm/Kerberos
KHMEXP void
perf_set_thread_desc(const char * file, int line,
                     const wchar_t * name, const wchar_t * creator) {
    thread_info * t;
    char * fn_copy;

    perf_once();

    t = malloc(sizeof(*t));
    ZeroMemory(t, sizeof(*t));

#ifdef _WIN32
    t->thread = GetCurrentThreadId();
#else
#error Unsupported platform
#endif

    StringCbCopy(t->name, sizeof(t->name), name);
    if (creator)
        StringCbCopy(t->creator, sizeof(t->creator), creator);

    if (file[0] == '.' && file[1] == '\\')
        file += 2;

    EnterCriticalSection(&cs_alloc);

    fn_copy = hash_lookup(&fn_hash, file);
    if (fn_copy == NULL) {
        size_t cblen = 0;
        if (FAILED(StringCbLengthA(file, MAX_PATH * sizeof(char),
                                   &cblen)))
            fn_copy = NULL;
        else {
            fn_copy = malloc(cblen + sizeof(char));
            if (fn_copy) {
                hash_bin * b;
                int hv;

                StringCbCopyA(fn_copy, cblen + sizeof(char), file);

                hv = fn_hash.hash(fn_copy) % fn_hash.n;

                b = malloc(sizeof(*b));
                b->data = fn_copy;
                b->key = fn_copy;
                LINIT(b);
                LPUSH(&fn_hash.bins[hv], b);
            }
        }
    }

    t->file = fn_copy;
    t->line = line;

    LPUSH(&threads, t);
    LeaveCriticalSection(&cs_alloc);
}
示例#8
0
/*---------------------------------------------------------------------------------------------*/
void axvalue(unsigned int value_type, const char* value_name, const void* value)
{
	axtrace_contex_s* ctx;
	HRESULT hr;
	size_t value_name_length;
	size_t value_length;
	int send_len;
	size_t final_length;

	/* buf for send , call send() once*/
	char buf[sizeof(axtrace_value_s) + AXTRACE_MAX_VALUENAME_LENGTH + AXTRACE_MAX_VALUE_LENGTH] = { 0 };
	axtrace_value_s* trace_head = (axtrace_value_s*)(buf);
	char* value_name_buf = (char*)(buf + sizeof(axtrace_value_s));

	/* is init ok? */
	ctx = _axtrace_get_thread_contex(0, 0);
	if (ctx == 0) return;

	/** get value name length*/
	if (value_name == 0) return;
	hr = StringCbLengthA(value_name, AXTRACE_MAX_VALUENAME_LENGTH - 1, &value_name_length);
	if (FAILED(hr)) return;
	/* add '\0' ended */
	value_name_length += 1;
	if (value_name_length <= 0 || value_name_length >= AXTRACE_MAX_VALUENAME_LENGTH) return;

	if (value == 0) return;
	hr = _get_value_length(value_type, value, &value_length);
	if (FAILED(hr)) return;
	if (value_length <= 0 || value_length >= AXTRACE_MAX_VALUE_LENGTH) return;

	/*calc final length */
	final_length = sizeof(axtrace_value_s) + value_name_length + value_length;

	trace_head->head.length = (unsigned short)(final_length);
	trace_head->head.flag = 'A';
	trace_head->head.type = AXTRACE_CMD_TYPE_VALUE;
	trace_head->head.pid = GetCurrentProcessId();
	trace_head->head.tid = GetCurrentThreadId();

	trace_head->value_type = value_type;
	trace_head->name_len = (unsigned short)value_name_length;
	trace_head->value_len = (unsigned short)value_length;

	/* fill the value data */
	memcpy(value_name_buf, value_name, value_name_length);
	memcpy(value_name_buf + value_name_length, value, value_length);

	/* send to axtrace server*/
	send_len = send(ctx->sfd, buf, (int)final_length, MSG_DONTROUTE);

	/*TODO: check result, may be reconnect to server */
	return;

}
示例#9
0
void
HttpRequest::FetchGravatarForEmail()
{
    unsigned char ehash[MD5LEN];

    {
        char email[1024];
        DWORD d;
        size_t len;

        if (WideCharToMultiByte(CP_UTF8, 0, m_target.c_str(), -1,
                                email, sizeof(email), NULL, NULL) == 0) {
            ReportStatus(KHERR_ERROR,
                         L"Can't convert email address to UTF-8",
                         L"%s", GetLastErrorString().c_str());
            return;
        }

        _strlwr_s(email, sizeof(email));

        if (FAILED(StringCbLengthA(email, sizeof(email), &len))) {
            ReportStatus(KHERR_ERROR,
                         L"UTF-8 email address too long",
                         L"The email address can't be longer than 1024 characters");
            return;
        }

        d = sizeof(ehash);
        if (KHM_FAILED(hash_data((BYTE *) email, (DWORD)len, CALG_MD5, (BYTE *) ehash, &d))) {
            ReportStatus(KHERR_ERROR, L"Failed to hash email address", NULL);
            return;
        }
    }

    {
        wchar_t resource[60];
        wchar_t * tail;
        size_t len;
        int i;
        static const wchar_t hexdigits[] = L"0123456789abcdef";

        StringCbCopyEx(resource, sizeof(resource), L"/avatar/", &tail, &len, STRSAFE_NO_TRUNCATION);

        for (i = 0; i < sizeof(ehash); i++) {
            *tail++ = hexdigits[ehash[i] >> 4];
            *tail++ = hexdigits[ehash[i] & 0xf];
            len -= sizeof(wchar_t) * 2;
        }
        *tail++ = L'\0';

        StringCbCat(resource, sizeof(resource), L".jpg?d=404&s=128");

        FetchResource(L"www.gravatar.com", resource, jpg_mimetypes);
    }
}
示例#10
0
/*****************************************************************************
DWORD WriteSfvHeader(CONST HANDLE hFile)
hFile		: (IN) handle to an open file

Return Value:
- returns NOERROR or GetLastError()
*****************************************************************************/
DWORD WriteFileComment(CONST HANDLE hFile, CONST FILEINFO *pFileInfo, UINT startChar)
{
    TCHAR szLine[MAX_LINE_LENGTH];
#ifdef UNICODE
    CHAR szLineAnsi[MAX_LINE_LENGTH];
#endif
    DWORD dwNumberOfBytesWritten;
    size_t stStringLength;
    VOID *szOutLine=szLine;

    SYSTEMTIME st;
    FILETIME ft;
    TCHAR szTimeStamp[50];

    FileTimeToLocalFileTime( &pFileInfo->ftModificationTime, &ft );
    FileTimeToSystemTime( &ft, &st );
    int chars = GetTimeFormat( LOCALE_USER_DEFAULT, 0, &st, TEXT("HH':'mm'.'ss"), szTimeStamp, 50 );
    GetDateFormat( LOCALE_USER_DEFAULT, 0, &st, TEXT("' 'yyyy'-'MM'-'dd"), szTimeStamp + chars - 1, 50 - chars );
    StringCbPrintf(szLine, MAX_LINE_LENGTH, TEXT(";%13I64d  %s %s%s"), pFileInfo->qwFilesize, szTimeStamp, pFileInfo->szFilename.GetString() + startChar,
                   g_program_options.bCreateUnixStyle ? TEXT("\n") : TEXT("\r\n"));
    StringCbLength(szLine, MAX_LINE_LENGTH, & stStringLength);


#ifdef UNICODE
    if(!g_program_options.bCreateUnicodeFiles) {
        if(!WideCharToMultiByte(CP_ACP, 0, szLine, -1, szLineAnsi, MAX_UTF8_PATH, NULL, NULL) )
            return GetLastError();
        StringCbLengthA(szLineAnsi, MAX_LINE_LENGTH, & stStringLength);
        szOutLine=szLineAnsi;
    } else if(g_program_options.iUnicodeSaveType == UTF_8 || g_program_options.iUnicodeSaveType==UTF_8_BOM) {
        if(!WideCharToMultiByte(CP_UTF8, 0, szLine, -1, szLineAnsi, MAX_UTF8_PATH, NULL, NULL) )
            return GetLastError();
        StringCbLengthA(szLineAnsi, MAX_LINE_LENGTH, & stStringLength);
        szOutLine=szLineAnsi;
    }
#endif

    if(!WriteFile(hFile, szOutLine, (DWORD)stStringLength, & dwNumberOfBytesWritten, NULL) )
        return GetLastError();

    return NOERROR;
}
示例#11
0
/*---------------------------------------------------------------------------------------------*/
void ax2d_actor(const char* scene_name, __int64 actor_id, double x, double y, double dir, unsigned int actor_style)
{
	axtrace_contex_s* ctx;
	HRESULT hr;
	size_t scene_name_size, final_length;
	int send_len;

	/* buf for send , call send() once*/
	char buf[sizeof(axtrace_2d_actor_s) + AXTRACE_MAX_SCENE_NAME_LENGTH] = { 0 };
	axtrace_2d_actor_s* trace_head = (axtrace_2d_actor_s*)(buf);
	char* _name = (char*)(buf + sizeof(axtrace_2d_actor_s));

	/* is init ok? */
	ctx = _axtrace_get_thread_contex(0, 0);
	if (ctx == 0) return;

	/* copy scene name */
	hr = StringCbCopyA(_name, AXTRACE_MAX_SCENE_NAME_LENGTH, scene_name);
	/* failed ?*/
	if (FAILED(hr)) return;

	/** get string length*/
	hr = StringCbLengthA(_name, AXTRACE_MAX_SCENE_NAME_LENGTH - 1, &scene_name_size);
	/* failed ?*/
	if (FAILED(hr)) return;
	if (scene_name_size <= 0 || scene_name_size >= AXTRACE_MAX_SCENE_NAME_LENGTH) return;

	/* add '\0' ended */
	scene_name_size += 1;

	final_length = sizeof(axtrace_2d_actor_s) + scene_name_size;

	trace_head->head.length = (unsigned short)(final_length);
	trace_head->head.flag = 'A';
	trace_head->head.type = AXTRACE_CMD_TYPE_2D_ACTOR;
	trace_head->head.pid = GetCurrentProcessId();
	trace_head->head.tid = GetCurrentThreadId();

	trace_head->actor_id = actor_id;
	trace_head->x = x;
	trace_head->y = y;
	trace_head->dir = dir;
	trace_head->style = actor_style;
	trace_head->name_len = (unsigned short)scene_name_size;

	/* send to axtrace server*/
	send_len = send(ctx->sfd, buf, (int)final_length, MSG_DONTROUTE);

	/*TODO: check result, may be reconnect to server */
	return;
}
示例#12
0
/*---------------------------------------------------------------------------------------------*/
void axlog(unsigned int log_type, const char *format, ...)
{
	axtrace_contex_s* ctx;
	va_list ptr = 0;
	HRESULT hr;
	size_t contents_byte_size, final_length;
	int send_len;

	/* buf for send , call send() once*/
	char buf[sizeof(axtrace_log_s) + AXTRACE_MAX_TRACE_STRING_LENGTH] = { 0 };
	axtrace_log_s* trace_head = (axtrace_log_s*)(buf);
	char* trace_string = (char*)(buf + sizeof(axtrace_log_s));

	/* is init ok? */
	ctx = _axtrace_get_thread_contex(0, 0);
	if (ctx == 0) return;

	/* Create String Contents*/
	va_start(ptr, format);
	hr = StringCbVPrintfA(trace_string, AXTRACE_MAX_TRACE_STRING_LENGTH, format, ptr);
	va_end(ptr);
	/* failed ?*/
	if (FAILED(hr)) return;

	/** get string length*/
	hr = StringCbLengthA(trace_string, AXTRACE_MAX_TRACE_STRING_LENGTH - 1, &contents_byte_size);
	/* failed ?*/
	if (FAILED(hr)) return;

	/* add '\0' ended */
	contents_byte_size += 1;	

	/* fill the trace head data */
	final_length = sizeof(axtrace_log_s)+contents_byte_size;

	trace_head->head.length = (unsigned short)(final_length);
	trace_head->head.flag = 'A';
	trace_head->head.type = AXTRACE_CMD_TYPE_LOG;
	trace_head->head.pid = GetCurrentProcessId();
	trace_head->head.tid = GetCurrentThreadId();

	trace_head->log_type = log_type;
	trace_head->code_page = ATC_ACP;
	trace_head->length = (unsigned short)contents_byte_size;

	/* send to axtrace server*/
	send_len = send(ctx->sfd, buf, (int)final_length, MSG_DONTROUTE);

	/*TODO: check result, may be reconnect to server */
	return;
}
示例#13
0
文件: perfstat.c 项目: aosm/Kerberos
KHMEXP char *
perf_strdup(const char * file, int line, const char * str) {
    size_t cb;
    char * dest;

    if (FAILED(StringCbLengthA(str, MAXCB_STR, &cb)))
        return NULL;
    cb += sizeof(char);

    dest = (char *) perf_malloc(file, line, cb);
    StringCbCopyA(dest, cb, str);

    return dest;
}
示例#14
0
/* functions for handling the configuration file */
BOOL parseConfFile(user_input_data *user_dat)
{
    cfg_opt_t email_opts[] = {
        CFG_STR("From", NULL, CFGF_NONE),
        CFG_STR("To", NULL, CFGF_NONE),
        CFG_STR("Cc", NULL, CFGF_NONE),
        CFG_STR("Subject", NULL, CFGF_NONE),
        CFG_STR("Body", NULL, CFGF_NONE),
        CFG_STR("Password", NULL, CFGF_NONE),
        CFG_STR("SMTP_server", NULL, CFGF_NONE),
        CFG_INT("Port_number", 0, CFGF_NONE),
        CFG_END()
    };

    cfg_t *U2MConf;
    U2MConf = cfg_init(email_opts, CFGF_NONE);
    int cfg_err = cfg_parse(U2MConf, cfg_filename);

    if (cfg_err) {
#if 0
        if (cfg_err == CFG_PARSE_ERROR)
            fprintf(stderr, "Error at parsing %s\n", cfg_filename);
        else
            fprintf(stderr, "Couldn't find configuration file with filename %s\n", cfg_filename);
#endif
        cfg_free(U2MConf);
        return FALSE;
    }

    char *temp[7] = {
        cfg_getstr(U2MConf, "From"),
        cfg_getstr(U2MConf, "To"),
        cfg_getstr(U2MConf, "Cc"),
        cfg_getstr(U2MConf, "Subject"),
        cfg_getstr(U2MConf, "Body"),
        cfg_getstr(U2MConf, "Password"),
        cfg_getstr(U2MConf, "SMTP_server")
    };

    if (temp[0]) {
        size_t len;
        if (SUCCEEDED(StringCbLengthA(temp[0], MAX_BUFFER, &len))) {
            if (user_dat->FROM) HeapFree(GetProcessHeap(), 0, user_dat->FROM);
            user_dat->FROM = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, sizeof(temp[0])*(len + 1));
            if (user_dat->FROM) StringCchCopyA(user_dat->FROM, MAX_BUFFER, temp[0]);
            else __MsgBoxGetLastError(NULL, TEXT("HeapAlloc()"), __LINE__);
        }
    }
    if (temp[1]) {
        size_t len;
        if (SUCCEEDED(StringCbLengthA(temp[1], MAX_BUFFER, &len))) {
            if (user_dat->TO) HeapFree(GetProcessHeap(), 0, user_dat->TO);
            user_dat->TO = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, sizeof(temp[1])*(len + 1));
            if (user_dat->TO) StringCchCopyA(user_dat->TO, MAX_BUFFER, temp[1]);
            else __MsgBoxGetLastError(NULL, TEXT("HeapAlloc()"), __LINE__);
        }
    }
    if (temp[2]) {
        size_t len;
        if (SUCCEEDED(StringCbLengthA(temp[2], MAX_BUFFER, &len))) {
            if (user_dat->CC) HeapFree(GetProcessHeap(), 0, user_dat->CC);
            user_dat->CC = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, sizeof(temp[2])*(len + 1));
            if (user_dat->CC) StringCchCopyA(user_dat->CC, MAX_BUFFER, temp[2]);
            else __MsgBoxGetLastError(NULL, TEXT("HeapAlloc()"), __LINE__);
        }
    }
    if (temp[3]) {
        size_t len;
        if (SUCCEEDED(StringCbLengthA(temp[3], MAX_BUFFER, &len))) {
            if (user_dat->SUBJECT) HeapFree(GetProcessHeap(), 0, user_dat->SUBJECT);
            user_dat->SUBJECT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, sizeof(temp[3])*(len + 1));
            if (user_dat->SUBJECT) StringCchCopyA(user_dat->SUBJECT, MAX_BUFFER, temp[3]);
            else __MsgBoxGetLastError(NULL, TEXT("HeapAlloc()"), __LINE__);
        }
    }
    if (temp[4]) {
        size_t len;
        if (SUCCEEDED(StringCbLengthA(temp[4], MAX_BUFFER, &len))) {
            if (user_dat->BODY) HeapFree(GetProcessHeap(), 0, user_dat->BODY);
            user_dat->BODY = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, sizeof(temp[4])*(len + 1));
            if (user_dat->BODY) StringCchCopyA(user_dat->BODY, MAX_BUFFER, temp[4]);
            else __MsgBoxGetLastError(NULL, TEXT("HeapAlloc()"), __LINE__);
        }
    }
    if (temp[5]) {
        size_t len;
        if (SUCCEEDED(StringCbLengthA(temp[5], MAX_BUFFER, &len))) {
            if (user_dat->pass) HeapFree(GetProcessHeap(), 0, user_dat->pass);
            user_dat->pass = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, sizeof(temp[5])*(len + 1));
            if (user_dat->pass) StringCchCopyA(user_dat->pass, MAX_BUFFER, temp[5]);
            else __MsgBoxGetLastError(NULL, TEXT("HeapAlloc()"), __LINE__);
        }
    }
    if (temp[6]) {
        size_t len;
        if (SUCCEEDED(StringCbLengthA(temp[6], MAX_BUFFER, &len))) {
            if (user_dat->SMTP_SERVER) HeapFree(GetProcessHeap(), 0, user_dat->SMTP_SERVER);
            user_dat->SMTP_SERVER = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, sizeof(temp[6])*(len + 1));
            if (user_dat->SMTP_SERVER) StringCchCopyA(user_dat->SMTP_SERVER, MAX_BUFFER, temp[6]);
            else __MsgBoxGetLastError(NULL, TEXT("HeapAlloc()"), __LINE__);
        }
    }

    int signed_port = cfg_getint(U2MConf, "Port_number");
    user_dat->PORT = (UINT)signed_port;

    cfg_free(U2MConf);

#ifdef DEBUG
    printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%u\n", user_dat->FROM, user_dat->TO, user_dat->CC,
           user_dat->SUBJECT, user_dat->BODY, user_dat->pass, user_dat->SMTP_SERVER, user_dat->PORT);
#endif
    return TRUE;
}
示例#15
0
文件: perfstat.c 项目: aosm/Kerberos
KHMEXP void * 
perf_malloc(const char * file, int line, size_t s) {
    allocation * a;
    void * ptr;
    size_t h;
    char * fn_copy = NULL;

    perf_once();

    assert(s > 0);

    EnterCriticalSection(&cs_alloc);
    a = get_allocation();

    ptr = malloc(s);

    assert(ptr);                /* TODO: handle this gracefully */

    if (file[0] == '.' && file[1] == '\\')
        file += 2;

    fn_copy = hash_lookup(&fn_hash, file);
    if (fn_copy == NULL) {

        size_t cblen = 0;
        if (FAILED(StringCbLengthA(file, MAX_PATH * sizeof(char),
                                   &cblen)))
            fn_copy = NULL;
        else {
            fn_copy = malloc(cblen + sizeof(char));
            if (fn_copy) {
                hash_bin * b;
                int hv;

                StringCbCopyA(fn_copy, cblen + sizeof(char), file);

                hv = fn_hash.hash(fn_copy) % fn_hash.n;

                b = malloc(sizeof(*b));
                b->data = fn_copy;
                b->key = fn_copy;
                LINIT(b);
                LPUSH(&fn_hash.bins[hv], b);
            }
        }
    }

    a->file = fn_copy;
    a->line = line;
    a->size = s;
    a->ptr = ptr;
#ifdef _WIN32
    a->thread = GetCurrentThreadId();
#endif

    h = HASHPTR(ptr);

    LPUSH(&ht[h], a);
    LeaveCriticalSection(&cs_alloc);

    return ptr;
}
示例#16
0
bool CPlaylist::Save()
{
    DWORD        dwToWrite, dwWritten;
    DWORD        dwASXDataLen = 0;
    DWORD        dwFileAttrib;
    char       * pszASXData   = NULL;
    playlist_t * pTrack;
    char         szFilename[MAX_PATH];
    HANDLE       hFile;
    BOOL         bWrite;
    bool         bResult      = true;

    // Don't save a playlist that wasn't created by the player
    if (false == m_bCEPlaylist || true == m_bTransient)
    {
        return true;
    }

    if (m_bHidden)
    {
        dwFileAttrib = FILE_ATTRIBUTE_HIDDEN;
    }
    else
    {
        dwFileAttrib = FILE_ATTRIBUTE_NORMAL;
    }

    hFile = CreateFile(m_pszPath, GENERIC_WRITE, 0, NULL,
                       CREATE_ALWAYS, dwFileAttrib, NULL);

    if (INVALID_HANDLE_VALUE != hFile)
    {
        bWrite = FALSE;

        // write out the header
        dwASXDataLen = sizeof (c_szASXHeaderFormat) + 10;

        if (pszASXData = new char[dwASXDataLen])
        {
            pszASXData[0] = '\0';

            if(SUCCEEDED(StringCbPrintfA(pszASXData, dwASXDataLen, c_szASXHeaderFormat, m_iCurrentTrack)))
            {                
                if(SUCCEEDED(StringCbLengthA(pszASXData, dwASXDataLen, (size_t*)&dwToWrite)))
                {
                    dwWritten = 0;
                    bWrite = WriteFile(hFile, pszASXData, dwToWrite, &dwWritten, NULL);
                }
                else
                {
                    bWrite = FALSE;
                }
            }
            else
            {
                bWrite = FALSE;
            }
        }

        if (FALSE == bWrite || dwToWrite != dwWritten)
        {
            bResult = false;
        }
    }
    else
    {
        bResult = false;
    }

    pTrack = m_pList;

    while (NULL != pTrack && bResult)
    {
        LPCTSTR pszPath = pTrack->pClip->GetPath();

        szFilename[0] = '\0';

        if (NETWORK != pTrack->pClip->GetLocation())
        {
#ifdef _UNICODE
            _snprintf(szFilename, MAX_PATH-1, "file://%ls", pszPath);
#else
            _snprintf(szFilename, MAX_PATH-1, "file://%s", pszPath);
#endif /* _UNICODE */

            szFilename[MAX_PATH-1] = '\0';
        }
        else
        {
#ifdef _UNICODE
            WideCharToMultiByte(CP_ACP, 0, pszPath, -1, szFilename, MAX_PATH, NULL, NULL);
#else
            strncpy(szFilename, pszPath, MAX_PATH);
            pszPath[MAX_PATH-1] = '\0';
#endif /* _UNICODE */
        }

        dwToWrite = sizeof (c_szASXEntryFormat) + strlen(szFilename);

        if (dwASXDataLen < dwToWrite)
        {
            delete [] pszASXData;

            pszASXData  = new char [dwToWrite];
            dwASXDataLen = dwToWrite;
        }
        if((NULL != pszASXData) && (SUCCEEDED(StringCbPrintfA(pszASXData, dwToWrite, c_szASXEntryFormat, szFilename))))
        {            
            if(SUCCEEDED(StringCbLengthA(pszASXData, dwASXDataLen, (size_t*)&dwToWrite)))
            {
                dwWritten = 0;
                bWrite = WriteFile(hFile, pszASXData, dwToWrite, &dwWritten, NULL);
            }
            else
            {
                bWrite = FALSE;
            }
        }
        else
        {
            bWrite = FALSE;
        }

        if (FALSE == bWrite || dwToWrite != dwWritten)
        {
            bResult = false;
        }

        pTrack = pTrack->pNext;
    }


    if (INVALID_HANDLE_VALUE != hFile && NULL != pszASXData)
    {
        // write out the footer
        size_t ASXFooterFormatLen = sizeof (c_szASXFooterFormat);
        if (dwASXDataLen < ASXFooterFormatLen)
        {
            delete [] pszASXData;

            pszASXData = new char [ASXFooterFormatLen];
        }
        if((NULL != pszASXData) && (SUCCEEDED(StringCbCopyA(pszASXData, ASXFooterFormatLen, c_szASXFooterFormat))))
        {            
            if(SUCCEEDED(StringCbLengthA(pszASXData, ASXFooterFormatLen, (size_t*)&dwToWrite)))
            {
                dwWritten = 0;
                bWrite = WriteFile(hFile, pszASXData, dwToWrite, &dwWritten, NULL);
            }
            else
            {
                bWrite = FALSE;
            }
        }
        else
        {
            bWrite = FALSE;
        }

        if (FALSE == bWrite || dwToWrite != dwWritten)
        {
            bResult = false;
        }

        CloseHandle(hFile);
    }
    else if (INVALID_HANDLE_VALUE != hFile)
    {
        CloseHandle(hFile);
    }

    delete [] pszASXData;

    return bResult;
}
示例#17
0
/*---------------------------------------------------------------------------------------------*/
void ax2d_begin_scene(const char* scene_name, double left, double top, double right, double bottom, const char* scene_define)
{
	axtrace_contex_s* ctx;
	HRESULT hr;
	size_t scene_name_size, scene_define_size, final_length;
	int send_len;

	/* buf for send , call send() once*/
	char buf[sizeof(axtrace_2d_begin_scene_s) + AXTRACE_MAX_SCENE_NAME_LENGTH + AXTRACE_MAX_SCENE_DEFINE_LENGTH] = { 0 };
	axtrace_2d_begin_scene_s* trace_head = (axtrace_2d_begin_scene_s*)(buf);
	char* _name = (char*)(buf + sizeof(axtrace_2d_begin_scene_s));

	/* is init ok? */
	ctx = _axtrace_get_thread_contex(0, 0);
	if (ctx == 0) return;

	/* copy scene name */
	hr = StringCbCopyA(_name, AXTRACE_MAX_SCENE_NAME_LENGTH, scene_name);
	/* failed ?*/
	if (FAILED(hr)) return;

	/** get string length*/
	hr = StringCbLengthA(_name, AXTRACE_MAX_SCENE_NAME_LENGTH - 1, &scene_name_size);
	/* failed ?*/
	if (FAILED(hr)) return;
	if (scene_name_size <= 0 || scene_name_size >= AXTRACE_MAX_SCENE_NAME_LENGTH) return;

	/* add '\0' ended */
	scene_name_size += 1;

	/* to scene define point */
	if (scene_define != 0) {
		_name = (char*)(buf + sizeof(axtrace_2d_begin_scene_s) + scene_name_size);

		/* copy scene define */
		hr = StringCbCopyA(_name, AXTRACE_MAX_SCENE_DEFINE_LENGTH, scene_define);
		/* failed ?*/
		if (FAILED(hr)) return;

		/** get string length*/
		hr = StringCbLengthA(_name, AXTRACE_MAX_SCENE_DEFINE_LENGTH - 1, &scene_define_size);
		/* failed ?*/
		if (FAILED(hr)) return;
		if (scene_define_size >= AXTRACE_MAX_SCENE_DEFINE_LENGTH) return;

		/* add '\0' ended */
		scene_define_size += 1;
	}
	else {
		scene_define_size = 0;
	}

	final_length = sizeof(axtrace_2d_begin_scene_s) + scene_name_size + scene_define_size;

	trace_head->head.length = (unsigned short)(final_length);
	trace_head->head.flag = 'A';
	trace_head->head.type = AXTRACE_CMD_TYPE_2D_BEGIN_SCENE;
	trace_head->head.pid = GetCurrentProcessId();
	trace_head->head.tid = GetCurrentThreadId();

	trace_head->left = left;
	trace_head->top = top;
	trace_head->right = right;
	trace_head->bottom = bottom;
	trace_head->name_len = (unsigned short)scene_name_size;
	trace_head->define_len = (unsigned short)scene_define_size;

	/* send to axtrace server*/
	send_len = send(ctx->sfd, buf, (int)final_length, MSG_DONTROUTE);

	/*TODO: check result, may be reconnect to server */
	return;
}