Blame winpr/include/winpr/crt.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * WinPR: Windows Portable Runtime
Packit 1fb8d4
 * C Run-Time Library Routines
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef WINPR_CRT_H
Packit 1fb8d4
#define WINPR_CRT_H
Packit 1fb8d4
Packit 1fb8d4
#include <stdio.h>
Packit 1fb8d4
#include <stdlib.h>
Packit 1fb8d4
#include <string.h>
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/winpr.h>
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/spec.h>
Packit 1fb8d4
#include <winpr/string.h>
Packit 1fb8d4
#include <winpr/heap.h>
Packit 1fb8d4
Packit 1fb8d4
#ifndef _WIN32
Packit 1fb8d4
Packit 1fb8d4
#ifndef _strtoui64
Packit 1fb8d4
#define _strtoui64 strtoull
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef _strtoi64
Packit 1fb8d4
#define _strtoi64 strtoll
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef _rotl
Packit 1fb8d4
static INLINE UINT32 _rotl(UINT32 value, int shift)
Packit 1fb8d4
{
Packit 1fb8d4
	return (value << shift) | (value >> (32 - shift));
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef _rotl64
Packit 1fb8d4
static INLINE UINT64 _rotl64(UINT64 value, int shift)
Packit 1fb8d4
{
Packit 1fb8d4
	return (value << shift) | (value >> (64 - shift));
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef _rotr
Packit 1fb8d4
static INLINE UINT32 _rotr(UINT32 value, int shift)
Packit 1fb8d4
{
Packit 1fb8d4
	return (value >> shift) | (value << (32 - shift));
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifndef _rotr64
Packit 1fb8d4
static INLINE UINT64 _rotr64(UINT64 value, int shift)
Packit 1fb8d4
{
Packit 1fb8d4
	return (value >> shift) | (value << (64 - shift));
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2))
Packit 1fb8d4
Packit Service 5a9772
#define _byteswap_ulong(_val) __builtin_bswap32(_val)
Packit Service 5a9772
#define _byteswap_uint64(_val) __builtin_bswap64(_val)
Packit 1fb8d4
Packit 1fb8d4
#else
Packit 1fb8d4
Packit 1fb8d4
static INLINE UINT32 _byteswap_ulong(UINT32 _val)
Packit 1fb8d4
{
Packit Service 5a9772
	return (((_val) >> 24) | (((_val)&0x00FF0000) >> 8) | (((_val)&0x0000FF00) << 8) |
Packit 1fb8d4
	        ((_val) << 24));
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
static INLINE UINT64 _byteswap_uint64(UINT64 _val)
Packit 1fb8d4
{
Packit Service 5a9772
	return (((_val) << 56) | (((_val) << 40) & 0xFF000000000000) |
Packit Service 5a9772
	        (((_val) << 24) & 0xFF0000000000) | (((_val) << 8) & 0xFF00000000) |
Packit Service 5a9772
	        (((_val) >> 8) & 0xFF000000) | (((_val) >> 24) & 0xFF0000) | (((_val) >> 40) & 0xFF00) |
Packit Service 5a9772
	        ((_val) >> 56));
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8))
Packit 1fb8d4
Packit Service 5a9772
#define _byteswap_ushort(_val) __builtin_bswap16(_val)
Packit 1fb8d4
Packit 1fb8d4
#else
Packit 1fb8d4
Packit 1fb8d4
static INLINE UINT16 _byteswap_ushort(UINT16 _val)
Packit 1fb8d4
{
Packit 1fb8d4
	return (((_val) >> 8) | ((_val) << 8));
Packit 1fb8d4
}
Packit 1fb8d4
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit Service 5a9772
#define CopyMemory(Destination, Source, Length) memcpy((Destination), (Source), (Length))
Packit Service 5a9772
#define MoveMemory(Destination, Source, Length) memmove((Destination), (Source), (Length))
Packit Service 5a9772
#define FillMemory(Destination, Length, Fill) memset((Destination), (Fill), (Length))
Packit Service 5a9772
#define ZeroMemory(Destination, Length) memset((Destination), 0, (Length))
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit Service 5a9772
extern "C"
Packit Service 5a9772
{
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API PVOID SecureZeroMemory(PVOID ptr, SIZE_T cnt);
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/* Data Alignment */
Packit 1fb8d4
Packit 1fb8d4
#ifndef _ERRNO_T_DEFINED
Packit 1fb8d4
#define _ERRNO_T_DEFINED
Packit 1fb8d4
typedef int errno_t;
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit Service 5a9772
extern "C"
Packit Service 5a9772
{
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API void* _aligned_malloc(size_t size, size_t alignment);
Packit Service 5a9772
	WINPR_API void* _aligned_realloc(void* memblock, size_t size, size_t alignment);
Packit Service 5a9772
	WINPR_API void* _aligned_recalloc(void* memblock, size_t num, size_t size, size_t alignment);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API void* _aligned_offset_malloc(size_t size, size_t alignment, size_t offset);
Packit Service 5a9772
	WINPR_API void* _aligned_offset_realloc(void* memblock, size_t size, size_t alignment,
Packit Service 5a9772
	                                        size_t offset);
Packit Service 5a9772
	WINPR_API void* _aligned_offset_recalloc(void* memblock, size_t num, size_t size,
Packit Service 5a9772
	                                         size_t alignment, size_t offset);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API size_t _aligned_msize(void* memblock, size_t alignment, size_t offset);
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API void _aligned_free(void* memblock);
Packit 1fb8d4
Packit Service 5a9772
	/* Data Conversion */
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API errno_t _itoa_s(int value, char* buffer, size_t sizeInCharacters, int radix);
Packit 1fb8d4
Packit Service 5a9772
	/* Buffer Manipulation */
Packit 1fb8d4
Packit Service 5a9772
	WINPR_API errno_t memmove_s(void* dest, size_t numberOfElements, const void* src, size_t count);
Packit Service 5a9772
	WINPR_API errno_t wmemmove_s(WCHAR* dest, size_t numberOfElements, const WCHAR* src,
Packit Service 5a9772
	                             size_t count);
Packit 1fb8d4
Packit 1fb8d4
#ifdef __cplusplus
Packit 1fb8d4
}
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#endif /* WINPR_CRT_H */