X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=d31ed248b7d4c9322da95812042ab6fcf14716d0;hb=969000b44b047ef2d77619bd3882a3f09eb1787d;hp=701d38fb83b3b1c246aa375634f504538b9f0452;hpb=3742724070e341b044fdfedfd0bb5780d64fb554;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 701d38fb..d31ed248 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -1442,28 +1442,28 @@ int putFileChunk(FILE *file, char *chunk_name, int chunk_size, int getFileVersion(File *file) { + int version_super = getByteFromFile(file); int version_major = getByteFromFile(file); int version_minor = getByteFromFile(file); int version_patch = getByteFromFile(file); - int version_build = getByteFromFile(file); - return VERSION_IDENT(version_major, version_minor, version_patch, - version_build); + return VERSION_IDENT(version_super, version_major, version_minor, + version_patch); } int putFileVersion(FILE *file, int version) { if (file != NULL) { + int version_super = VERSION_SUPER(version); int version_major = VERSION_MAJOR(version); int version_minor = VERSION_MINOR(version); int version_patch = VERSION_PATCH(version); - int version_build = VERSION_BUILD(version); + fputc(version_super, file); fputc(version_major, file); fputc(version_minor, file); fputc(version_patch, file); - fputc(version_build, file); } return 4; @@ -2135,6 +2135,8 @@ void dumpList(ListNode *node_first) /* functions for file handling */ /* ------------------------------------------------------------------------- */ +#define MAX_BUFFER_SIZE 4096 + File *openFile(char *filename, char *mode) { File *file = checked_calloc(sizeof(File)); @@ -2217,6 +2219,11 @@ size_t readFile(File *file, void *buffer, size_t item_size, size_t num_items) return fread(buffer, item_size, num_items, file->file); } +size_t writeFile(File *file, void *buffer, size_t item_size, size_t num_items) +{ + return fwrite(buffer, item_size, num_items, file->file); +} + int seekFile(File *file, long offset, int whence) { #if defined(PLATFORM_ANDROID) @@ -2286,6 +2293,36 @@ char *getStringFromFile(File *file, char *line, int size) return fgets(line, size, file->file); } +int copyFile(char *filename_from, char *filename_to) +{ + File *file_from, *file_to; + + if ((file_from = openFile(filename_from, MODE_READ)) == NULL) + { + return -1; + } + + if ((file_to = openFile(filename_to, MODE_WRITE)) == NULL) + { + closeFile(file_from); + + return -1; + } + + while (!checkEndOfFile(file_from)) + { + byte buffer[MAX_BUFFER_SIZE]; + size_t bytes_read = readFile(file_from, buffer, 1, MAX_BUFFER_SIZE); + + writeFile(file_to, buffer, 1, bytes_read); + } + + closeFile(file_from); + closeFile(file_to); + + return 0; +} + /* ------------------------------------------------------------------------- */ /* functions for directory handling */