static char *file2memory(FILE *file, long *size)
{
char buffer[1024];
char *string=NULL;
char *newstring=NULL;
long len=0;
long stringlen=0;
if(file) {
while((len = fread(buffer, 1, sizeof(buffer), file))) {
if(string) {
newstring = (char*)realloc(string, len+stringlen+1);
if(newstring)
string = newstring;
else
break; /* no more strings attached! :-) */
}
else
string = (char*)malloc(len+1);
memcpy(&string[stringlen], buffer, len);
stringlen+=len;
}
if (string) {
string[stringlen] = 0;
}
*size = stringlen;
return string;
}
else
return NULL; /* no string */
}
static bool fillBufferWithContentsOfFile(const UString& fileName, Vector<char>& buffer)
{
FILE* f = fopen(fileName.UTF8String().c_str(), "r");
if (!f) {
fprintf(stderr, "Could not open file: %s/n", fileName.UTF8String().c_str());
return false;
}
size_t buffer_size = 0;
size_t buffer_capacity = 1024;
buffer.resize(buffer_capacity);
while (!feof(f) && !ferror(f)) {
buffer_size += fread(buffer.data() + buffer_size, 1, buffer_capacity - buffer_size, f);
if (buffer_size == buffer_capacity) { // guarantees space for trailing '/0'
buffer_capacity *= 2;
buffer.resize(buffer_capacity);
}
}
fclose(f);
buffer[buffer_size] = '/0';
return true;
}