@@ -45,15 +45,25 @@ static struct sr_module_dep unsolved_deps;
45
45
type == MOD_TYPE_AAA ? "aaa module" : \
46
46
"module")
47
47
48
+
48
49
module_dependency_t * alloc_module_dep (enum module_type mod_type , char * mod_name ,
49
50
enum dep_type dep_type )
50
51
{
52
+ return _alloc_module_dep (mod_type , mod_name , dep_type , MOD_TYPE_NULL );
53
+ }
54
+
55
+
56
+ module_dependency_t * _alloc_module_dep (enum module_type mod_type , char * mod_name ,
57
+ enum dep_type dep_type , ... /* , MOD_TYPE_NULL */ )
58
+ {
59
+ va_list ap ;
51
60
module_dependency_t * md ;
61
+ int ndeps = 1 ;
52
62
53
- /* also allocate a zeroed entry in the end */
63
+ /* always keep a zeroed entry at the end */
54
64
md = pkg_malloc (2 * sizeof * md );
55
65
if (!md ) {
56
- LM_ERR ("out of pkg \n" );
66
+ LM_ERR ("oom \n" );
57
67
return NULL ;
58
68
}
59
69
@@ -62,9 +72,32 @@ module_dependency_t *alloc_module_dep(enum module_type mod_type, char *mod_name,
62
72
md -> mod_name = mod_name ;
63
73
md -> type = dep_type ;
64
74
75
+ va_start (ap , dep_type );
76
+
77
+ for (;;) {
78
+ mod_type = va_arg (ap , enum module_type );
79
+ if (mod_type == MOD_TYPE_NULL )
80
+ break ;
81
+
82
+ ndeps ++ ;
83
+
84
+ md = pkg_realloc (md , (ndeps + 1 ) * sizeof * md );
85
+ if (!md ) {
86
+ LM_ERR ("oom\n" );
87
+ return NULL ;
88
+ }
89
+ memset (& md [ndeps ], 0 , sizeof * md );
90
+
91
+ md [ndeps - 1 ].mod_type = mod_type ;
92
+ md [ndeps - 1 ].mod_name = va_arg (ap , char * );
93
+ md [ndeps - 1 ].type = va_arg (ap , enum dep_type );
94
+ }
95
+
96
+ va_end (ap );
65
97
return md ;
66
98
}
67
99
100
+
68
101
module_dependency_t * get_deps_sqldb_url (param_export_t * param )
69
102
{
70
103
char * db_url = * (char * * )param -> param_pointer ;
@@ -78,6 +111,7 @@ module_dependency_t *get_deps_sqldb_url(param_export_t *param)
78
111
return alloc_module_dep (MOD_TYPE_SQLDB , NULL , DEP_WARN );
79
112
}
80
113
114
+
81
115
module_dependency_t * get_deps_cachedb_url (param_export_t * param )
82
116
{
83
117
char * cdb_url = * (char * * )param -> param_pointer ;
@@ -88,6 +122,7 @@ module_dependency_t *get_deps_cachedb_url(param_export_t *param)
88
122
return alloc_module_dep (MOD_TYPE_CACHEDB , NULL , DEP_ABORT );
89
123
}
90
124
125
+
91
126
static int add_module_dependency (struct sr_module * mod , module_dependency_t * dep ,
92
127
char * script_param )
93
128
{
@@ -125,6 +160,7 @@ static int add_module_dependency(struct sr_module *mod, module_dependency_t *dep
125
160
return 0 ;
126
161
}
127
162
163
+
128
164
/*
129
165
* register all OpenSIPS module dependencies of a single module parameter
130
166
*/
@@ -178,6 +214,7 @@ int add_modparam_dependencies(struct sr_module *mod, param_export_t *param)
178
214
return 0 ;
179
215
}
180
216
217
+
181
218
/*
182
219
* register all OpenSIPS module dependencies of a single module
183
220
*/
@@ -195,6 +232,7 @@ int add_module_dependencies(struct sr_module *mod)
195
232
return 0 ;
196
233
}
197
234
235
+
198
236
int solve_module_dependencies (struct sr_module * modules )
199
237
{
200
238
struct sr_module_dep * md , * it ;
@@ -317,6 +355,7 @@ int solve_module_dependencies(struct sr_module *modules)
317
355
return 0 ;
318
356
}
319
357
358
+
320
359
/* after all modules are properly loaded, free all sr_module_dep structures */
321
360
void free_module_dependencies (struct sr_module * modules )
322
361
{
0 commit comments