mirror of
https://github.com/sfall-team/sslc.git
synced 2026-07-27 16:52:49 -07:00
Use one compat file
This commit is contained in:
@@ -0,0 +1,138 @@
|
|||||||
|
#include "compat.h"
|
||||||
|
|
||||||
|
int strcpy_s(char* dest, size_t destsz, const char* src) {
|
||||||
|
if (!dest || !src || destsz == 0) return EINVAL;
|
||||||
|
size_t len = strlen(src);
|
||||||
|
if (len >= destsz) {
|
||||||
|
dest[0] = '\0';
|
||||||
|
return ERANGE;
|
||||||
|
}
|
||||||
|
strcpy(dest, src);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int strcat_s(char *dest, size_t destsz, const char *src) {
|
||||||
|
if (!dest || !src || destsz == 0) return EINVAL;
|
||||||
|
|
||||||
|
size_t dest_len = strlen(dest);
|
||||||
|
size_t src_len = strlen(src);
|
||||||
|
|
||||||
|
if (dest_len + src_len + 1 > destsz) {
|
||||||
|
dest[0] = '\0';
|
||||||
|
return ERANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat(dest, src);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int rand_s(unsigned int *randomValue) {
|
||||||
|
if (!randomValue) return EINVAL;
|
||||||
|
*randomValue = (unsigned int)rand();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sprintf_s(char *buffer, size_t sizeOfBuffer, const char *format, ...) {
|
||||||
|
if (!buffer || sizeOfBuffer == 0 || !format) return EINVAL;
|
||||||
|
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
int written = vsnprintf(buffer, sizeOfBuffer, format, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
if (written < 0 || (size_t)written >= sizeOfBuffer) {
|
||||||
|
buffer[0] = '\0'; // mimic Windows behavior
|
||||||
|
return ERANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
intptr_t _findfirst(const char *pattern, struct _finddata_t *data) {
|
||||||
|
_find_handle_t *handle = calloc(1, sizeof(_find_handle_t));
|
||||||
|
if (!handle) return -1;
|
||||||
|
|
||||||
|
// Split pattern into directory path and wildcard
|
||||||
|
const char *slash = strrchr(pattern, '/');
|
||||||
|
if (slash) {
|
||||||
|
size_t len = (size_t)(slash - pattern + 1);
|
||||||
|
if (len >= sizeof(handle->path)) len = sizeof(handle->path) - 1;
|
||||||
|
strncpy(handle->path, pattern, len);
|
||||||
|
handle->path[len] = '\0';
|
||||||
|
strncpy(handle->pattern, slash + 1, sizeof(handle->pattern) - 1);
|
||||||
|
} else {
|
||||||
|
strncpy(handle->path, "./", sizeof(handle->path) - 1);
|
||||||
|
strncpy(handle->pattern, pattern, sizeof(handle->pattern) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
handle->dir = opendir(handle->path);
|
||||||
|
if (!handle->dir) {
|
||||||
|
free(handle);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct dirent *entry;
|
||||||
|
while ((entry = readdir(handle->dir)) != NULL) {
|
||||||
|
if (fnmatch(handle->pattern, entry->d_name, 0) == 0) {
|
||||||
|
struct stat st;
|
||||||
|
char fullpath[512];
|
||||||
|
snprintf(fullpath, sizeof(fullpath), "%s%s", handle->path, entry->d_name);
|
||||||
|
if (stat(fullpath, &st) == 0) {
|
||||||
|
// Make the name absolute
|
||||||
|
char abspath[512];
|
||||||
|
if (realpath(fullpath, abspath)) {
|
||||||
|
strncpy(data->name, abspath, sizeof(data->name) - 1);
|
||||||
|
data->name[sizeof(data->name) - 1] = '\0';
|
||||||
|
} else {
|
||||||
|
// Fallback to relative path
|
||||||
|
strncpy(data->name, fullpath, sizeof(data->name) - 1);
|
||||||
|
data->name[sizeof(data->name) - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
data->time_write = st.st_mtime;
|
||||||
|
data->size = st.st_size;
|
||||||
|
data->attrib = S_ISDIR(st.st_mode) ? _A_SUBDIR : _A_NORMAL;
|
||||||
|
return (intptr_t)handle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
closedir(handle->dir);
|
||||||
|
free(handle);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int _findnext(intptr_t h, struct _finddata_t *data) {
|
||||||
|
_find_handle_t *handle = (_find_handle_t *)h;
|
||||||
|
struct dirent *entry;
|
||||||
|
|
||||||
|
while ((entry = readdir(handle->dir)) != NULL) {
|
||||||
|
if (fnmatch(handle->pattern, entry->d_name, 0) == 0) {
|
||||||
|
struct stat st;
|
||||||
|
char fullpath[512];
|
||||||
|
snprintf(fullpath, sizeof(fullpath), "%s%s", handle->path, entry->d_name);
|
||||||
|
if (stat(fullpath, &st) == 0) {
|
||||||
|
strncpy(data->name, entry->d_name, sizeof(data->name));
|
||||||
|
data->time_write = st.st_mtime;
|
||||||
|
data->size = st.st_size;
|
||||||
|
data->attrib = S_ISDIR(st.st_mode) ? _A_SUBDIR : _A_NORMAL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _findclose(intptr_t h) {
|
||||||
|
_find_handle_t *handle = (_find_handle_t *)h;
|
||||||
|
if (handle) {
|
||||||
|
if (handle->dir) closedir(handle->dir);
|
||||||
|
free(handle);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
#ifndef _WIN32
|
||||||
|
|
||||||
|
#ifndef _COMPAT_H_DEFINED
|
||||||
|
#define _COMPAT_H_DEFINED
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <fnmatch.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define _A_NORMAL 0x00
|
||||||
|
#define _A_SUBDIR 0x10
|
||||||
|
|
||||||
|
#define _MSC_VER;
|
||||||
|
|
||||||
|
|
||||||
|
int sprintf_s(char *buffer, size_t sizeOfBuffer, const char *format, ...);
|
||||||
|
int rand_s(unsigned int *randomValue);
|
||||||
|
|
||||||
|
int strcpy_s(char* dest, size_t destsz, const char* src);
|
||||||
|
int strcat_s(char *dest, size_t destsz, const char *src);
|
||||||
|
|
||||||
|
#define _stricmp strcasecmp
|
||||||
|
#define GetCurrentProcessId() ((unsigned int)getpid())
|
||||||
|
#define _mkdir(path) mkdir((path), 0777)
|
||||||
|
#define _chdir chdir
|
||||||
|
#define _getcwd getcwd
|
||||||
|
#define _stat stat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef __time_t time_t;
|
||||||
|
typedef u_int32_t _fsize_t;
|
||||||
|
|
||||||
|
|
||||||
|
struct _finddata_t {
|
||||||
|
unsigned attrib;
|
||||||
|
time_t time_write;
|
||||||
|
size_t size;
|
||||||
|
char name[260]; // or PATH_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DIR *dir;
|
||||||
|
char pattern[260];
|
||||||
|
char path[260];
|
||||||
|
} _find_handle_t;
|
||||||
|
|
||||||
|
|
||||||
|
intptr_t _findfirst(const char *pattern, struct _finddata_t *data);
|
||||||
|
int _findnext(intptr_t h, struct _finddata_t *data);
|
||||||
|
int _findclose(intptr_t h);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
#ifdef _WIN32
|
|
||||||
|
|
||||||
#include <io.h>
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _WINDOWS_H_DEFINED
|
|
||||||
#define _WINDOWS_H_DEFINED
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
int sprintf_s(char *buffer, size_t sizeOfBuffer, const char *format, ...);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#ifdef _WIN32
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifndef _COMPAT_STDLIB_H_DEFINED
|
|
||||||
#define _COMPAT_STDLIB_H_DEFINED
|
|
||||||
|
|
||||||
int rand_s(unsigned int *randomValue);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
#ifdef _WIN32
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifndef _COMPAT_STRING_H_DEFINED
|
|
||||||
#define _COMPAT_STRING_H_DEFINED
|
|
||||||
|
|
||||||
int strcpy_s(char* dest, size_t destsz, const char* src);
|
|
||||||
int strcat_s(char *dest, size_t destsz, const char *src);
|
|
||||||
|
|
||||||
#define _stricmp strcasecmp
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#ifdef _WIN32
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
|
|
||||||
#define GetCurrentProcessId() ((unsigned int)getpid())
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,11 +1,16 @@
|
|||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#define _CRT_RAND_S
|
#define _CRT_RAND_S
|
||||||
#include <Windows.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "lex.h"
|
#include "lex.h"
|
||||||
#include "parse.h"
|
#include "parse.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
#else
|
||||||
|
#include "compat.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -35,8 +35,8 @@
|
|||||||
* are placed here.
|
* are placed here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "system.H"
|
#include "system.h"
|
||||||
#include "internal.H"
|
#include "internal.h"
|
||||||
|
|
||||||
static int do_if( int hash, const char * directive_name);
|
static int do_if( int hash, const char * directive_name);
|
||||||
/* #if, #elif, #ifdef, #ifndef */
|
/* #if, #elif, #ifdef, #ifndef */
|
||||||
|
|||||||
+2
-2
@@ -35,8 +35,8 @@
|
|||||||
* Some routines are used also to evaluate the value of numerical tokens.
|
* Some routines are used also to evaluate the value of numerical tokens.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "system.H"
|
#include "system.h"
|
||||||
#include "internal.H"
|
#include "internal.h"
|
||||||
|
|
||||||
typedef struct optab {
|
typedef struct optab {
|
||||||
char op; /* Operator */
|
char op; /* Operator */
|
||||||
|
|||||||
+2
-2
@@ -37,8 +37,8 @@
|
|||||||
#if PREPROCESSED
|
#if PREPROCESSED
|
||||||
#include "mcpp.H"
|
#include "mcpp.H"
|
||||||
#else
|
#else
|
||||||
#include "system.H"
|
#include "system.h"
|
||||||
#include "internal.H"
|
#include "internal.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ARG_ERROR (-255)
|
#define ARG_ERROR (-255)
|
||||||
|
|||||||
+2
-2
@@ -35,8 +35,8 @@
|
|||||||
* The post-preprocessing routines are also placed here.
|
* The post-preprocessing routines are also placed here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "system.H"
|
#include "system.h"
|
||||||
#include "internal.H"
|
#include "internal.h"
|
||||||
|
|
||||||
/* Function pointer to expand_macro() functions. */
|
/* Function pointer to expand_macro() functions. */
|
||||||
char * (*expand_macro)( DEFBUF * defp, char * out, char * out_end
|
char * (*expand_macro)( DEFBUF * defp, char * out, char * out_end
|
||||||
|
|||||||
+2
-2
@@ -70,8 +70,8 @@
|
|||||||
* buffer.
|
* buffer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "system.H"
|
#include "system.h"
|
||||||
#include "internal.H"
|
#include "internal.h"
|
||||||
|
|
||||||
static void scan_id( int c);
|
static void scan_id( int c);
|
||||||
/* Scan an identifier */
|
/* Scan an identifier */
|
||||||
|
|||||||
+8
-3
@@ -36,10 +36,15 @@
|
|||||||
* 1. specify the constants in "configed.H" or "noconfig.H",
|
* 1. specify the constants in "configed.H" or "noconfig.H",
|
||||||
* 2. append the system-dependent routines in this file.
|
* 2. append the system-dependent routines in this file.
|
||||||
*/
|
*/
|
||||||
#include "system.H"
|
#include "system.h"
|
||||||
#include "internal.H"
|
#include "internal.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <direct.h>
|
||||||
|
#else
|
||||||
|
#include "compat.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "direct.h"
|
|
||||||
#define getcwd( buf, size) _getcwd( buf, size)
|
#define getcwd( buf, size) _getcwd( buf, size)
|
||||||
#include "sys/types.h"
|
#include "sys/types.h"
|
||||||
#include "sys/stat.h" /* For stat() */
|
#include "sys/stat.h" /* For stat() */
|
||||||
|
|||||||
Reference in New Issue
Block a user