tty: vt: move conmakehash to drivers/tty/vt/ from scripts/
authorMasahiro Yamada <masahiroy@kernel.org>
Tue, 17 Dec 2019 11:06:33 +0000 (20:06 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Dec 2019 13:42:46 +0000 (14:42 +0100)
scripts/conmakehash is only used for generating
drivers/tty/vt/consolemap_deftbl.c

Move it to the related directory.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Link: https://lore.kernel.org/r/20191217110633.8796-1-masahiroy@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/vt/.gitignore
drivers/tty/vt/Makefile
drivers/tty/vt/conmakehash.c [new file with mode: 0644]
scripts/.gitignore
scripts/Makefile
scripts/conmakehash.c [deleted file]

index 9b38b85f9d9a3e961df03b3bd3af6254ed05d836..3ecf42234d89c225d9244697c39b292dc990d86c 100644 (file)
@@ -1,3 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
+conmakehash
 consolemap_deftbl.c
 defkeymap.c
index edbbe0ccdb8339fe5caa12a1bca26e9c6214ab0f..329ca336b8ee2d239bdaad410029d5249c61bc8b 100644 (file)
@@ -12,10 +12,12 @@ obj-$(CONFIG_HW_CONSOLE)            += vt.o defkeymap.o
 # Files generated that shall be removed upon make clean
 clean-files := consolemap_deftbl.c defkeymap.c
 
+hostprogs-y += conmakehash
+
 quiet_cmd_conmk = CONMK   $@
-      cmd_conmk = scripts/conmakehash $< > $@
+      cmd_conmk = $(obj)/conmakehash $< > $@
 
-$(obj)/consolemap_deftbl.c: $(src)/$(FONTMAPFILE)
+$(obj)/consolemap_deftbl.c: $(src)/$(FONTMAPFILE) $(obj)/conmakehash
        $(call cmd,conmk)
 
 $(obj)/defkeymap.o:  $(obj)/defkeymap.c
diff --git a/drivers/tty/vt/conmakehash.c b/drivers/tty/vt/conmakehash.c
new file mode 100644 (file)
index 0000000..cddd789
--- /dev/null
@@ -0,0 +1,290 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * conmakehash.c
+ *
+ * Create arrays for initializing the kernel folded tables (using a hash
+ * table turned out to be to limiting...)  Unfortunately we can't simply
+ * preinitialize the tables at compile time since kfree() cannot accept
+ * memory not allocated by kmalloc(), and doing our own memory management
+ * just for this seems like massive overkill.
+ *
+ * Copyright (C) 1995-1997 H. Peter Anvin
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <string.h>
+#include <ctype.h>
+
+#define MAX_FONTLEN 256
+
+typedef unsigned short unicode;
+
+static void usage(char *argv0)
+{
+  fprintf(stderr, "Usage: \n"
+         "        %s chartable [hashsize] [hashstep] [maxhashlevel]\n", argv0);
+  exit(EX_USAGE);
+}
+
+static int getunicode(char **p0)
+{
+  char *p = *p0;
+
+  while (*p == ' ' || *p == '\t')
+    p++;
+  if (*p != 'U' || p[1] != '+' ||
+      !isxdigit(p[2]) || !isxdigit(p[3]) || !isxdigit(p[4]) ||
+      !isxdigit(p[5]) || isxdigit(p[6]))
+    return -1;
+  *p0 = p+6;
+  return strtol(p+2,0,16);
+}
+
+unicode unitable[MAX_FONTLEN][255];
+                               /* Massive overkill, but who cares? */
+int unicount[MAX_FONTLEN];
+
+static void addpair(int fp, int un)
+{
+  int i;
+
+  if ( un <= 0xfffe )
+    {
+      /* Check it isn't a duplicate */
+
+      for ( i = 0 ; i < unicount[fp] ; i++ )
+       if ( unitable[fp][i] == un )
+         return;
+
+      /* Add to list */
+
+      if ( unicount[fp] > 254 )
+       {
+         fprintf(stderr, "ERROR: Only 255 unicodes/glyph permitted!\n");
+         exit(EX_DATAERR);
+       }
+
+      unitable[fp][unicount[fp]] = un;
+      unicount[fp]++;
+    }
+
+  /* otherwise: ignore */
+}
+
+int main(int argc, char *argv[])
+{
+  FILE *ctbl;
+  char *tblname;
+  char buffer[65536];
+  int fontlen;
+  int i, nuni, nent;
+  int fp0, fp1, un0, un1;
+  char *p, *p1;
+
+  if ( argc < 2 || argc > 5 )
+    usage(argv[0]);
+
+  if ( !strcmp(argv[1],"-") )
+    {
+      ctbl = stdin;
+      tblname = "stdin";
+    }
+  else
+    {
+      ctbl = fopen(tblname = argv[1], "r");
+      if ( !ctbl )
+       {
+         perror(tblname);
+         exit(EX_NOINPUT);
+       }
+    }
+
+  /* For now we assume the default font is always 256 characters. */
+  fontlen = 256;
+
+  /* Initialize table */
+
+  for ( i = 0 ; i < fontlen ; i++ )
+    unicount[i] = 0;
+
+  /* Now we come to the tricky part.  Parse the input table. */
+
+  while ( fgets(buffer, sizeof(buffer), ctbl) != NULL )
+    {
+      if ( (p = strchr(buffer, '\n')) != NULL )
+       *p = '\0';
+      else
+       fprintf(stderr, "%s: Warning: line too long\n", tblname);
+
+      p = buffer;
+
+/*
+ * Syntax accepted:
+ *     <fontpos>       <unicode> <unicode> ...
+ *     <range>         idem
+ *     <range>         <unicode range>
+ *
+ * where <range> ::= <fontpos>-<fontpos>
+ * and <unicode> ::= U+<h><h><h><h>
+ * and <h> ::= <hexadecimal digit>
+ */
+
+      while (*p == ' ' || *p == '\t')
+       p++;
+      if (!*p || *p == '#')
+       continue;       /* skip comment or blank line */
+
+      fp0 = strtol(p, &p1, 0);
+      if (p1 == p)
+       {
+         fprintf(stderr, "Bad input line: %s\n", buffer);
+         exit(EX_DATAERR);
+        }
+      p = p1;
+
+      while (*p == ' ' || *p == '\t')
+       p++;
+      if (*p == '-')
+       {
+         p++;
+         fp1 = strtol(p, &p1, 0);
+         if (p1 == p)
+           {
+             fprintf(stderr, "Bad input line: %s\n", buffer);
+             exit(EX_DATAERR);
+           }
+         p = p1;
+        }
+      else
+       fp1 = 0;
+
+      if ( fp0 < 0 || fp0 >= fontlen )
+       {
+           fprintf(stderr,
+                   "%s: Glyph number (0x%x) larger than font length\n",
+                   tblname, fp0);
+           exit(EX_DATAERR);
+       }
+      if ( fp1 && (fp1 < fp0 || fp1 >= fontlen) )
+       {
+           fprintf(stderr,
+                   "%s: Bad end of range (0x%x)\n",
+                   tblname, fp1);
+           exit(EX_DATAERR);
+       }
+
+      if (fp1)
+       {
+         /* we have a range; expect the word "idem" or a Unicode range of the
+            same length */
+         while (*p == ' ' || *p == '\t')
+           p++;
+         if (!strncmp(p, "idem", 4))
+           {
+             for (i=fp0; i<=fp1; i++)
+               addpair(i,i);
+             p += 4;
+           }
+         else
+           {
+             un0 = getunicode(&p);
+             while (*p == ' ' || *p == '\t')
+               p++;
+             if (*p != '-')
+               {
+                 fprintf(stderr,
+"%s: Corresponding to a range of font positions, there should be a Unicode range\n",
+                         tblname);
+                 exit(EX_DATAERR);
+               }
+             p++;
+             un1 = getunicode(&p);
+             if (un0 < 0 || un1 < 0)
+               {
+                 fprintf(stderr,
+"%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n",
+                         tblname, fp0, fp1);
+                 exit(EX_DATAERR);
+               }
+             if (un1 - un0 != fp1 - fp0)
+               {
+                 fprintf(stderr,
+"%s: Unicode range U+%x-U+%x not of the same length as font position range 0x%x-0x%x\n",
+                         tblname, un0, un1, fp0, fp1);
+                 exit(EX_DATAERR);
+               }
+             for(i=fp0; i<=fp1; i++)
+               addpair(i,un0-fp0+i);
+           }
+        }
+      else
+       {
+           /* no range; expect a list of unicode values for a single font position */
+
+           while ( (un0 = getunicode(&p)) >= 0 )
+             addpair(fp0, un0);
+       }
+      while (*p == ' ' || *p == '\t')
+       p++;
+      if (*p && *p != '#')
+       fprintf(stderr, "%s: trailing junk (%s) ignored\n", tblname, p);
+    }
+
+  /* Okay, we hit EOF, now output hash table */
+
+  fclose(ctbl);
+
+
+  /* Compute total size of Unicode list */
+  nuni = 0;
+  for ( i = 0 ; i < fontlen ; i++ )
+    nuni += unicount[i];
+
+  printf("\
+/*\n\
+ * Do not edit this file; it was automatically generated by\n\
+ *\n\
+ * conmakehash %s > [this file]\n\
+ *\n\
+ */\n\
+\n\
+#include <linux/types.h>\n\
+\n\
+u8 dfont_unicount[%d] = \n\
+{\n\t", argv[1], fontlen);
+
+  for ( i = 0 ; i < fontlen ; i++ )
+    {
+      printf("%3d", unicount[i]);
+      if ( i == fontlen-1 )
+        printf("\n};\n");
+      else if ( i % 8 == 7 )
+        printf(",\n\t");
+      else
+        printf(", ");
+    }
+
+  printf("\nu16 dfont_unitable[%d] = \n{\n\t", nuni);
+
+  fp0 = 0;
+  nent = 0;
+  for ( i = 0 ; i < nuni ; i++ )
+    {
+      while ( nent >= unicount[fp0] )
+       {
+         fp0++;
+         nent = 0;
+       }
+      printf("0x%04x", unitable[fp0][nent++]);
+      if ( i == nuni-1 )
+         printf("\n};\n");
+       else if ( i % 8 == 7 )
+         printf(",\n\t");
+       else
+         printf(", ");
+    }
+
+  exit(EX_OK);
+}
index 4aa1806c59c2a1cdcfcea105df3899d0e5109646..fcbc81f7c3d4f9f7dafc180bf838de14f62407bf 100644 (file)
@@ -2,7 +2,6 @@
 # Generated files
 #
 bin2c
-conmakehash
 kallsyms
 unifdef
 recordmcount
index 00c47901cb0691802cee2d41519856e6d71d68d8..96f155b582ddd7037e31f1cd09ff123ff5b09637 100644 (file)
@@ -4,14 +4,11 @@
 # the kernel for the build process.
 # ---------------------------------------------------------------------------
 # kallsyms:      Find all symbols in vmlinux
-# conmakehash:   Create chartable
-# conmakehash:  Create arrays for initializing the kernel console tables
 
 HOST_EXTRACFLAGS += -I$(srctree)/tools/include
 
 hostprogs-$(CONFIG_BUILD_BIN2C)  += bin2c
 hostprogs-$(CONFIG_KALLSYMS)     += kallsyms
-hostprogs-$(CONFIG_VT)           += conmakehash
 hostprogs-$(BUILD_C_RECORDMCOUNT) += recordmcount
 hostprogs-$(CONFIG_BUILDTIME_EXTABLE_SORT) += sortextable
 hostprogs-$(CONFIG_ASN1)        += asn1_compiler
diff --git a/scripts/conmakehash.c b/scripts/conmakehash.c
deleted file mode 100644 (file)
index cddd789..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * conmakehash.c
- *
- * Create arrays for initializing the kernel folded tables (using a hash
- * table turned out to be to limiting...)  Unfortunately we can't simply
- * preinitialize the tables at compile time since kfree() cannot accept
- * memory not allocated by kmalloc(), and doing our own memory management
- * just for this seems like massive overkill.
- *
- * Copyright (C) 1995-1997 H. Peter Anvin
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sysexits.h>
-#include <string.h>
-#include <ctype.h>
-
-#define MAX_FONTLEN 256
-
-typedef unsigned short unicode;
-
-static void usage(char *argv0)
-{
-  fprintf(stderr, "Usage: \n"
-         "        %s chartable [hashsize] [hashstep] [maxhashlevel]\n", argv0);
-  exit(EX_USAGE);
-}
-
-static int getunicode(char **p0)
-{
-  char *p = *p0;
-
-  while (*p == ' ' || *p == '\t')
-    p++;
-  if (*p != 'U' || p[1] != '+' ||
-      !isxdigit(p[2]) || !isxdigit(p[3]) || !isxdigit(p[4]) ||
-      !isxdigit(p[5]) || isxdigit(p[6]))
-    return -1;
-  *p0 = p+6;
-  return strtol(p+2,0,16);
-}
-
-unicode unitable[MAX_FONTLEN][255];
-                               /* Massive overkill, but who cares? */
-int unicount[MAX_FONTLEN];
-
-static void addpair(int fp, int un)
-{
-  int i;
-
-  if ( un <= 0xfffe )
-    {
-      /* Check it isn't a duplicate */
-
-      for ( i = 0 ; i < unicount[fp] ; i++ )
-       if ( unitable[fp][i] == un )
-         return;
-
-      /* Add to list */
-
-      if ( unicount[fp] > 254 )
-       {
-         fprintf(stderr, "ERROR: Only 255 unicodes/glyph permitted!\n");
-         exit(EX_DATAERR);
-       }
-
-      unitable[fp][unicount[fp]] = un;
-      unicount[fp]++;
-    }
-
-  /* otherwise: ignore */
-}
-
-int main(int argc, char *argv[])
-{
-  FILE *ctbl;
-  char *tblname;
-  char buffer[65536];
-  int fontlen;
-  int i, nuni, nent;
-  int fp0, fp1, un0, un1;
-  char *p, *p1;
-
-  if ( argc < 2 || argc > 5 )
-    usage(argv[0]);
-
-  if ( !strcmp(argv[1],"-") )
-    {
-      ctbl = stdin;
-      tblname = "stdin";
-    }
-  else
-    {
-      ctbl = fopen(tblname = argv[1], "r");
-      if ( !ctbl )
-       {
-         perror(tblname);
-         exit(EX_NOINPUT);
-       }
-    }
-
-  /* For now we assume the default font is always 256 characters. */
-  fontlen = 256;
-
-  /* Initialize table */
-
-  for ( i = 0 ; i < fontlen ; i++ )
-    unicount[i] = 0;
-
-  /* Now we come to the tricky part.  Parse the input table. */
-
-  while ( fgets(buffer, sizeof(buffer), ctbl) != NULL )
-    {
-      if ( (p = strchr(buffer, '\n')) != NULL )
-       *p = '\0';
-      else
-       fprintf(stderr, "%s: Warning: line too long\n", tblname);
-
-      p = buffer;
-
-/*
- * Syntax accepted:
- *     <fontpos>       <unicode> <unicode> ...
- *     <range>         idem
- *     <range>         <unicode range>
- *
- * where <range> ::= <fontpos>-<fontpos>
- * and <unicode> ::= U+<h><h><h><h>
- * and <h> ::= <hexadecimal digit>
- */
-
-      while (*p == ' ' || *p == '\t')
-       p++;
-      if (!*p || *p == '#')
-       continue;       /* skip comment or blank line */
-
-      fp0 = strtol(p, &p1, 0);
-      if (p1 == p)
-       {
-         fprintf(stderr, "Bad input line: %s\n", buffer);
-         exit(EX_DATAERR);
-        }
-      p = p1;
-
-      while (*p == ' ' || *p == '\t')
-       p++;
-      if (*p == '-')
-       {
-         p++;
-         fp1 = strtol(p, &p1, 0);
-         if (p1 == p)
-           {
-             fprintf(stderr, "Bad input line: %s\n", buffer);
-             exit(EX_DATAERR);
-           }
-         p = p1;
-        }
-      else
-       fp1 = 0;
-
-      if ( fp0 < 0 || fp0 >= fontlen )
-       {
-           fprintf(stderr,
-                   "%s: Glyph number (0x%x) larger than font length\n",
-                   tblname, fp0);
-           exit(EX_DATAERR);
-       }
-      if ( fp1 && (fp1 < fp0 || fp1 >= fontlen) )
-       {
-           fprintf(stderr,
-                   "%s: Bad end of range (0x%x)\n",
-                   tblname, fp1);
-           exit(EX_DATAERR);
-       }
-
-      if (fp1)
-       {
-         /* we have a range; expect the word "idem" or a Unicode range of the
-            same length */
-         while (*p == ' ' || *p == '\t')
-           p++;
-         if (!strncmp(p, "idem", 4))
-           {
-             for (i=fp0; i<=fp1; i++)
-               addpair(i,i);
-             p += 4;
-           }
-         else
-           {
-             un0 = getunicode(&p);
-             while (*p == ' ' || *p == '\t')
-               p++;
-             if (*p != '-')
-               {
-                 fprintf(stderr,
-"%s: Corresponding to a range of font positions, there should be a Unicode range\n",
-                         tblname);
-                 exit(EX_DATAERR);
-               }
-             p++;
-             un1 = getunicode(&p);
-             if (un0 < 0 || un1 < 0)
-               {
-                 fprintf(stderr,
-"%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n",
-                         tblname, fp0, fp1);
-                 exit(EX_DATAERR);
-               }
-             if (un1 - un0 != fp1 - fp0)
-               {
-                 fprintf(stderr,
-"%s: Unicode range U+%x-U+%x not of the same length as font position range 0x%x-0x%x\n",
-                         tblname, un0, un1, fp0, fp1);
-                 exit(EX_DATAERR);
-               }
-             for(i=fp0; i<=fp1; i++)
-               addpair(i,un0-fp0+i);
-           }
-        }
-      else
-       {
-           /* no range; expect a list of unicode values for a single font position */
-
-           while ( (un0 = getunicode(&p)) >= 0 )
-             addpair(fp0, un0);
-       }
-      while (*p == ' ' || *p == '\t')
-       p++;
-      if (*p && *p != '#')
-       fprintf(stderr, "%s: trailing junk (%s) ignored\n", tblname, p);
-    }
-
-  /* Okay, we hit EOF, now output hash table */
-
-  fclose(ctbl);
-
-
-  /* Compute total size of Unicode list */
-  nuni = 0;
-  for ( i = 0 ; i < fontlen ; i++ )
-    nuni += unicount[i];
-
-  printf("\
-/*\n\
- * Do not edit this file; it was automatically generated by\n\
- *\n\
- * conmakehash %s > [this file]\n\
- *\n\
- */\n\
-\n\
-#include <linux/types.h>\n\
-\n\
-u8 dfont_unicount[%d] = \n\
-{\n\t", argv[1], fontlen);
-
-  for ( i = 0 ; i < fontlen ; i++ )
-    {
-      printf("%3d", unicount[i]);
-      if ( i == fontlen-1 )
-        printf("\n};\n");
-      else if ( i % 8 == 7 )
-        printf(",\n\t");
-      else
-        printf(", ");
-    }
-
-  printf("\nu16 dfont_unitable[%d] = \n{\n\t", nuni);
-
-  fp0 = 0;
-  nent = 0;
-  for ( i = 0 ; i < nuni ; i++ )
-    {
-      while ( nent >= unicount[fp0] )
-       {
-         fp0++;
-         nent = 0;
-       }
-      printf("0x%04x", unitable[fp0][nent++]);
-      if ( i == nuni-1 )
-         printf("\n};\n");
-       else if ( i % 8 == 7 )
-         printf(",\n\t");
-       else
-         printf(", ");
-    }
-
-  exit(EX_OK);
-}