Files
99_7018_lmx/cpu/br28/lua_port_api.c

141 lines
3.0 KiB
C
Raw Normal View History

2025-10-29 13:10:02 +08:00
//--- support functions for Lua
#include <stdlib.h>
#include "cpu.h"
#if 1
void abort()
{
printf("lua aborted !!!!!\n");
while (1);
}
#endif
char *_user_strerror(
int errnum,
int internal,
int *errptr)
{
/* prevent warning about unused parameters */
(void)errnum;
(void)internal;
(void)errptr;
return 0;
}
unsigned int luaP_makeseed(void)
{
int rand = (JL_RAND->R64H << 32) | JL_RAND->R64L;
return rand;
}
void luaP_writeline(void)
{
putchar('\n');
}
void luaP_writestring(const char *p, int l)
{
for (int i = 0; i < l; i++) {
putchar(*p++);
}
}
#if 1
void *my_realloc(void *ptr, size_t osize, size_t nsize)
{
/* printf("realloc(%x, %d)\n", ptr, size); */
if (!ptr) {
return malloc(nsize);
}
if (nsize == 0) {
free(ptr);
ptr = NULL;
return NULL;
}
void *p = malloc(nsize);
if (p) {
if (ptr != NULL) {
// 照较小的buffer大小拷贝防止溢出
size_t copy_size = (osize > nsize) ? nsize : osize;
memcpy(p, ptr, copy_size);
free(ptr);
ptr = NULL;
}
return p;
}
return NULL;
}
#endif
int my_sprintf(char *s, const char *fmt, ...)
{
va_list args;
double argv;
int ret = 0;
if (!strcmp(fmt, "%.7g")) {
va_start(args, fmt);
argv = va_arg(args, double);
char format[9] = {0};
int integer = 0;
int trim = 0;
if ((argv > -0.00000001) && (argv < 0.00000001)) {
sprintf(format, "%%d.%%d");
} else if (argv >= 0.00000001) {
integer = (int)argv;
int decimal = (int)(((__int64)((argv - integer) * 100000000 + 5)) % 100000000);
decimal /= 10;
trim = decimal;
int bits = 7;
while (bits) {
int n = trim % 10;
if (n != 0) {
break;
} else {
trim /= 10;
bits--;
}
}
if (bits) {
sprintf(format, "%%d.%%0%dd", bits);
} else {
sprintf(format, "%%d.%%d");
}
} else {
argv = -argv;
integer = (int)argv;
int decimal = (int)(((__int64)((argv - integer) * 100000000 + 5)) % 100000000);
decimal /= 10;
trim = decimal;
int bits = 7;
while (bits) {
int n = trim % 10;
if (n != 0) {
break;
} else {
trim /= 10;
bits--;
}
}
if (bits) {
sprintf(format, "-%%d.%%0%dd", bits);
} else {
sprintf(format, "-%%d.%%d");
}
}
ret = sprintf(s, format, integer, trim);
va_end(args);
} else {
ASSERT(0, "format %s not support!", fmt);
}
return ret;
}