⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libcimp.c

📁 gumstiz u-boot loader in linux
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************                       SciTech MGL Graphics Library**  ========================================================================**    The contents of this file are subject to the SciTech MGL Public*    License Version 1.0 (the "License"); you may not use this file*    except in compliance with the License. You may obtain a copy of*    the License at http://www.scitechsoft.com/mgl-license.txt**    Software distributed under the License is distributed on an*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or*    implied. See the License for the specific language governing*    rights and limitations under the License.**    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.**    The Initial Developer of the Original Code is SciTech Software, Inc.*    All Rights Reserved.**  ========================================================================** Language:     ANSI C* Environment:  Any** Description:  Module to implement a the OS specific side of the Binary*               Portable DLL C runtime library. The functions in here*               are imported into the Binary Portable DLL's to implement*               OS specific services.*****************************************************************************/#include "pmapi.h"#if defined(__WIN32_VXD__) || defined(__NT_DRIVER__)#include "drvlib/peloader.h"#include "drvlib/attrib.h"#include "drvlib/libc/init.h"#define __BUILDING_PE_LOADER__#include "drvlib/libc/file.h"#if defined(__WIN32_VXD__)#include "vxdfile.h"#endif#else#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>#include <time.h>#include <signal.h>#include <fcntl.h>#if defined(__GNUC__) || defined(__UNIX__)#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#else#include <io.h>#endif#include "drvlib/attrib.h"#include "drvlib/libc/init.h"#define __BUILDING_PE_LOADER__#include "drvlib/libc/file.h"#if defined(__WINDOWS__) || defined(TNT) || defined(__RTTARGET__)#define WIN32_LEAN_AND_MEAN#define STRICT#include <windows.h>#endif#ifdef  __MSDOS__#include <dos.h>#endif#ifdef  __OS2__#define INCL_DOS#define INCL_DOSERRORS#define INCL_SUB#include <os2.h>#endif#endif/* No text or binary modes for Unix */#ifndef O_BINARY#define O_BINARY    0#define O_TEXT      0#endif/*--------------------------- Global variables ----------------------------*/#if defined(__WIN32_VXD__) || defined(__NT_DRIVER__)#define MAX_FILES   16static FILE *openHandles[MAX_FILES] = {NULL};#endif/* <stdlib.h> stub functions */void    _CDECL stub_abort(void);int     _CDECL stub_atexit(void (*)(void));void *  _CDECL stub_calloc(size_t _nelem, size_t _size);void    _CDECL stub_exit(int _status);void    _CDECL stub_free(void *_ptr);char *  _CDECL stub_getenv(const char *_name);void *  _CDECL stub_malloc(size_t _size);void *  _CDECL stub_realloc(void *_ptr, size_t _size);int     _CDECL stub_system(const char *_s);int     _CDECL stub_putenv(const char *_val);/* <libc/file.h> stub functions */int     _CDECL stub_open(const char *_path, int _oflag, unsigned _mode);int     _CDECL stub_access(const char *_path, int _amode);int     _CDECL stub_close(int _fildes);off_t   _CDECL stub_lseek(int _fildes, off_t _offset, int _whence);size_t  _CDECL stub_read(int _fildes, void *_buf, size_t _nbyte);int     _CDECL stub_unlink(const char *_path);size_t  _CDECL stub_write(int _fildes, const void *_buf, size_t _nbyte);int     _CDECL stub_isatty(int _fildes);/* <stdio.h> stub functions */int     _CDECL stub_remove(const char *_filename);int     _CDECL stub_rename(const char *_old, const char *_new);/* <time.h> stub functions */time_t  _CDECL stub_time(time_t *_tod);/* <signal.h> stub functions */int     _CDECL stub_raise(int);void *  _CDECL stub_signal(int, void *);/* <drvlib/attrib.h> functions */#define stub_OS_setfileattr    _OS_setfileattr#define stub_OS_getcurrentdate _OS_getcurrentdateLIBC_imports    _VARAPI ___imports = {    sizeof(LIBC_imports),    /* <stdlib.h> exports */    stub_abort,    stub_atexit,    stub_calloc,    stub_exit,    stub_free,    stub_getenv,    stub_malloc,    stub_realloc,    stub_system,    stub_putenv,    /* <libc/file.h> exports */    stub_open,    stub_access,    stub_close,    stub_lseek,    stub_read,    stub_unlink,    stub_write,    stub_isatty,    /* <stdio.h> exports */    stub_remove,    stub_rename,    /* <signal.h> functions */    stub_raise,    stub_signal,    /* <time.h> exports */    stub_time,    /* <drvlib/attrib.h> exports */    stub_OS_setfileattr,    stub_OS_getcurrentdate,    };/*---------------------- Stub function implementation ---------------------*//* <stdlib.h> stub functions */void _CDECL stub_abort(void){#if !defined( __WIN32_VXD__) && !defined(__NT_DRIVER__)    abort();#endif}int _CDECL stub_atexit(void (*func)(void)){#if !defined( __WIN32_VXD__) && !defined(__NT_DRIVER__)    return atexit((void(*)(void))func);#else    return -1;#endif}void * _CDECL stub_calloc(size_t _nelem, size_t _size){ return __PM_calloc(_nelem,_size); }void _CDECL stub_exit(int _status){#if !defined( __WIN32_VXD__) && !defined(__NT_DRIVER__)    exit(_status);#endif}void _CDECL stub_free(void *_ptr){ __PM_free(_ptr); }char * _CDECL stub_getenv(const char *_name){#if defined( __WIN32_VXD__) || defined(__NT_DRIVER__)    return NULL;#else    return getenv(_name);#endif}void * _CDECL stub_malloc(size_t _size){ return __PM_malloc(_size); }void * _CDECL stub_realloc(void *_ptr, size_t _size){ return __PM_realloc(_ptr,_size); }int _CDECL stub_system(const char *_s){#if defined(__WINDOWS__) || defined(__WIN32_VXD__) || defined(__NT_DRIVER__) || defined(__SMX32__) || defined(__RTTARGET__)    (void)_s;    return -1;#else    return system(_s);#endif}int _CDECL stub_putenv(const char *_val){#if defined( __WIN32_VXD__) || defined(__NT_DRIVER__)    return -1;#else    return putenv((char*)_val);#endif}time_t _CDECL stub_time(time_t *_tod){#if defined( __WIN32_VXD__) || defined(__NT_DRIVER__)    return 0;#else    return time(_tod);#endif}#if     defined(__MSDOS__)#if defined(TNT) && defined(_MSC_VER)void _CDECL _OS_setfileattr(const char *filename,unsigned attrib){ SetFileAttributes((LPSTR)filename, (DWORD)attrib); }#elsevoid _CDECL _OS_setfileattr(const char *filename,unsigned attrib){ _dos_setfileattr(filename,attrib); }#endif#elif   defined(__WIN32_VXD__)#define USE_LOCAL_FILEIO#define USE_LOCAL_GETDATE/* <libc/file.h> stub functions */int _CDECL stub_open(const char *_path, int _oflag, unsigned _mode){    char    mode[10];    int     i;    /* Find an empty file handle to use */    for (i = 3; i < MAX_FILES; i++) {	if (!openHandles[i])	    break;	}    if (openHandles[i])	return -1;    /* Find the open flags to use */    if (_oflag & ___O_TRUNC)	strcpy(mode,"w");    else if (_oflag & ___O_CREAT)	strcpy(mode,"a");    else	strcpy(mode,"r");    if (_oflag & ___O_BINARY)	strcat(mode,"b");    if (_oflag & ___O_TEXT)	strcat(mode,"t");    /* Open the file and store the file handle */    if ((openHandles[i] = fopen(_path,mode)) == NULL)	return -1;    return i;}int _CDECL stub_access(const char *_path, int _amode){ return -1; }int _CDECL stub_close(int _fildes){    if (_fildes >= 3 && openHandles[_fildes]) {	fclose(openHandles[_fildes]);	openHandles[_fildes] = NULL;	}    return 0;}off_t _CDECL stub_lseek(int _fildes, off_t _offset, int _whence){    if (_fildes >= 3) {	fseek(openHandles[_fildes],_offset,_whence);	return ftell(openHandles[_fildes]);	}    return 0;}size_t _CDECL stub_read(int _fildes, void *_buf, size_t _nbyte){    if (_fildes >= 3)	return fread(_buf,1,_nbyte,openHandles[_fildes]);    return 0;}int _CDECL stub_unlink(const char *_path){    WORD error;    if (initComplete) {	if (R0_DeleteFile((char*)_path,0,&error))	    return 0;	return -1;	}    else	return i_remove(_path);}size_t _CDECL stub_write(int _fildes, const void *_buf, size_t _nbyte){    if (_fildes >= 3)	return fwrite(_buf,1,_nbyte,openHandles[_fildes]);    return _nbyte;}int _CDECL stub_isatty(int _fildes){ return 0; }/* <stdio.h> stub functions */int _CDECL stub_remove(const char *_filename){ return stub_unlink(_filename); }int _CDECL stub_rename(const char *_old, const char *_new){ return -1; }void _CDECL _OS_setfileattr(const char *filename,unsigned attrib){    WORD error;    if (initComplete)	R0_SetFileAttributes((char*)filename,attrib,&error);}/* Return the current date in days since 1/1/1980 */ulong _CDECL _OS_getcurrentdate(void){    DWORD   date;    VTD_Get_Date_And_Time(&date);    return date;}#elif   defined(__NT_DRIVER__)#define USE_LOCAL_FILEIO#define USE_LOCAL_GETDATE/* <libc/file.h> stub functions */int _CDECL stub_open(const char *_path, int _oflag, unsigned _mode){    char    mode[10];    int     i;    /* Find an empty file handle to use */    for (i = 3; i < MAX_FILES; i++) {	if (!openHandles[i])	    break;	}    if (openHandles[i])	return -1;    /* Find the open flags to use */    if (_oflag & ___O_TRUNC)	strcpy(mode,"w");    else if (_oflag & ___O_CREAT)	strcpy(mode,"a");    else	strcpy(mode,"r");    if (_oflag & ___O_BINARY)	strcat(mode,"b");    if (_oflag & ___O_TEXT)	strcat(mode,"t");    /* Open the file and store the file handle */    if ((openHandles[i] = fopen(_path,mode)) == NULL)	return -1;    return i;}int _CDECL stub_close(int _fildes){    if (_fildes >= 3 && openHandles[_fildes]) {	fclose(openHandles[_fildes]);	openHandles[_fildes] = NULL;	}    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -