bool CampaignEntryTryLoad( CampaignEntry *entry, const char *path, campaign_mode_e mode) { char *buf; int numMissions; if (!IsCampaignOK(path, &buf, &numMissions)) { return false; } // cap length of title size_t maxLen = 70; if (strlen(buf) > maxLen) { buf[maxLen] = '\0'; } char title[256]; sprintf(title, "%s (%d)", buf, numMissions); CampaignEntryInit(entry, title, mode); CSTRDUP(entry->Filename, PathGetBasename(path)); CSTRDUP(entry->Path, path); entry->IsBuiltin = false; entry->NumMissions = numMissions; CFREE(buf); return true; }
bool CampaignEntryTryLoad( CampaignEntry *entry, const char *path, GameMode mode) { char *buf; int numMissions; if (!IsCampaignOK(path, &buf, &numMissions)) { return false; } // cap length of title size_t maxLen = 70; if (strlen(buf) > maxLen) { buf[maxLen] = '\0'; } char title[256]; sprintf(title, "%s (%d)", buf, numMissions); CampaignEntryInit(entry, title, mode); CSTRDUP(entry->Filename, PathGetBasename(path)); // Get relative path for the campaign entry, so when we transmit it to // network clients they can load it regardless of install path char pathBuf[CDOGS_PATH_MAX]; RelPathFromCWD(pathBuf, path); CSTRDUP(entry->Path, pathBuf); entry->NumMissions = numMissions; CFREE(buf); return true; }
// Note: includes trailing slash void PathGetDirname(char *buf, const char *path) { const char *basename = PathGetBasename(path); if (basename == path) { strcpy(buf, ""); } else { strncpy(buf, path, basename - path); buf[basename - path] = '\0'; } }
void PathGetBasenameWithoutExtension(char *buf, const char *path) { const char *basename = PathGetBasename(path); PathGetWithoutExtension(buf, basename); }