Patch 2358908 by StrontiumDog with some changes.
This patch fix some more warnings. Most of them being warnings about unused fread/fwrite results. Instead of just discarding the result, the number of read/write is stored in the variable and can be use to know if there was a problem in the fread/fwrite calls. (also change the variable names to elems_ instead of bytes_ as the function returns the number of items not the number of bytes).
This commit is contained in:
parent
3316d1e0b4
commit
df1e0d6737
|
@ -606,6 +606,7 @@ int NDS_WriteBMP(const char *filename)
|
||||||
FILE *file;
|
FILE *file;
|
||||||
int i,j;
|
int i,j;
|
||||||
u16 * bmp = (u16 *)GPU_screen;
|
u16 * bmp = (u16 *)GPU_screen;
|
||||||
|
size_t elems_written = 0;
|
||||||
|
|
||||||
memset(&fileheader, 0, sizeof(fileheader));
|
memset(&fileheader, 0, sizeof(fileheader));
|
||||||
fileheader.size = sizeof(fileheader);
|
fileheader.size = sizeof(fileheader);
|
||||||
|
@ -624,8 +625,8 @@ int NDS_WriteBMP(const char *filename)
|
||||||
if ((file = fopen(filename,"wb")) == NULL)
|
if ((file = fopen(filename,"wb")) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fwrite(&fileheader, 1, sizeof(fileheader), file);
|
elems_written += fwrite(&fileheader, 1, sizeof(fileheader), file);
|
||||||
fwrite(&imageheader, 1, sizeof(imageheader), file);
|
elems_written += fwrite(&imageheader, 1, sizeof(imageheader), file);
|
||||||
|
|
||||||
for(j=0;j<192*2;j++)
|
for(j=0;j<192*2;j++)
|
||||||
{
|
{
|
||||||
|
@ -641,9 +642,9 @@ int NDS_WriteBMP(const char *filename)
|
||||||
r*=255/31;
|
r*=255/31;
|
||||||
g*=255/31;
|
g*=255/31;
|
||||||
b*=255/31;
|
b*=255/31;
|
||||||
fwrite(&r, 1, sizeof(u8), file);
|
elems_written += fwrite(&r, 1, sizeof(u8), file);
|
||||||
fwrite(&g, 1, sizeof(u8), file);
|
elems_written += fwrite(&g, 1, sizeof(u8), file);
|
||||||
fwrite(&b, 1, sizeof(u8), file);
|
elems_written += fwrite(&b, 1, sizeof(u8), file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
@ -651,37 +652,37 @@ int NDS_WriteBMP(const char *filename)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NDS_WriteBMP_32bppBuffer(int width, int height, const void* buf, const char *filename)
|
int NDS_WriteBMP_32bppBuffer(int width, int height, const void* buf, const char *filename)
|
||||||
{
|
{
|
||||||
bmpfileheader_struct fileheader;
|
bmpfileheader_struct fileheader;
|
||||||
bmpimgheader_struct imageheader;
|
bmpimgheader_struct imageheader;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
|
size_t elems_written = 0;
|
||||||
memset(&fileheader, 0, sizeof(fileheader));
|
memset(&fileheader, 0, sizeof(fileheader));
|
||||||
fileheader.size = sizeof(fileheader);
|
fileheader.size = sizeof(fileheader);
|
||||||
fileheader.id = 'B' | ('M' << 8);
|
fileheader.id = 'B' | ('M' << 8);
|
||||||
fileheader.imgoffset = sizeof(fileheader)+sizeof(imageheader);
|
fileheader.imgoffset = sizeof(fileheader)+sizeof(imageheader);
|
||||||
|
|
||||||
memset(&imageheader, 0, sizeof(imageheader));
|
memset(&imageheader, 0, sizeof(imageheader));
|
||||||
imageheader.size = sizeof(imageheader);
|
imageheader.size = sizeof(imageheader);
|
||||||
imageheader.width = width;
|
imageheader.width = width;
|
||||||
imageheader.height = height;
|
imageheader.height = height;
|
||||||
imageheader.planes = 1;
|
imageheader.planes = 1;
|
||||||
imageheader.bpp = 32;
|
imageheader.bpp = 32;
|
||||||
imageheader.cmptype = 0; // None
|
imageheader.cmptype = 0; // None
|
||||||
imageheader.imgsize = imageheader.width * imageheader.height * 4;
|
imageheader.imgsize = imageheader.width * imageheader.height * 4;
|
||||||
|
|
||||||
if ((file = fopen(filename,"wb")) == NULL)
|
if ((file = fopen(filename,"wb")) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fwrite(&fileheader, 1, sizeof(fileheader), file);
|
elems_written += fwrite(&fileheader, 1, sizeof(fileheader), file);
|
||||||
fwrite(&imageheader, 1, sizeof(imageheader), file);
|
elems_written += fwrite(&imageheader, 1, sizeof(imageheader), file);
|
||||||
|
|
||||||
fwrite(buf,1,imageheader.imgsize,file);
|
elems_written += fwrite(buf,1,imageheader.imgsize,file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
//#define DEBUG_DUMP_TEXTURE
|
//#define DEBUG_DUMP_TEXTURE
|
||||||
|
|
||||||
bool (*oglrender_init)() = 0;
|
bool (*oglrender_init)() = 0;
|
||||||
bool (*oglrender_beginOpenGL)() = 0;
|
bool (*oglrender_beginOpenGL)() = 0;
|
||||||
|
@ -53,15 +53,15 @@ static void ENDGL() {
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
#else
|
#else
|
||||||
#ifdef DESMUME_COCOA
|
#ifdef DESMUME_COCOA
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#include <OpenGL/glext.h>
|
#include <OpenGL/glext.h>
|
||||||
#else
|
#else
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
@ -154,14 +154,14 @@ static void xglUseProgram(GLuint program) {
|
||||||
static GLuint oldprogram = -1;
|
static GLuint oldprogram = -1;
|
||||||
if(oldprogram==program) return;
|
if(oldprogram==program) return;
|
||||||
glUseProgram(oldprogram=program);
|
glUseProgram(oldprogram=program);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#if 0 /* not used */
|
#if 0 /* not used */
|
||||||
static void xglUseProgram(GLuint program) {
|
static void xglUseProgram(GLuint program) {
|
||||||
(void)program;
|
(void)program;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void xglDepthMask (GLboolean flag) {
|
static void xglDepthMask (GLboolean flag) {
|
||||||
|
@ -441,8 +441,8 @@ void* memcpy_fast(void* dest, const void* src, size_t count)
|
||||||
#define memcpy_fast(d,s,c) memcpy(d,s,c)
|
#define memcpy_fast(d,s,c) memcpy(d,s,c)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined (DEBUG_DUMP_TEXTURE) && defined (WIN32)
|
#if defined (DEBUG_DUMP_TEXTURE) && defined (WIN32)
|
||||||
static void DebugDumpTexture(int which)
|
static void DebugDumpTexture(int which)
|
||||||
{
|
{
|
||||||
char fname[100];
|
char fname[100];
|
||||||
|
@ -456,10 +456,10 @@ static void DebugDumpTexture(int which)
|
||||||
texMAP);
|
texMAP);
|
||||||
|
|
||||||
NDS_WriteBMP_32bppBuffer(texcache[which].sizeX,texcache[which].sizeY,texMAP,fname);
|
NDS_WriteBMP_32bppBuffer(texcache[which].sizeX,texcache[which].sizeY,texMAP,fname);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define DebugDumpTexture(which) do { (void)which; } while (0)
|
#define DebugDumpTexture(which) do { (void)which; } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
static int lastTexture = -1;
|
static int lastTexture = -1;
|
||||||
|
@ -732,7 +732,7 @@ static void setTexture(unsigned int format, unsigned int texpal)
|
||||||
dwdst[currentPos+3] = tmp_col[(currRow>>6)&3];
|
dwdst[currentPos+3] = tmp_col[(currRow>>6)&3];
|
||||||
|
|
||||||
if(dead) {
|
if(dead) {
|
||||||
memset(dwdst, 0, sizeof(dwdst[0]) * 4);
|
memset(dwdst, 0, sizeof(dwdst[0]) * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
txt_slot_current_size-=4;;
|
txt_slot_current_size-=4;;
|
||||||
|
@ -961,8 +961,8 @@ static void Render()
|
||||||
//TODO - properly doublebuffer the display lists
|
//TODO - properly doublebuffer the display lists
|
||||||
{
|
{
|
||||||
|
|
||||||
u32 lastTextureFormat, lastTexturePalette, lastPolyAttr;
|
u32 lastTextureFormat = 0, lastTexturePalette = 0, lastPolyAttr = 0;
|
||||||
|
|
||||||
for(int i=0;i<gfx3d.polylist->count;i++) {
|
for(int i=0;i<gfx3d.polylist->count;i++) {
|
||||||
POLY *poly = &gfx3d.polylist->list[gfx3d.indexlist[i]];
|
POLY *poly = &gfx3d.polylist->list[gfx3d.indexlist[i]];
|
||||||
int type = poly->type;
|
int type = poly->type;
|
||||||
|
|
|
@ -1216,6 +1216,7 @@ int SNDFileInit(int buffersize)
|
||||||
waveheader_struct waveheader;
|
waveheader_struct waveheader;
|
||||||
fmt_struct fmt;
|
fmt_struct fmt;
|
||||||
chunk_struct data;
|
chunk_struct data;
|
||||||
|
size_t elems_written = 0;
|
||||||
|
|
||||||
if ((spufp = fopen("ndsaudio.wav", "wb")) == NULL)
|
if ((spufp = fopen("ndsaudio.wav", "wb")) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1224,7 +1225,7 @@ int SNDFileInit(int buffersize)
|
||||||
memcpy(waveheader.riff.id, "RIFF", 4);
|
memcpy(waveheader.riff.id, "RIFF", 4);
|
||||||
waveheader.riff.size = 0; // we'll fix this after the file is closed
|
waveheader.riff.size = 0; // we'll fix this after the file is closed
|
||||||
memcpy(waveheader.rifftype, "WAVE", 4);
|
memcpy(waveheader.rifftype, "WAVE", 4);
|
||||||
fwrite((void *)&waveheader, 1, sizeof(waveheader_struct), spufp);
|
elems_written += fwrite((void *)&waveheader, 1, sizeof(waveheader_struct), spufp);
|
||||||
|
|
||||||
// fmt chunk
|
// fmt chunk
|
||||||
memcpy(fmt.chunk.id, "fmt ", 4);
|
memcpy(fmt.chunk.id, "fmt ", 4);
|
||||||
|
@ -1235,12 +1236,12 @@ int SNDFileInit(int buffersize)
|
||||||
fmt.bitspersample = 16;
|
fmt.bitspersample = 16;
|
||||||
fmt.blockalign = fmt.bitspersample / 8 * fmt.numchan;
|
fmt.blockalign = fmt.bitspersample / 8 * fmt.numchan;
|
||||||
fmt.bytespersec = fmt.rate * fmt.blockalign;
|
fmt.bytespersec = fmt.rate * fmt.blockalign;
|
||||||
fwrite((void *)&fmt, 1, sizeof(fmt_struct), spufp);
|
elems_written += fwrite((void *)&fmt, 1, sizeof(fmt_struct), spufp);
|
||||||
|
|
||||||
// data chunk
|
// data chunk
|
||||||
memcpy(data.id, "data", 4);
|
memcpy(data.id, "data", 4);
|
||||||
data.size = 0; // we'll fix this at the end
|
data.size = 0; // we'll fix this at the end
|
||||||
fwrite((void *)&data, 1, sizeof(chunk_struct), spufp);
|
elems_written += fwrite((void *)&data, 1, sizeof(chunk_struct), spufp);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1249,6 +1250,7 @@ int SNDFileInit(int buffersize)
|
||||||
|
|
||||||
void SNDFileDeInit()
|
void SNDFileDeInit()
|
||||||
{
|
{
|
||||||
|
size_t elems_written;
|
||||||
if (spufp)
|
if (spufp)
|
||||||
{
|
{
|
||||||
long length = ftell(spufp);
|
long length = ftell(spufp);
|
||||||
|
@ -1256,11 +1258,11 @@ void SNDFileDeInit()
|
||||||
// Let's fix the riff chunk size and the data chunk size
|
// Let's fix the riff chunk size and the data chunk size
|
||||||
fseek(spufp, sizeof(waveheader_struct)-0x8, SEEK_SET);
|
fseek(spufp, sizeof(waveheader_struct)-0x8, SEEK_SET);
|
||||||
length -= 0x4;
|
length -= 0x4;
|
||||||
fwrite((void *)&length, 1, 4, spufp);
|
elems_written += fwrite((void *)&length, 1, 4, spufp);
|
||||||
|
|
||||||
fseek(spufp, sizeof(waveheader_struct)+sizeof(fmt_struct)+0x4, SEEK_SET);
|
fseek(spufp, sizeof(waveheader_struct)+sizeof(fmt_struct)+0x4, SEEK_SET);
|
||||||
length -= sizeof(waveheader_struct)+sizeof(fmt_struct);
|
length -= sizeof(waveheader_struct)+sizeof(fmt_struct);
|
||||||
fwrite((void *)&length, 1, 4, spufp);
|
elems_written += fwrite((void *)&length, 1, 4, spufp);
|
||||||
fclose(spufp);
|
fclose(spufp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1269,8 +1271,9 @@ void SNDFileDeInit()
|
||||||
|
|
||||||
void SNDFileUpdateAudio(s16 *buffer, u32 num_samples)
|
void SNDFileUpdateAudio(s16 *buffer, u32 num_samples)
|
||||||
{
|
{
|
||||||
|
size_t elems_written;
|
||||||
if (spufp)
|
if (spufp)
|
||||||
fwrite((void *)buffer, num_samples*2, 2, spufp);
|
elems_written = fwrite((void *)buffer, num_samples*2, 2, spufp);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -6687,7 +6687,7 @@ TEMPLATE static u32 FASTCALL OP_LDMDB_W()
|
||||||
TEMPLATE static u32 FASTCALL OP_LDMIA2()
|
TEMPLATE static u32 FASTCALL OP_LDMIA2()
|
||||||
{
|
{
|
||||||
u32 i = cpu->instruction;
|
u32 i = cpu->instruction;
|
||||||
u32 oldmode;
|
u32 oldmode = 0;
|
||||||
|
|
||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
|
|
||||||
|
@ -6744,7 +6744,7 @@ TEMPLATE static u32 FASTCALL OP_LDMIA2()
|
||||||
TEMPLATE static u32 FASTCALL OP_LDMIB2()
|
TEMPLATE static u32 FASTCALL OP_LDMIB2()
|
||||||
{
|
{
|
||||||
u32 i = cpu->instruction;
|
u32 i = cpu->instruction;
|
||||||
u32 oldmode;
|
u32 oldmode = 0;
|
||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
|
|
||||||
u32 start = cpu->R[REG_POS(i,16)];
|
u32 start = cpu->R[REG_POS(i,16)];
|
||||||
|
@ -6803,7 +6803,7 @@ TEMPLATE static u32 FASTCALL OP_LDMDA2()
|
||||||
{
|
{
|
||||||
u32 i = cpu->instruction;
|
u32 i = cpu->instruction;
|
||||||
|
|
||||||
u32 oldmode;
|
u32 oldmode = 0;
|
||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
u32 * registres;
|
u32 * registres;
|
||||||
u32 * waitState;
|
u32 * waitState;
|
||||||
|
@ -6866,7 +6866,7 @@ TEMPLATE static u32 FASTCALL OP_LDMDB2()
|
||||||
{
|
{
|
||||||
u32 i = cpu->instruction;
|
u32 i = cpu->instruction;
|
||||||
|
|
||||||
u32 oldmode;
|
u32 oldmode = 0;
|
||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
u32 * registres;
|
u32 * registres;
|
||||||
u32 * waitState;
|
u32 * waitState;
|
||||||
|
@ -6928,7 +6928,7 @@ TEMPLATE static u32 FASTCALL OP_LDMIA2_W()
|
||||||
u32 i = cpu->instruction;
|
u32 i = cpu->instruction;
|
||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
|
|
||||||
u32 oldmode;
|
u32 oldmode = 0;
|
||||||
u32 start = cpu->R[REG_POS(i,16)];
|
u32 start = cpu->R[REG_POS(i,16)];
|
||||||
u32 * registres;
|
u32 * registres;
|
||||||
u32 * waitState;
|
u32 * waitState;
|
||||||
|
@ -6985,7 +6985,7 @@ TEMPLATE static u32 FASTCALL OP_LDMIB2_W()
|
||||||
u32 i = cpu->instruction;
|
u32 i = cpu->instruction;
|
||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
|
|
||||||
u32 oldmode;
|
u32 oldmode = 0;
|
||||||
u32 start = cpu->R[REG_POS(i,16)];
|
u32 start = cpu->R[REG_POS(i,16)];
|
||||||
u32 * registres;
|
u32 * registres;
|
||||||
u32 * waitState;
|
u32 * waitState;
|
||||||
|
@ -7044,7 +7044,7 @@ TEMPLATE static u32 FASTCALL OP_LDMDA2_W()
|
||||||
u32 i = cpu->instruction;
|
u32 i = cpu->instruction;
|
||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
|
|
||||||
u32 oldmode;
|
u32 oldmode = 0;
|
||||||
u32 start = cpu->R[REG_POS(i,16)];
|
u32 start = cpu->R[REG_POS(i,16)];
|
||||||
u32 * registres;
|
u32 * registres;
|
||||||
u32 * waitState;
|
u32 * waitState;
|
||||||
|
@ -7104,7 +7104,7 @@ TEMPLATE static u32 FASTCALL OP_LDMDB2_W()
|
||||||
u32 i = cpu->instruction;
|
u32 i = cpu->instruction;
|
||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
|
|
||||||
u32 oldmode;
|
u32 oldmode = 0;
|
||||||
u32 start = cpu->R[REG_POS(i,16)];
|
u32 start = cpu->R[REG_POS(i,16)];
|
||||||
u32 * registres;
|
u32 * registres;
|
||||||
u32 * waitState;
|
u32 * waitState;
|
||||||
|
|
|
@ -589,6 +589,7 @@ static void resolve_path(int dirent) {
|
||||||
/* Read from a file using a 512 byte buffer */
|
/* Read from a file using a 512 byte buffer */
|
||||||
static u16 fread_buffered(int dirent,u32 cluster,u32 offset) {
|
static u16 fread_buffered(int dirent,u32 cluster,u32 offset) {
|
||||||
char fname[2*NAME_LEN+EXT_LEN];
|
char fname[2*NAME_LEN+EXT_LEN];
|
||||||
|
size_t elems_read = 0;
|
||||||
|
|
||||||
offset += cluster*512*SECPERCLUS;
|
offset += cluster*512*SECPERCLUS;
|
||||||
|
|
||||||
|
@ -601,7 +602,7 @@ static u16 fread_buffered(int dirent,u32 cluster,u32 offset) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
fseek(hFile, offset, SEEK_SET);
|
fseek(hFile, offset, SEEK_SET);
|
||||||
fread(&freadBuffer, 1, 512, hFile);
|
elems_read += fread(&freadBuffer, 1, 512, hFile);
|
||||||
bufferStart = offset;
|
bufferStart = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -622,7 +623,7 @@ static u16 fread_buffered(int dirent,u32 cluster,u32 offset) {
|
||||||
if (!hFile) return 0;
|
if (!hFile) return 0;
|
||||||
bufferStart = offset;
|
bufferStart = offset;
|
||||||
fseek(hFile, offset, SEEK_SET);
|
fseek(hFile, offset, SEEK_SET);
|
||||||
fread(&freadBuffer, 1, 512, hFile);
|
elems_read += fread(&freadBuffer, 1, 512, hFile);
|
||||||
|
|
||||||
bufferStart = offset;
|
bufferStart = offset;
|
||||||
activeDirEnt = dirent;
|
activeDirEnt = dirent;
|
||||||
|
@ -635,6 +636,7 @@ static u16 fread_buffered(int dirent,u32 cluster,u32 offset) {
|
||||||
unsigned int
|
unsigned int
|
||||||
cflash_read(unsigned int address) {
|
cflash_read(unsigned int address) {
|
||||||
unsigned int ret_value = 0;
|
unsigned int ret_value = 0;
|
||||||
|
size_t elems_read;
|
||||||
#if 0 /* used by next if 0 block */
|
#if 0 /* used by next if 0 block */
|
||||||
#define BUFFERED_BLOCK_SIZE 512
|
#define BUFFERED_BLOCK_SIZE 512
|
||||||
static u8 block_buffer[BUFFERED_BLOCK_SIZE];
|
static u8 block_buffer[BUFFERED_BLOCK_SIZE];
|
||||||
|
@ -677,7 +679,7 @@ cflash_read(unsigned int address) {
|
||||||
data[1] = block_buffer[currLBA + 1 - buffered_start_index];
|
data[1] = block_buffer[currLBA + 1 - buffered_start_index];
|
||||||
#else
|
#else
|
||||||
LSEEK_FN( disk_image, currLBA, SEEK_SET);
|
LSEEK_FN( disk_image, currLBA, SEEK_SET);
|
||||||
READ_FN( disk_image, data, 2);
|
elems_read += READ_FN( disk_image, data, 2);
|
||||||
#endif
|
#endif
|
||||||
ret_value = data[1] << 8 |
|
ret_value = data[1] << 8 |
|
||||||
data[0];
|
data[0];
|
||||||
|
@ -697,13 +699,13 @@ cflash_read(unsigned int address) {
|
||||||
ret_value = T1ReadWord(p, currLBA);
|
ret_value = T1ReadWord(p, currLBA);
|
||||||
|
|
||||||
// Reading the FAT
|
// Reading the FAT
|
||||||
} else if ((currLBA >= filesysFAT*512) && (currLBA < filesysRootDir*512)) {
|
} else if (((u32)currLBA >= filesysFAT*512) && ((u32)currLBA < filesysRootDir*512)) {
|
||||||
p = (unsigned char*)&FAT16[0];
|
p = (unsigned char*)&FAT16[0];
|
||||||
ret_value = T1ReadWord(p, currLBA - filesysFAT * 512);
|
ret_value = T1ReadWord(p, currLBA - filesysFAT * 512);
|
||||||
|
|
||||||
// Reading directory entries
|
// Reading directory entries
|
||||||
} else if ((currLBA >= filesysRootDir*512) &&
|
} else if (((u32)currLBA >= filesysRootDir*512) &&
|
||||||
(cluster <= lastDirEntCluster)) {
|
(cluster <= (u32)lastDirEntCluster)) {
|
||||||
cluster3 = ((currLBA - (SECRESV * 512)) / (512 * SECPERCLUS));
|
cluster3 = ((currLBA - (SECRESV * 512)) / (512 * SECPERCLUS));
|
||||||
i = (currLBA-(((cluster3-(filesysRootDir/SECPERCLUS))*SECPERCLUS+filesysRootDir)*512)); //(currLBA - cluster*BYTESPERCLUS);
|
i = (currLBA-(((cluster3-(filesysRootDir/SECPERCLUS))*SECPERCLUS+filesysRootDir)*512)); //(currLBA - cluster*BYTESPERCLUS);
|
||||||
if (i < (dirEntriesInCluster[cluster3]*32)) {
|
if (i < (dirEntriesInCluster[cluster3]*32)) {
|
||||||
|
@ -723,7 +725,7 @@ cflash_read(unsigned int address) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Reading file data
|
// Reading file data
|
||||||
} else if ((cluster2 > lastDirEntCluster) && (cluster2 <= lastFileDataCluster)) { //else if ((cluster>lastDirEntCluster)&&(cluster<=lastFileDataCluster)) {
|
} else if ((cluster2 > (u32)lastDirEntCluster) && (cluster2 <= (u32)lastFileDataCluster)) { //else if ((cluster>lastDirEntCluster)&&(cluster<=lastFileDataCluster)) {
|
||||||
fileLBA = currLBA - (filesysData-32)*512; // 32 = # sectors used for the root entries
|
fileLBA = currLBA - (filesysData-32)*512; // 32 = # sectors used for the root entries
|
||||||
|
|
||||||
// Check if the read is from the currently opened file
|
// Check if the read is from the currently opened file
|
||||||
|
@ -732,7 +734,7 @@ cflash_read(unsigned int address) {
|
||||||
ret_value = fread_buffered(activeDirEnt,cluster-dirEntries[activeDirEnt].startCluster,(fileLBA-fileStartLBA)&(BYTESPERCLUS-1));
|
ret_value = fread_buffered(activeDirEnt,cluster-dirEntries[activeDirEnt].startCluster,(fileLBA-fileStartLBA)&(BYTESPERCLUS-1));
|
||||||
} else {
|
} else {
|
||||||
for (i=0; i<numFiles; i++) {
|
for (i=0; i<numFiles; i++) {
|
||||||
if ((fileLBA>=(dirEntries[i].startCluster*512*SECPERCLUS)) &&
|
if ((fileLBA>=(u32)(dirEntries[i].startCluster*512*SECPERCLUS)) &&
|
||||||
(fileLBA <(dirEntries[i].startCluster*512*SECPERCLUS)+dirEntries[i].fileSize) &&
|
(fileLBA <(dirEntries[i].startCluster*512*SECPERCLUS)+dirEntries[i].fileSize) &&
|
||||||
((dirEntries[i].attrib & (ATTRIB_DIR|ATTRIB_LFN))==0)) {
|
((dirEntries[i].attrib & (ATTRIB_DIR|ATTRIB_LFN))==0)) {
|
||||||
cluster = (fileLBA / (512 * SECPERCLUS));
|
cluster = (fileLBA / (512 * SECPERCLUS));
|
||||||
|
|
|
@ -47,6 +47,8 @@ typedef struct
|
||||||
int WriteBMP(const char *filename,u16 *bmp){
|
int WriteBMP(const char *filename,u16 *bmp){
|
||||||
BmpFileHeader fileheader;
|
BmpFileHeader fileheader;
|
||||||
BmpImageHeader imageheader;
|
BmpImageHeader imageheader;
|
||||||
|
size_t elems_written = 0;
|
||||||
|
|
||||||
fileheader.size = 14;
|
fileheader.size = 14;
|
||||||
fileheader.type = 0x4D42;
|
fileheader.type = 0x4D42;
|
||||||
fileheader.r1 = 0;
|
fileheader.r1 = 0;
|
||||||
|
@ -68,25 +70,23 @@ int WriteBMP(const char *filename,u16 *bmp){
|
||||||
FILE *fichier = fopen(filename,"wb");
|
FILE *fichier = fopen(filename,"wb");
|
||||||
if (!fichier)
|
if (!fichier)
|
||||||
return 0;
|
return 0;
|
||||||
//fwrite(&fileheader, 1, 14, fichier);
|
|
||||||
|
|
||||||
//fwrite(&imageheader, 1, 40, fichier);
|
elems_written += fwrite( &fileheader.type, sizeof(fileheader.type), 1, fichier);
|
||||||
fwrite( &fileheader.type, sizeof(fileheader.type), 1, fichier);
|
elems_written += fwrite( &fileheader.size, sizeof(fileheader.size), 1, fichier);
|
||||||
fwrite( &fileheader.size, sizeof(fileheader.size), 1, fichier);
|
elems_written += fwrite( &fileheader.r1, sizeof(fileheader.r1), 1, fichier);
|
||||||
fwrite( &fileheader.r1, sizeof(fileheader.r1), 1, fichier);
|
elems_written += fwrite( &fileheader.r2, sizeof(fileheader.r2), 1, fichier);
|
||||||
fwrite( &fileheader.r2, sizeof(fileheader.r2), 1, fichier);
|
elems_written += fwrite( &fileheader.data_offset, sizeof(fileheader.data_offset), 1, fichier);
|
||||||
fwrite( &fileheader.data_offset, sizeof(fileheader.data_offset), 1, fichier);
|
elems_written += fwrite( &imageheader.header_size, sizeof(imageheader.header_size), 1, fichier);
|
||||||
fwrite( &imageheader.header_size, sizeof(imageheader.header_size), 1, fichier);
|
elems_written += fwrite( &imageheader.width, sizeof(imageheader.width), 1, fichier);
|
||||||
fwrite( &imageheader.width, sizeof(imageheader.width), 1, fichier);
|
elems_written += fwrite( &imageheader.height, sizeof(imageheader.height), 1, fichier);
|
||||||
fwrite( &imageheader.height, sizeof(imageheader.height), 1, fichier);
|
elems_written += fwrite( &imageheader.r1, sizeof(imageheader.r1), 1, fichier);
|
||||||
fwrite( &imageheader.r1, sizeof(imageheader.r1), 1, fichier);
|
elems_written += fwrite( &imageheader.depth, sizeof(imageheader.depth), 1, fichier);
|
||||||
fwrite( &imageheader.depth, sizeof(imageheader.depth), 1, fichier);
|
elems_written += fwrite( &imageheader.r2, sizeof(imageheader.r2), 1, fichier);
|
||||||
fwrite( &imageheader.r2, sizeof(imageheader.r2), 1, fichier);
|
elems_written += fwrite( &imageheader.size, sizeof(imageheader.size), 1, fichier);
|
||||||
fwrite( &imageheader.size, sizeof(imageheader.size), 1, fichier);
|
elems_written += fwrite( &imageheader.r3, sizeof(imageheader.r3), 1, fichier);
|
||||||
fwrite( &imageheader.r3, sizeof(imageheader.r3), 1, fichier);
|
elems_written += fwrite( &imageheader.r4, sizeof(imageheader.r4), 1, fichier);
|
||||||
fwrite( &imageheader.r4, sizeof(imageheader.r4), 1, fichier);
|
elems_written += fwrite( &imageheader.r5, sizeof(imageheader.r5), 1, fichier);
|
||||||
fwrite( &imageheader.r5, sizeof(imageheader.r5), 1, fichier);
|
elems_written += fwrite( &imageheader.r6, sizeof(imageheader.r6), 1, fichier);
|
||||||
fwrite( &imageheader.r6, sizeof(imageheader.r6), 1, fichier);
|
|
||||||
int i,j;
|
int i,j;
|
||||||
for(j=0;j<192*2;j++)for(i=0;i<256;i++){
|
for(j=0;j<192*2;j++)for(i=0;i<256;i++){
|
||||||
u8 r,g,b;
|
u8 r,g,b;
|
||||||
|
@ -99,9 +99,9 @@ int WriteBMP(const char *filename,u16 *bmp){
|
||||||
r*=255/31;
|
r*=255/31;
|
||||||
g*=255/31;
|
g*=255/31;
|
||||||
b*=255/31;
|
b*=255/31;
|
||||||
fwrite(&r, 1, sizeof(char), fichier);
|
elems_written += fwrite(&r, 1, sizeof(char), fichier);
|
||||||
fwrite(&g, 1, sizeof(char), fichier);
|
elems_written += fwrite(&g, 1, sizeof(char), fichier);
|
||||||
fwrite(&b, 1, sizeof(char), fichier);
|
elems_written += fwrite(&b, 1, sizeof(char), fichier);
|
||||||
}
|
}
|
||||||
fclose(fichier);
|
fclose(fichier);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -98,6 +98,8 @@ void mc_free(memory_chip_t *mc)
|
||||||
|
|
||||||
void mc_reset_com(memory_chip_t *mc)
|
void mc_reset_com(memory_chip_t *mc)
|
||||||
{
|
{
|
||||||
|
size_t elems_written = 0;
|
||||||
|
|
||||||
if (mc->type == MC_TYPE_AUTODETECT && mc->com == BM_CMD_AUTODETECT)
|
if (mc->type == MC_TYPE_AUTODETECT && mc->com == BM_CMD_AUTODETECT)
|
||||||
{
|
{
|
||||||
u32 addr, size;
|
u32 addr, size;
|
||||||
|
@ -175,14 +177,14 @@ void mc_reset_com(memory_chip_t *mc)
|
||||||
|
|
||||||
// Generate file
|
// Generate file
|
||||||
if ((mc->fp = fopen(mc->filename, "wb+")) != NULL)
|
if ((mc->fp = fopen(mc->filename, "wb+")) != NULL)
|
||||||
fwrite((void *)mc->data, 1, mc->size, mc->fp);
|
elems_written += fwrite((void *)mc->data, 1, mc->size, mc->fp);
|
||||||
}
|
}
|
||||||
else if (mc->com == BM_CMD_WRITELOW)
|
else if (mc->com == BM_CMD_WRITELOW)
|
||||||
{
|
{
|
||||||
if (mc->fp)
|
if (mc->fp)
|
||||||
{
|
{
|
||||||
fseek(mc->fp, 0, SEEK_SET);
|
fseek(mc->fp, 0, SEEK_SET);
|
||||||
fwrite((void *)mc->data, 1, mc->size, mc->fp); // fix me
|
elems_written += fwrite((void *)mc->data, 1, mc->size, mc->fp); // fix me
|
||||||
}
|
}
|
||||||
mc->write_enable = FALSE;
|
mc->write_enable = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -202,6 +204,8 @@ void mc_load_file(memory_chip_t *mc, const char* filename)
|
||||||
long size;
|
long size;
|
||||||
int type = -1;
|
int type = -1;
|
||||||
FILE* file = fopen(filename, "rb+");
|
FILE* file = fopen(filename, "rb+");
|
||||||
|
size_t elems_read;
|
||||||
|
|
||||||
if(file == NULL)
|
if(file == NULL)
|
||||||
{
|
{
|
||||||
mc->filename = strdup(filename);
|
mc->filename = strdup(filename);
|
||||||
|
@ -231,9 +235,9 @@ void mc_load_file(memory_chip_t *mc, const char* filename)
|
||||||
mc_realloc(mc, type, size);
|
mc_realloc(mc, type, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size > mc->size)
|
if ((u32)size > mc->size)
|
||||||
size = mc->size;
|
size = mc->size;
|
||||||
fread (mc->data, 1, size, file);
|
elems_read = fread (mc->data, 1, size, file);
|
||||||
mc->fp = file;
|
mc->fp = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,6 +247,7 @@ int mc_load_duc(memory_chip_t *mc, const char* filename)
|
||||||
int type = -1;
|
int type = -1;
|
||||||
char id[16];
|
char id[16];
|
||||||
FILE* file = fopen(filename, "rb");
|
FILE* file = fopen(filename, "rb");
|
||||||
|
size_t elems_read = 0;
|
||||||
if(file == NULL)
|
if(file == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -251,7 +256,7 @@ int mc_load_duc(memory_chip_t *mc, const char* filename)
|
||||||
fseek(file, 0, SEEK_SET);
|
fseek(file, 0, SEEK_SET);
|
||||||
|
|
||||||
// Make sure we really have the right file
|
// Make sure we really have the right file
|
||||||
fread((void *)id, sizeof(char), 16, file);
|
elems_read += fread((void *)id, sizeof(char), 16, file);
|
||||||
|
|
||||||
if (memcmp(id, "ARDS000000000001", 16) != 0)
|
if (memcmp(id, "ARDS000000000001", 16) != 0)
|
||||||
{
|
{
|
||||||
|
@ -279,11 +284,11 @@ int mc_load_duc(memory_chip_t *mc, const char* filename)
|
||||||
mc_realloc(mc, type, size);
|
mc_realloc(mc, type, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size > mc->size)
|
if ((u32)size > mc->size)
|
||||||
size = mc->size;
|
size = mc->size;
|
||||||
// Skip the rest of the header since we don't need it
|
// Skip the rest of the header since we don't need it
|
||||||
fseek(file, 500, SEEK_SET);
|
fseek(file, 500, SEEK_SET);
|
||||||
fread (mc->data, 1, size, file);
|
elems_read += fread (mc->data, 1, size, file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -229,15 +229,15 @@ SFORMAT SF_MMU[]={
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static void mmu_savestate(std::ostream* os)
|
static void mmu_savestate(std::ostream* os)
|
||||||
{
|
{
|
||||||
//version
|
//version
|
||||||
write32le(0,os);
|
write32le(0,os);
|
||||||
|
|
||||||
write32le(MMU.bupmem.size,os);
|
write32le(MMU.bupmem.size,os);
|
||||||
os->write((char*)MMU.bupmem.data,MMU.bupmem.size);
|
os->write((char*)MMU.bupmem.data,MMU.bupmem.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool mmu_loadstate(std::istream* is)
|
static bool mmu_loadstate(std::istream* is)
|
||||||
{
|
{
|
||||||
//read version
|
//read version
|
||||||
|
@ -257,7 +257,7 @@ static bool mmu_loadstate(std::istream* is)
|
||||||
|
|
||||||
static void cp15_saveone(armcp15_t *cp15, std::ostream* os)
|
static void cp15_saveone(armcp15_t *cp15, std::ostream* os)
|
||||||
{
|
{
|
||||||
write32le(cp15->IDCode,os);
|
write32le(cp15->IDCode,os);
|
||||||
write32le(cp15->cacheType,os);
|
write32le(cp15->cacheType,os);
|
||||||
write32le(cp15->TCMSize,os);
|
write32le(cp15->TCMSize,os);
|
||||||
write32le(cp15->ctrl,os);
|
write32le(cp15->ctrl,os);
|
||||||
|
@ -283,7 +283,7 @@ static void cp15_saveone(armcp15_t *cp15, std::ostream* os)
|
||||||
write32le(cp15->processID,os);
|
write32le(cp15->processID,os);
|
||||||
write32le(cp15->RAM_TAG,os);
|
write32le(cp15->RAM_TAG,os);
|
||||||
write32le(cp15->testState,os);
|
write32le(cp15->testState,os);
|
||||||
write32le(cp15->cacheDbg,os);
|
write32le(cp15->cacheDbg,os);
|
||||||
for(int i=0;i<8;i++) write32le(cp15->regionWriteMask_USR[i],os);
|
for(int i=0;i<8;i++) write32le(cp15->regionWriteMask_USR[i],os);
|
||||||
for(int i=0;i<8;i++) write32le(cp15->regionWriteMask_SYS[i],os);
|
for(int i=0;i<8;i++) write32le(cp15->regionWriteMask_SYS[i],os);
|
||||||
for(int i=0;i<8;i++) write32le(cp15->regionReadMask_USR[i],os);
|
for(int i=0;i<8;i++) write32le(cp15->regionReadMask_USR[i],os);
|
||||||
|
@ -298,18 +298,18 @@ static void cp15_saveone(armcp15_t *cp15, std::ostream* os)
|
||||||
for(int i=0;i<8;i++) write32le(cp15->regionExecuteSet_SYS[i],os);
|
for(int i=0;i<8;i++) write32le(cp15->regionExecuteSet_SYS[i],os);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cp15_savestate(std::ostream* os)
|
static void cp15_savestate(std::ostream* os)
|
||||||
{
|
{
|
||||||
//version
|
//version
|
||||||
write32le(0,os);
|
write32le(0,os);
|
||||||
|
|
||||||
cp15_saveone((armcp15_t *)NDS_ARM9.coproc[15],os);
|
cp15_saveone((armcp15_t *)NDS_ARM9.coproc[15],os);
|
||||||
cp15_saveone((armcp15_t *)NDS_ARM7.coproc[15],os);
|
cp15_saveone((armcp15_t *)NDS_ARM7.coproc[15],os);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cp15_loadone(armcp15_t *cp15, std::istream* is)
|
static bool cp15_loadone(armcp15_t *cp15, std::istream* is)
|
||||||
{
|
{
|
||||||
if(!read32le(&cp15->IDCode,is)) return false;
|
if(!read32le(&cp15->IDCode,is)) return false;
|
||||||
if(!read32le(&cp15->cacheType,is)) return false;
|
if(!read32le(&cp15->cacheType,is)) return false;
|
||||||
if(!read32le(&cp15->TCMSize,is)) return false;
|
if(!read32le(&cp15->TCMSize,is)) return false;
|
||||||
if(!read32le(&cp15->ctrl,is)) return false;
|
if(!read32le(&cp15->ctrl,is)) return false;
|
||||||
|
@ -335,7 +335,7 @@ static bool cp15_loadone(armcp15_t *cp15, std::istream* is)
|
||||||
if(!read32le(&cp15->processID,is)) return false;
|
if(!read32le(&cp15->processID,is)) return false;
|
||||||
if(!read32le(&cp15->RAM_TAG,is)) return false;
|
if(!read32le(&cp15->RAM_TAG,is)) return false;
|
||||||
if(!read32le(&cp15->testState,is)) return false;
|
if(!read32le(&cp15->testState,is)) return false;
|
||||||
if(!read32le(&cp15->cacheDbg,is)) return false;
|
if(!read32le(&cp15->cacheDbg,is)) return false;
|
||||||
for(int i=0;i<8;i++) if(!read32le(&cp15->regionWriteMask_USR[i],is)) return false;
|
for(int i=0;i<8;i++) if(!read32le(&cp15->regionWriteMask_USR[i],is)) return false;
|
||||||
for(int i=0;i<8;i++) if(!read32le(&cp15->regionWriteMask_SYS[i],is)) return false;
|
for(int i=0;i<8;i++) if(!read32le(&cp15->regionWriteMask_SYS[i],is)) return false;
|
||||||
for(int i=0;i<8;i++) if(!read32le(&cp15->regionReadMask_USR[i],is)) return false;
|
for(int i=0;i<8;i++) if(!read32le(&cp15->regionReadMask_USR[i],is)) return false;
|
||||||
|
@ -347,11 +347,11 @@ static bool cp15_loadone(armcp15_t *cp15, std::istream* is)
|
||||||
for(int i=0;i<8;i++) if(!read32le(&cp15->regionReadSet_USR[i],is)) return false;
|
for(int i=0;i<8;i++) if(!read32le(&cp15->regionReadSet_USR[i],is)) return false;
|
||||||
for(int i=0;i<8;i++) if(!read32le(&cp15->regionReadSet_SYS[i],is)) return false;
|
for(int i=0;i<8;i++) if(!read32le(&cp15->regionReadSet_SYS[i],is)) return false;
|
||||||
for(int i=0;i<8;i++) if(!read32le(&cp15->regionExecuteSet_USR[i],is)) return false;
|
for(int i=0;i<8;i++) if(!read32le(&cp15->regionExecuteSet_USR[i],is)) return false;
|
||||||
for(int i=0;i<8;i++) if(!read32le(&cp15->regionExecuteSet_SYS[i],is)) return false;
|
for(int i=0;i<8;i++) if(!read32le(&cp15->regionExecuteSet_SYS[i],is)) return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cp15_loadstate(std::istream* is)
|
static bool cp15_loadstate(std::istream* is)
|
||||||
{
|
{
|
||||||
//read version
|
//read version
|
||||||
|
@ -454,12 +454,13 @@ void sram_write (u32 address, u8 value) {
|
||||||
int sram_load (const char *file_name) {
|
int sram_load (const char *file_name) {
|
||||||
|
|
||||||
FILE *file;
|
FILE *file;
|
||||||
|
size_t elems_read;
|
||||||
|
|
||||||
file = fopen ( file_name, "rb" );
|
file = fopen ( file_name, "rb" );
|
||||||
if( file == NULL )
|
if( file == NULL )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fread ( MMU.CART_RAM, SRAM_SIZE, 1, file );
|
elems_read = fread ( MMU.CART_RAM, SRAM_SIZE, 1, file );
|
||||||
|
|
||||||
fclose ( file );
|
fclose ( file );
|
||||||
|
|
||||||
|
@ -470,12 +471,13 @@ int sram_load (const char *file_name) {
|
||||||
int sram_save (const char *file_name) {
|
int sram_save (const char *file_name) {
|
||||||
|
|
||||||
FILE *file;
|
FILE *file;
|
||||||
|
size_t elems_written;
|
||||||
|
|
||||||
file = fopen ( file_name, "wb" );
|
file = fopen ( file_name, "wb" );
|
||||||
if( file == NULL )
|
if( file == NULL )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fwrite ( MMU.CART_RAM, SRAM_SIZE, 1, file );
|
elems_written = fwrite ( MMU.CART_RAM, SRAM_SIZE, 1, file );
|
||||||
|
|
||||||
fclose ( file );
|
fclose ( file );
|
||||||
|
|
||||||
|
@ -687,6 +689,7 @@ static bool savestate_save(std::ostream* outstream, int compressionLevel)
|
||||||
bool savestate_save (const char *file_name)
|
bool savestate_save (const char *file_name)
|
||||||
{
|
{
|
||||||
memorystream ms;
|
memorystream ms;
|
||||||
|
size_t elems_written;
|
||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
if(!savestate_save(&ms, Z_DEFAULT_COMPRESSION))
|
if(!savestate_save(&ms, Z_DEFAULT_COMPRESSION))
|
||||||
#else
|
#else
|
||||||
|
@ -697,9 +700,9 @@ bool savestate_save (const char *file_name)
|
||||||
FILE* file = fopen(file_name,"wb");
|
FILE* file = fopen(file_name,"wb");
|
||||||
if(file)
|
if(file)
|
||||||
{
|
{
|
||||||
fwrite(ms.buf(),1,ms.size(),file);
|
elems_written = fwrite(ms.buf(),1,ms.size(),file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
return true;
|
return (elems_written == ms.size());
|
||||||
} else return false;
|
} else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue