Показать сообщение отдельно

  #321  
Старый 22.09.2007, 23:42
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Цитата:
значит можно сделать вывод, что в моей проге есть какие-то функции, которые требуют CRT, но если ее добавть размер охрененно возрастет. получается, надо обрезать эти функции. так?
Угу, если бы у всех CRT-символов были аналоги в API windows, то нафига бы она была нужна. Не надо проводить четкую аналогию между CRT и API, её нет. То, что у strlen() есть аналог lstrlen() в kernel32.dll считайте чистой случайностью.

Вообще посмотри экспорт ntdll - найдешь очень много ф-ий типа strstr().
Ну можно вручную переписать много чего.
Я конечно хотел понтануться и кинуть листинг на осенблере всех этих ф-ий, но потом подумал что заебался понтоваться. Я и так крутой ИМХО.
Код:
bool lstrncmp( char *s1, char *s2, size_t iMaxLen ) {
	for (size_t i = 0; i < iMaxLen; i++) {
		if (!s1[i] || !s2[i]) return true;
		if (s1[i] != s2[i]) return true;
	}
	return false;
}

void lmemset( void *dst, char v, size_t s ) {
	for (size_t i = 0; i < s; i++) {
		((char*)dst)[i] = v;
	}
}

void lmemcpy( void *dst, void *src, size_t s ) {
	for (size_t i = 0; i < s; i++) {
		((char*)dst)[i] = ((char*)src)[i];
	}
}

bool lmemcmp( void *p1, void *p2, size_t s ) {
	for (size_t i = 0; i < s; i++) {
		if (((char*)p1)[i] != ((char*)p2)[i]) return true;
	}
	return false;
}

void *lmalloc( size_t s ) {
	return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, s );
}

void lfree( void *p ) {
	HeapFree( GetProcessHeap(), 0, p );
}

void* __cdecl operator new( size_t s ) {
	return lmalloc( s );
}

void __cdecl operator delete( void *p ) {
	lfree( p );
}

Последний раз редактировалось KEZ; 22.09.2007 в 23:52..
 
Ответить с цитированием