Browse Source

sys: don't read files on the stack; either we'll overflow or we'll be slow.

legacy
Sam Hocevar sam 12 years ago
parent
commit
e041ea7602
1 changed files with 7 additions and 15 deletions
  1. +7
    -15
      src/sys/file.cpp

+ 7
- 15
src/sys/file.cpp View File

@@ -19,17 +19,6 @@


#include "core.h" #include "core.h"


/* HACK: use fopen() for now so that we get FIOS. */
#if 0//__CELLOS_LV2__
extern "C" {
# include <stdio.h>
}
# undef __CELLOS_LV2__
# define HAVE_STDIO_H 1
# undef BUFSIZ
# define BUFSIZ 1024
#endif

namespace lol namespace lol
{ {


@@ -81,19 +70,22 @@ class FileData


String ReadString() String ReadString()
{ {
Array<uint8_t> buf;
buf.Resize(BUFSIZ);
String ret; String ret;
while (IsValid()) while (IsValid())
{ {
/* XXX: BUFSIZ would overflow the stack here */
uint8_t buf[1024];
int done = Read(buf, 1024);
int done = Read(&buf[0], buf.Count());


if (done <= 0) if (done <= 0)
break; break;


int oldsize = ret.Count(); int oldsize = ret.Count();
ret.Resize(oldsize + done); ret.Resize(oldsize + done);
memcpy(&ret[oldsize], buf, done);
memcpy(&ret[oldsize], &buf[0], done);

/* XXX: we could resize the buffer here
* buf.Resize(buf.Count() * 3 / 2); */
} }
return ret; return ret;
} }


Loading…
Cancel
Save