Skip to content

Commit 208fd0b

Browse files
system/init: Parse default cpu-specific configs
On the basis of init.rc, add default parsing of cpu-specific configs. - /etc/init.d/init.rc - /etc/init.d/init.cpu${CPUID}.rc Refactor function `init_parse_configs()` to parse files from the default path instead of identifying and parsing directories or files, as the functionality is unnecessary. Signed-off-by: wangjianyu3 <[email protected]>
1 parent 21a3041 commit 208fd0b

File tree

3 files changed

+16
-44
lines changed

3 files changed

+16
-44
lines changed

system/init/init.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ int main(int argc, FAR char *argv[])
180180
}
181181
}
182182

183-
r = init_parse_config_file(parser, "/etc/init.d/init.rc");
183+
r = init_parse_configs(parser);
184184
if (r < 0)
185185
{
186186
goto out;

system/init/parser.c

Lines changed: 14 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
#include <ctype.h>
2828
#include <fcntl.h>
29+
#include <sched.h>
2930
#include <stdio.h>
3031
#include <stdlib.h>
3132
#include <string.h>
@@ -239,54 +240,26 @@ int init_parse_config_file(FAR const struct parser_s *parser,
239240
return ret;
240241
}
241242

242-
int init_parse_configs(FAR const struct parser_s *parser,
243-
FAR const char *path)
243+
int init_parse_configs(FAR const struct parser_s *parser)
244244
{
245-
FAR struct dirent *entry;
245+
static FAR const char *base = "/etc/init.d/init.";
246246
char file[PATH_MAX];
247-
struct stat sb;
248-
FAR DIR *dir;
249-
int ret = 0;
250-
size_t i;
247+
int ret;
251248

252-
if (stat(path, &sb) < 0)
249+
snprintf(file, sizeof(file), "%src", base);
250+
ret = init_parse_config_file(parser, file);
251+
if (ret < 0)
253252
{
254-
init_err("stat %s", path);
255-
return -errno;
253+
return ret;
256254
}
257255

258-
if (S_ISDIR(sb.st_mode))
259-
{
260-
dir = opendir(path);
261-
if (dir == NULL)
262-
{
263-
init_err("opening directory %s", path);
264-
return -errno;
265-
}
266-
267-
while ((entry = readdir(dir)) != NULL)
268-
{
269-
if (DIRENT_ISFILE(entry->d_type))
270-
{
271-
i = strlen(entry->d_name);
272-
if (i >= 3 && !strcmp(entry->d_name + i - 3, ".rc"))
273-
{
274-
snprintf(file, sizeof(file), "%s/%s", path, entry->d_name);
275-
ret = init_parse_config_file(parser, file);
276-
if (ret < 0)
277-
{
278-
break;
279-
}
280-
}
281-
}
282-
}
283-
284-
closedir(dir);
285-
}
286-
else if (S_ISREG(sb.st_mode))
256+
snprintf(file, sizeof(file), "%scpu%d.rc", base, sched_getcpu());
257+
ret = access(file, F_OK);
258+
if (ret < 0)
287259
{
288-
ret = init_parse_config_file(parser, path);
260+
init_debug("skipping non-exist file %s", file);
261+
return 0;
289262
}
290263

291-
return ret;
264+
return init_parse_config_file(parser, file);
292265
}

system/init/parser.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ struct parser_s
5353
****************************************************************************/
5454

5555
int init_parse_arguments(FAR char *buf, bool dup, int argc, FAR char **argv);
56-
int init_parse_configs(FAR const struct parser_s *parser,
57-
FAR const char *path);
56+
int init_parse_configs(FAR const struct parser_s *parser);
5857
int init_parse_config_file(FAR const struct parser_s *parser,
5958
FAR const char *file);
6059
#endif

0 commit comments

Comments
 (0)