X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=06ded93686bbe9b672a182bd6ff86263921fd60e;hb=b5793d558cadada689358997736a16bcf346a462;hp=7ac8d566362aef4a052b16909e9d1a3b3f92e963;hpb=9b34554bd70ce56386dd056e3a5eea96e5cabbd0;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 7ac8d566..06ded936 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -696,45 +696,6 @@ char *getBasePath(char *filename) return basepath; } -static char *getProgramMainDataPath(char *command_filename, char *base_path) -{ - /* check if the program's main data base directory is configured */ - if (!strEqual(base_path, ".")) - return base_path; - - /* if the program is configured to start from current directory (default), - determine program package directory from program binary (some versions - of KDE/Konqueror and Mac OS X (especially "Mavericks") apparently do not - set the current working directory to the program package directory) */ - char *main_data_path = getBasePath(command_filename); - -#if defined(PLATFORM_MACOSX) - if (strSuffix(main_data_path, MAC_APP_BINARY_SUBDIR)) - { - char *main_data_path_old = main_data_path; - - // cut relative path to Mac OS X application binary directory from path - main_data_path[strlen(main_data_path) - - strlen(MAC_APP_BINARY_SUBDIR)] = '\0'; - - // cut trailing path separator from path (but not if path is root directory) - if (strSuffix(main_data_path, "/") && !strEqual(main_data_path, "/")) - main_data_path[strlen(main_data_path) - 1] = '\0'; - - // replace empty path with current directory - if (strEqual(main_data_path, "")) - main_data_path = "."; - - // add relative path to Mac OS X application resources directory to path - main_data_path = getPath2(main_data_path, MAC_APP_FILES_SUBDIR); - - free(main_data_path_old); - } -#endif - - return main_data_path; -} - /* ------------------------------------------------------------------------- */ /* various string functions */ @@ -2174,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)); @@ -2256,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) @@ -2325,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 */