Bump to version 1.22.1
[platform/upstream/busybox.git] / applets / applet_tables.c
index 17135dd..94b974e 100644 (file)
@@ -5,15 +5,21 @@
  *
  * Copyright (C) 2007 Denys Vlasenko <vda.linux@googlemail.com>
  *
- * Licensed under GPLv2, see file License in this tarball for details.
+ * Licensed under GPLv2, see file LICENSE in this source tree.
  */
-
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
+#include <unistd.h>
+
+#undef ARRAY_SIZE
+#define ARRAY_SIZE(x) ((unsigned)(sizeof(x) / sizeof((x)[0])))
 
 #include "../include/autoconf.h"
-#include "../include/busybox.h"
+#include "../include/applet_metadata.h"
 
 struct bb_applet {
        const char *name;
@@ -47,7 +53,7 @@ int main(int argc, char **argv)
 {
        int i;
        int ofs;
-       unsigned MAX_APPLET_NAME_LEN = 1;
+//     unsigned MAX_APPLET_NAME_LEN = 1;
 
        qsort(applets, NUM_APPLETS, sizeof(applets[0]), cmp_name);
 
@@ -70,29 +76,33 @@ int main(int argc, char **argv)
 
        /* Keep in sync with include/busybox.h! */
 
-       puts("/* This is a generated file, don't edit */\n");
+       printf("/* This is a generated file, don't edit */\n\n");
 
        printf("#define NUM_APPLETS %u\n", NUM_APPLETS);
        if (NUM_APPLETS == 1) {
                printf("#define SINGLE_APPLET_STR \"%s\"\n", applets[0].name);
-               printf("#define SINGLE_APPLET_MAIN %s_main\n", applets[0].name);
+               printf("#define SINGLE_APPLET_MAIN %s_main\n", applets[0].main);
        }
+       printf("\n");
 
-       puts("\nconst char applet_names[] ALIGN1 = \"\"");
+       //printf("#ifndef SKIP_definitions\n");
+       printf("const char applet_names[] ALIGN1 = \"\"\n");
        for (i = 0; i < NUM_APPLETS; i++) {
                printf("\"%s\" \"\\0\"\n", applets[i].name);
-               if (MAX_APPLET_NAME_LEN < strlen(applets[i].name))
-                       MAX_APPLET_NAME_LEN = strlen(applets[i].name);
+//             if (MAX_APPLET_NAME_LEN < strlen(applets[i].name))
+//                     MAX_APPLET_NAME_LEN = strlen(applets[i].name);
        }
-       puts(";");
+       printf(";\n\n");
 
-       puts("\nint (*const applet_main[])(int argc, char **argv) = {");
+       printf("#ifndef SKIP_applet_main\n");
+       printf("int (*const applet_main[])(int argc, char **argv) = {\n");
        for (i = 0; i < NUM_APPLETS; i++) {
                printf("%s_main,\n", applets[i].main);
        }
-       puts("};");
+       printf("};\n");
+       printf("#endif\n\n");
 
-       puts("const uint16_t applet_nameofs[] ALIGN2 = {");
+       printf("const uint16_t applet_nameofs[] ALIGN2 = {\n");
        for (i = 0; i < NUM_APPLETS; i++) {
                printf("0x%04x,\n",
                        offset[i]
@@ -105,10 +115,10 @@ int main(int argc, char **argv)
 #endif
                );
        }
-       puts("};");
+       printf("};\n\n");
 
 #if ENABLE_FEATURE_INSTALLER
-       puts("const uint8_t applet_install_loc[] ALIGN1 = {");
+       printf("const uint8_t applet_install_loc[] ALIGN1 = {\n");
        i = 0;
        while (i < NUM_APPLETS) {
                int v = applets[i].install_loc; /* 3 bits */
@@ -117,10 +127,31 @@ int main(int argc, char **argv)
                printf("0x%02x,\n", v);
                i++;
        }
-       puts("};\n");
+       printf("};\n");
 #endif
-
-       printf("#define MAX_APPLET_NAME_LEN %u\n", MAX_APPLET_NAME_LEN);
+       //printf("#endif /* SKIP_definitions */\n");
+//     printf("\n");
+//     printf("#define MAX_APPLET_NAME_LEN %u\n", MAX_APPLET_NAME_LEN);
+
+       if (argv[2]) {
+               char line_old[80];
+               char line_new[80];
+               FILE *fp;
+
+               line_old[0] = 0;
+               fp = fopen(argv[2], "r");
+               if (fp) {
+                       fgets(line_old, sizeof(line_old), fp);
+                       fclose(fp);
+               }
+               sprintf(line_new, "#define NUM_APPLETS %u\n", NUM_APPLETS);
+               if (strcmp(line_old, line_new) != 0) {
+                       fp = fopen(argv[2], "w");
+                       if (!fp)
+                               return 1;
+                       fputs(line_new, fp);
+               }
+       }
 
        return 0;
 }