You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.4 KiB
152 lines
3.4 KiB
/*
|
|
* platform_posix.c -- plain POSIX platform wrappers.
|
|
* (C) 2007-2010 - Francesco Romani <fromani -at- gmail -dot- com>
|
|
*
|
|
* This software is provided 'as-is', without any express or implied
|
|
* warranty. In no event will the authors be held liable for any damages
|
|
* arising from the use of this software.
|
|
*
|
|
* Permission is granted to anyone to use this software for any purpose,
|
|
* including commercial applications, and to alter it and redistribute it
|
|
* freely, subject to the following restrictions:
|
|
*
|
|
* 1. The origin of this software must not be misrepresented; you must not
|
|
* claim that you wrote the original software. If you use this software
|
|
* in a product, an acknowledgment in the product documentation would be
|
|
* appreciated but is not required.
|
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
|
* misrepresented as being the original software.
|
|
* 3. This notice may not be removed or altered from any source distribution.
|
|
*/
|
|
|
|
#include "platform.h"
|
|
|
|
#include <string.h>
|
|
#include <stdarg.h>
|
|
#include <errno.h>
|
|
|
|
|
|
/*************************************************************************/
|
|
/* I/O is straightforward. */
|
|
/*************************************************************************/
|
|
|
|
int plat_open(const char *pathname, int flags, int mode)
|
|
{
|
|
return open(pathname, flags, mode);
|
|
}
|
|
|
|
int plat_close(int fd)
|
|
{
|
|
return close(fd);
|
|
}
|
|
|
|
/*
|
|
* automatically restart after a recoverable interruption
|
|
*/
|
|
ssize_t plat_read(int fd, void *buf, size_t count)
|
|
{
|
|
ssize_t n = 0, r = 0;
|
|
|
|
while (r < count) {
|
|
n = read(fd, buf + r, count - r);
|
|
if (n == 0)
|
|
break;
|
|
if (n < 0) {
|
|
if (errno == EINTR)
|
|
continue;
|
|
else
|
|
break;
|
|
}
|
|
|
|
r += n;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
/*
|
|
* automatically restart after a recoverable interruption
|
|
*/
|
|
ssize_t plat_write(int fd, const void *buf, size_t count)
|
|
{
|
|
ssize_t n = 0, r = 0;
|
|
|
|
while (r < count) {
|
|
n = write(fd, buf + r, count - r);
|
|
if (n < 0)
|
|
return n;
|
|
|
|
r += n;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
|
|
int64_t plat_seek(int fd, int64_t offset, int whence)
|
|
{
|
|
return lseek(fd, offset, whence);
|
|
}
|
|
|
|
int plat_ftruncate(int fd, int64_t length)
|
|
{
|
|
return ftruncate(fd, length);
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
/* Memory management is straightforward too. */
|
|
/*************************************************************************/
|
|
|
|
void *_plat_malloc(const char *file, int line, size_t size)
|
|
{
|
|
return malloc(size);
|
|
}
|
|
|
|
void *_plat_zalloc(const char *file, int line, size_t size)
|
|
{
|
|
return calloc(1, size);
|
|
}
|
|
|
|
void *_plat_realloc(const char *file, int line, void *ptr, size_t size)
|
|
{
|
|
return realloc(ptr, size);
|
|
}
|
|
|
|
void plat_free(void *ptr)
|
|
{
|
|
free(ptr);
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
/* Trivial logging support. */
|
|
/*************************************************************************/
|
|
|
|
int plat_log_open(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int plat_log_send(PlatLogLevel level,
|
|
const char *tag, const char *fmt, ...)
|
|
{
|
|
char buffer[1024];
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
vsnprintf(buffer, 1024, fmt, ap);
|
|
va_end(ap);
|
|
|
|
fprintf(stderr, "[%s] %s\n", tag, buffer);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int plat_log_close(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
// EOF
|