/* This file is part of actube. actube is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. actube is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with actube. If not, see . */ /** * @file * @brief implents cw_filename **/ #include #include #include "file.h" /** * @brief Build full pathname from path, filename and extension * @param path Path * @param name Filename * @param ext Extension * @return a pointer to the create filename which has to be * released using free. */ char *cw_filename(const char *path, const char *name, const char *ext) { int name_len; int ext_len; int size = 0; int path_len; char c; char *result; char *slash = ""; path_len = strlen(path); if (path_len > 0) { c = path[path_len - 1]; if (!strchr(CW_FILE_PATH_DELIMITERS, c)) { path_len++; slash = "/"; } } name_len = strlen(name); if (ext != NULL) { if (ext[0] == '.') { ext++; } ext_len = strlen(ext); } else ext_len = -1; size = (path_len) + name_len + (ext_len + 1) + 1; result = malloc(size); if (!result) return NULL; strncpy(result, path, path_len); result[path_len] = 0; strcat(result, slash); strcat(result, name); if (ext) { strcat(result, "."); strcat(result, ext); } return result; }