/* Function: al_create_path */ ALLEGRO_PATH *al_create_path(const char *str) { ALLEGRO_PATH *path; path = _AL_MALLOC(sizeof(ALLEGRO_PATH)); if (!path) return NULL; path->drive = al_ustr_new(""); path->filename = al_ustr_new(""); _al_vector_init(&path->segments, sizeof(ALLEGRO_USTR *)); path->basename = al_ustr_new(""); path->full_string = al_ustr_new(""); if (str != NULL) { ALLEGRO_USTR *copy = al_ustr_new(str); replace_backslashes(copy); if (!parse_path_string(copy, path)) { al_destroy_path(path); path = NULL; } al_ustr_free(copy); } return path; }
static bool add_files_to_pak(const char *zipfile, const char *rootdir, const char *dir, const char *pat, bool compress, uint8_t platform) { CSimpleGlobTempl<char> glob(SG_GLOB_ONLYFILE); char *pattern = am_format("%s%c%s", dir, AM_PATH_SEP, pat); glob.Add(pattern); free(pattern); for (int n = 0; n < glob.FileCount(); ++n) { char *file = glob.File(n); size_t len; void *buf = am_read_file(file, &len); if (buf == NULL) return false; replace_backslashes(file); char *name = file + strlen(rootdir) + 1; if (!mz_zip_add_mem_to_archive_file_in_place(zipfile, name, buf, len, "", 0, compress ? MZ_BEST_COMPRESSION : 0, 0100644, platform)) { free(buf); fprintf(stderr, "Error: failed to add %s to archive\n", file); return false; } free(buf); printf("+ %s\n", name); } return true; }