QortalOS Brooklyn for Raspberry Pi 4
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.
 
 
 
 
 
 

177 lines
4.6 KiB

///
// Copyright 1993-2014 NVIDIA Corporation. All rights reserved.
//
// Please refer to the NVIDIA end user license agreement (EULA) associated
// with this source code for terms and conditions that govern your use of
// this software. Any use, reproduction, disclosure, or distribution of
// this software and related documentation outside the terms of the EULA
// is strictly prohibited.
//
////////////////////////////////////////////////////////////////////////////
#ifndef NVFILE_IO_H
#define NVFILE_IO_H
#if defined __linux__
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <dlfcn.h>
#include <stdlib.h>
typedef void * HANDLE;
typedef void *HINSTANCE;
typedef unsigned long DWORD, *LPDWORD;
typedef DWORD FILE_SIZE;
#define FALSE 0
#define TRUE 1
#define INFINITE UINT_MAX
#define FILE_BEGIN SEEK_SET
#define INVALID_SET_FILE_POINTER (-1)
#define INVALID_HANDLE_VALUE ((void *)(-1))
#else
#include <stdio.h>
#include <windows.h>
#endif
#include "nvCPUOPSys.h"
typedef unsigned long long U64;
typedef unsigned int U32;
inline U32 nvSetFilePointer(HANDLE hInputFile, U32 fileOffset, U32 *moveFilePointer, U32 flag)
{
#if defined (NV_WINDOWS)
return SetFilePointer(hInputFile, fileOffset, NULL, flag);
#elif defined __linux || defined __APPLE_ || defined __MACOSX
return fseek((FILE *)hInputFile, fileOffset, flag);
#endif
}
inline U32 nvSetFilePointer64(HANDLE hInputFile, U64 fileOffset, U64 *moveFilePointer, U32 flag)
{
#if defined (NV_WINDOWS)
return SetFilePointer(hInputFile, ((U32 *)&fileOffset)[0], (PLONG)&((U32 *)&fileOffset)[1], flag);
#elif defined __linux || defined __APPLE__ || defined __MACOSX
return fseek((FILE *)hInputFile, (long int)fileOffset, flag);
#endif
}
inline bool nvReadFile(HANDLE hInputFile, void *buf, U32 bytes_to_read, U32 *bytes_read, void *operlapped)
{
#if defined (NV_WINDOWS)
ReadFile(hInputFile, buf, bytes_to_read, (LPDWORD)bytes_read, NULL);
return true;
#elif defined __linux || defined __APPLE__ || defined __MACOSX
U32 num_bytes_read;
num_bytes_read = fread(buf, bytes_to_read, 1, (FILE *)hInputFile);
if (bytes_read)
{
*bytes_read = num_bytes_read;
}
return true;
#endif
}
inline void nvGetFileSize(HANDLE hInputFile, DWORD *pFilesize)
{
#if defined (NV_WINDOWS)
LARGE_INTEGER file_size;
if (hInputFile != INVALID_HANDLE_VALUE)
{
file_size.LowPart = GetFileSize(hInputFile, (LPDWORD)&file_size.HighPart);
printf("[ Input Filesize] : %lld bytes\n", ((LONGLONG) file_size.HighPart << 32) + (LONGLONG)file_size.LowPart);
if (pFilesize != NULL) *pFilesize = file_size.LowPart;
}
#elif defined __linux || defined __APPLE__ || defined __MACOSX
FILE_SIZE file_size;
if (hInputFile != NULL)
{
nvSetFilePointer64(hInputFile, 0, NULL, SEEK_END);
file_size = ftell((FILE *)hInputFile);
nvSetFilePointer64(hInputFile, 0, NULL, SEEK_SET);
printf("Input Filesize: %ld bytes\n", file_size);
if (pFilesize != NULL) *pFilesize = file_size;
}
#endif
}
inline HANDLE nvOpenFile(const char *input_file)
{
HANDLE hInput = NULL;
#if defined (NV_WINDOWS)
hInput = CreateFileA(input_file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL, NULL);
if (hInput == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "nvOpenFile Failed to open \"%s\"\n", input_file);
exit(EXIT_FAILURE);
}
#elif defined __linux || defined __APPLE_ || defined __MACOSX
hInput = fopen(input_file, "rb");
if (hInput == NULL)
{
fprintf(stderr, "nvOpenFile Failed to open \"%s\"\n", input_file);
exit(EXIT_FAILURE);
}
#endif
return hInput;
}
inline HANDLE nvOpenFileWrite(const char *output_file)
{
HANDLE hOutput = NULL;
#if defined (NV_WINDOWS)
hOutput = CreateFileA(output_file, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL, NULL);
if (hOutput == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "nvOpenFileWrite Failed to open \"%s\"\n", output_file);
exit(EXIT_FAILURE);
}
#elif defined __linux || defined __APPLE_ || defined __MACOSX
hOutput = fopen(output_file, "wb+");
if (hOutput == NULL)
{
fprintf(stderr, "nvOpenFileWrite Failed to open \"%s\"\n", output_file);
exit(EXIT_FAILURE);
}
#endif
return hOutput;
}
inline void nvCloseFile(HANDLE hFileHandle)
{
if (hFileHandle)
{
#if defined (NV_WINDOWS)
CloseHandle(hFileHandle);
#else
fclose((FILE *)hFileHandle);
#endif
}
}
#endif