diff --git a/ChangeLog b/ChangeLog index d5f148c2c7a..c02857e72c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -169,5 +169,7 @@ * Restructured some Makefiles to better handle enabling and disabling NuttX features without having so much conditional compilation in the source files. + * tools/mkconfig.c: No long depends on asprintf() and _GNU_SOURCE and + so should now build in non-GNU, non-GLIBC environments. * Started m68322 diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html index 32ce071ba8a..1adab64be5b 100644 --- a/Documentation/NuttX.html +++ b/Documentation/NuttX.html @@ -603,6 +603,8 @@ Other memory: * Restructured some Makefiles to better handle enabling and disabling NuttX features without having so much conditional compilation in the source files. + * tools/mkconfig.c: No long depends on asprintf() and _GNU_SOURCE and + so should now build in non-GNU, non-GLIBC environments. * Started m68322 diff --git a/tools/mkconfig.c b/tools/mkconfig.c index b9c91598c60..20611ff1e58 100644 --- a/tools/mkconfig.c +++ b/tools/mkconfig.c @@ -33,16 +33,16 @@ * ************************************************************/ -#define _GNU_SOURCE #include #include #include +#include #include #include #include #define DEFCONFIG ".config" -#define LINESIZE 256 +#define LINESIZE ( PATH_MAX > 256 ? PATH_MAX : 256 ) static char line[LINESIZE+1]; @@ -154,6 +154,13 @@ static void parse_file(FILE *stream) while (ptr); } +static inline char *getfilepath(const char *name) +{ + snprintf(line, PATH_MAX, "%s/" DEFCONFIG, name); + line[PATH_MAX] = '\0'; + return strdup(line); +} + static void show_usage(const char *progname) { fprintf(stderr, "USAGE: %s \n", progname); @@ -164,7 +171,6 @@ int main(int argc, char **argv, char **envp) { char *filepath; FILE *stream; - int status; if (argc != 2) { @@ -172,10 +178,10 @@ int main(int argc, char **argv, char **envp) show_usage(argv[0]); } - status = asprintf(&filepath, "%s/" DEFCONFIG, argv[1]); - if (status < 0) + filepath = getfilepath(argv[1]); + if (!filepath) { - fprintf(stderr, "asprintf failed\n"); + fprintf(stderr, "getfilepath failed\n"); exit(2); }