DDraceNetwork Documentation
Loading...
Searching...
No Matches
config_common.h
Go to the documentation of this file.
1#include <base/logger.h>
2#include <base/system.h>
3
4#include <engine/storage.h>
5
11
12inline void ProcessItem(const char *pItemName, IStorage *pStorage)
13{
14 char aConfig[2048];
15
16 size_t Len = (size_t)str_length(pItemName) + 1; // including '\0'
17 if(Len > sizeof(aConfig))
18 {
19 dbg_msg("config_common", "can't process overlong filename '%s'", pItemName);
20 return;
21 }
22
23 if(!str_endswith(pItemName, ".map"))
24 {
25 dbg_msg("config_common", "can't process non-map file '%s'", pItemName);
26 return;
27 }
28
29 str_copy(aConfig, pItemName, sizeof(aConfig));
30 aConfig[Len - sizeof(".map")] = 0;
31 str_append(aConfig, ".cfg");
32 dbg_msg("config_common", "processing '%s'", pItemName);
33 Process(pStorage, pItemName, aConfig);
34}
35
36static int ListdirCallback(const char *pItemName, int IsDir, int StorageType, void *pUser)
37{
38 if(!IsDir)
39 {
40 SListDirectoryContext Context = *((SListDirectoryContext *)pUser);
41 char aName[2048];
42 str_format(aName, sizeof(aName), "%s/%s", Context.m_pPath, pItemName);
43 ProcessItem(aName, Context.m_pStorage);
44 }
45
46 return 0;
47}
48
49int main(int argc, const char **argv) // NOLINT(misc-definitions-in-headers)
50{
51 CCmdlineFix CmdlineFix(&argc, &argv);
53
54 std::unique_ptr<IStorage> pStorage = CreateLocalStorage();
55 if(!pStorage)
56 {
57 log_error("config_common", "Error creating local storage");
58 return -1;
59 }
60
61 if(argc == 1)
62 {
63 dbg_msg("usage", "%s FILE1 [ FILE2... ]", argv[0]);
64 dbg_msg("usage", "%s DIRECTORY", argv[0]);
65 return -1;
66 }
67 else if(argc == 2 && fs_is_dir(argv[1]))
68 {
69 SListDirectoryContext Context = {argv[1], pStorage.get()};
70 pStorage->ListDirectory(IStorage::TYPE_ALL, argv[1], ListdirCallback, &Context);
71 }
72
73 for(int i = 1; i < argc; i++)
74 {
75 ProcessItem(argv[i], pStorage.get());
76 }
77 return 0;
78}
Definition system.h:1625
Definition storage.h:21
@ TYPE_ALL
Definition storage.h:27
int main(int argc, const char **argv)
Definition config_common.h:49
void ProcessItem(const char *pItemName, IStorage *pStorage)
Definition config_common.h:12
static int ListdirCallback(const char *pItemName, int IsDir, int StorageType, void *pUser)
Definition config_common.h:36
static void Process(IStorage *pStorage, const char *pMapName, const char *pConfigName)
Definition config_retrieve.cpp:8
void dbg_msg(const char *sys, const char *fmt,...)
Definition dbg.cpp:57
int fs_is_dir(const char *path)
Definition system.cpp:2437
void log_set_global_logger_default()
Definition log.cpp:43
int str_length(const char *str)
Definition str.cpp:40
void str_append(char *dst, const char *src, int dst_size)
Definition str.cpp:13
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:6
#define log_error(sys,...)
Definition log.h:23
std::unique_ptr< IStorage > CreateLocalStorage()
Definition storage.cpp:943
const char * str_endswith(const char *str, const char *suffix)
Definition str.cpp:382
Definition config_common.h:7
const char * m_pPath
Definition config_common.h:8
IStorage * m_pStorage
Definition config_common.h:9
#define str_format
Definition system.cpp:2794