ref: 983a87c6ece8d46e33bf7f6ff68f61b0d7a133d2
parent: 47ca5cb69d26b606b51292a90d025688d4dc5e4e
author: Werner Lemberg <[email protected]>
date: Sun Jun 16 11:58:21 EDT 2019
* src/tools/apinames.c: Formatting, minor edits.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2019-06-16 Werner Lemberg <[email protected]>
+ * src/tools/apinames.c: Formatting, minor edits.
+
+2019-06-16 Werner Lemberg <[email protected]>
+
[autofit] Disable hinting if no blue zones are available (#56450).
* src/autofit/afglobal.c (af_face_global_get_metrics): Start again
--- a/src/tools/apinames.c
+++ b/src/tools/apinames.c
@@ -10,7 +10,7 @@
* accepted if you are using GCC for compilation (and probably by
* other compilers too).
*
- * Author: David Turner, 2005, 2006, 2008-2013, 2015
+ * Author: FreeType team, 2005-2019
*
* This code is explicitly placed into the public domain.
*
@@ -26,6 +26,7 @@
#define LINEBUFF_SIZE 1024
+
typedef enum OutputFormat_
{
OUTPUT_LIST = 0, /* output the list of names, one per line */
@@ -53,10 +54,12 @@
} NameRec, *Name;
+
static Name the_names;
static int num_names;
static int max_names;
+
static void
names_add( const char* name,
const char* end )
@@ -65,14 +68,16 @@
int nn, len;
Name nm;
+
if ( end <= name )
return;
/* compute hash value */
- len = (int)(end - name);
+ len = (int)( end - name );
h = 0;
+
for ( nn = 0; nn < len; nn++ )
- h = h*33 + name[nn];
+ h = h * 33 + name[nn];
/* check for an pre-existing name */
for ( nn = 0; nn < num_names; nn++ )
@@ -88,7 +93,7 @@
/* add new name */
if ( num_names >= max_names )
{
- max_names += (max_names >> 1) + 4;
+ max_names += ( max_names >> 1 ) + 4;
the_names = (NameRec*)realloc( the_names,
sizeof ( the_names[0] ) * max_names );
if ( !the_names )
@@ -97,7 +102,7 @@
nm = &the_names[num_names++];
nm->hash = h;
- nm->name = (char*)malloc( len+1 );
+ nm->name = (char*)malloc( len + 1 );
if ( !nm->name )
panic( "not enough memory" );
@@ -116,6 +121,7 @@
return strcmp( n1->name, n2->name );
}
+
static void
names_sort( void )
{
@@ -134,89 +140,95 @@
switch ( format )
{
- case OUTPUT_WINDOWS_DEF:
- if ( dll_name )
- fprintf( out, "LIBRARY %s\n", dll_name );
+ case OUTPUT_WINDOWS_DEF:
+ if ( dll_name )
+ fprintf( out, "LIBRARY %s\n", dll_name );
- fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
- fprintf( out, "EXPORTS\n" );
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, " %s\n", the_names[nn].name );
- break;
+ fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
+ fprintf( out, "EXPORTS\n" );
- case OUTPUT_BORLAND_DEF:
- if ( dll_name )
- fprintf( out, "LIBRARY %s\n", dll_name );
+ for ( nn = 0; nn < num_names; nn++ )
+ fprintf( out, " %s\n", the_names[nn].name );
- fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
- fprintf( out, "EXPORTS\n" );
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, " _%s\n", the_names[nn].name );
- break;
+ break;
- case OUTPUT_WATCOM_LBC:
- {
- const char* dot;
- char temp[512];
+ case OUTPUT_BORLAND_DEF:
+ if ( dll_name )
+ fprintf( out, "LIBRARY %s\n", dll_name );
+ fprintf( out, "DESCRIPTION FreeType 2 DLL\n" );
+ fprintf( out, "EXPORTS\n" );
- if ( !dll_name )
- {
- fprintf( stderr,
- "you must provide a DLL name with the -d option!\n" );
- exit( 4 );
- }
+ for ( nn = 0; nn < num_names; nn++ )
+ fprintf( out, " _%s\n", the_names[nn].name );
- /* we must omit the .dll suffix from the library name */
- dot = strchr( dll_name, '.' );
- if ( dot )
- {
- int len = dot - dll_name;
+ break;
+ case OUTPUT_WATCOM_LBC:
+ {
+ const char* dot;
+ char temp[512];
- if ( len > (int)( sizeof ( temp ) - 1 ) )
- len = sizeof ( temp ) - 1;
- memcpy( temp, dll_name, len );
- temp[len] = 0;
-
- dll_name = (const char*)temp;
- }
-
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, "++_%s.%s.%s\n", the_names[nn].name, dll_name,
- the_names[nn].name );
- }
- break;
-
- case OUTPUT_NETWARE_IMP:
+ if ( !dll_name )
{
- if ( dll_name )
- fprintf( out, " (%s)\n", dll_name );
- for ( nn = 0; nn < num_names - 1; nn++ )
- fprintf( out, " %s,\n", the_names[nn].name );
- fprintf( out, " %s\n", the_names[num_names - 1].name );
+ fprintf( stderr,
+ "you must provide a DLL name with the -d option!\n" );
+ exit( 4 );
}
- break;
- case OUTPUT_GNU_VERMAP:
+ /* we must omit the `.dll' suffix from the library name */
+ dot = strchr( dll_name, '.' );
+ if ( dot )
{
- fprintf( out, "{\n\tglobal:\n" );
- for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, "\t\t%s;\n", the_names[nn].name );
- fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
+ int len = dot - dll_name;
+
+
+ if ( len > (int)( sizeof ( temp ) - 1 ) )
+ len = sizeof ( temp ) - 1;
+
+ memcpy( temp, dll_name, len );
+ temp[len] = 0;
+
+ dll_name = (const char*)temp;
}
- break;
- default: /* LIST */
for ( nn = 0; nn < num_names; nn++ )
- fprintf( out, "%s\n", the_names[nn].name );
- }
-}
+ fprintf( out, "++_%s.%s.%s\n",
+ the_names[nn].name, dll_name, the_names[nn].name );
+ }
+ break;
+ case OUTPUT_NETWARE_IMP:
+ if ( dll_name )
+ fprintf( out, " (%s)\n", dll_name );
+ for ( nn = 0; nn < num_names - 1; nn++ )
+ fprintf( out, " %s,\n", the_names[nn].name );
+ fprintf( out, " %s\n", the_names[num_names - 1].name );
+ break;
+
+ case OUTPUT_GNU_VERMAP:
+ fprintf( out, "{\n\tglobal:\n" );
+
+ for ( nn = 0; nn < num_names; nn++ )
+ fprintf( out, "\t\t%s;\n", the_names[nn].name );
+
+ fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
+
+ break;
+
+ default: /* LIST */
+ for ( nn = 0; nn < num_names; nn++ )
+ fprintf( out, "%s\n", the_names[nn].name );
+
+ break;
+ }
+}
+
+
/* states of the line parser */
typedef enum State_
@@ -226,89 +238,96 @@
} State;
+
static int
-read_header_file( FILE* file, int verbose )
+read_header_file( FILE* file,
+ int verbose )
{
static char buff[LINEBUFF_SIZE + 1];
State state = STATE_START;
+
while ( !feof( file ) )
{
char* p;
+
if ( !fgets( buff, LINEBUFF_SIZE, file ) )
break;
p = buff;
- while ( *p && (*p == ' ' || *p == '\\') ) /* skip leading whitespace */
+ /* skip leading whitespace */
+ while ( *p && ( *p == ' ' || *p == '\\' ) )
p++;
- if ( *p == '\n' || *p == '\r' ) /* skip empty lines */
+ /* skip empty lines */
+ if ( *p == '\n' || *p == '\r' )
continue;
switch ( state )
{
- case STATE_START:
- {
- if ( memcmp( p, "FT_EXPORT(", 10 ) != 0 )
- break;
+ case STATE_START:
+ if ( memcmp( p, "FT_EXPORT(", 10 ) != 0 )
+ break;
- p += 10;
- for (;;)
- {
- if ( *p == 0 || *p == '\n' || *p == '\r' )
- goto NextLine;
+ p += 10;
+ for (;;)
+ {
+ if ( *p == 0 || *p == '\n' || *p == '\r' )
+ goto NextLine;
- if ( *p == ')' )
- {
- p++;
- break;
- }
+ if ( *p == ')' )
+ {
+ p++;
+ break;
+ }
- p++;
- }
+ p++;
+ }
- state = STATE_TYPE;
+ state = STATE_TYPE;
- /* sometimes, the name is just after the FT_EXPORT(...), so
- * skip whitespace, and fall-through if we find an alphanumeric
- * character
- */
- while ( *p == ' ' || *p == '\t' )
- p++;
+ /*
+ * Sometimes, the name is just after `FT_EXPORT(...)', so skip
+ * whitespace and fall-through if we find an alphanumeric character.
+ */
+ while ( *p == ' ' || *p == '\t' )
+ p++;
- if ( !isalpha(*p) )
- break;
- }
- /* fall-through */
+ if ( !isalpha( *p ) )
+ break;
- case STATE_TYPE:
- {
- char* name = p;
+ /* fall-through */
- while ( isalnum(*p) || *p == '_' )
- p++;
+ case STATE_TYPE:
+ {
+ char* name = p;
- if ( p > name )
- {
- if ( verbose )
- fprintf( stderr, ">>> %.*s\n", (int)(p - name), name );
- names_add( name, p );
- }
+ while ( isalnum( *p ) || *p == '_' )
+ p++;
- state = STATE_START;
+ if ( p > name )
+ {
+ if ( verbose )
+ fprintf( stderr, ">>> %.*s\n", (int)( p - name ), name );
+
+ names_add( name, p );
}
- break;
- default:
- ;
+ state = STATE_START;
+ }
+
+ break;
+
+ default:
+ ;
}
- NextLine:
+NextLine:
;
- }
+ } /* end of while loop */
return 0;
}
@@ -318,137 +337,147 @@
usage( void )
{
static const char* const format =
- "%s %s: extract FreeType API names from header files\n\n"
- "this program is used to extract the list of public FreeType API\n"
- "functions. It receives the list of header files as argument and\n"
- "generates a sorted list of unique identifiers\n\n"
+ "%s %s: extract FreeType API names from header files\n"
+ "\n"
+ "This program extracts the list of public FreeType API functions.\n"
+ "It receives a list of header files as an argument and\n"
+ "generates a sorted list of unique identifiers in various formats.\n"
+ "\n"
+ "usage: %s header1 [options] [header2 ...]\n"
+ "\n"
+ "options: - parse the contents of stdin, ignore arguments\n"
+ " -v verbose mode, output sent to standard error\n"
+ " -oFILE write output to FILE instead of standard output\n"
+ " -dNAME indicate DLL file name, 'freetype.dll' by default\n"
+ " -w output .DEF file for Visual C++ and Mingw\n"
+ " -wB output .DEF file for Borland C++\n"
+ " -wW output Watcom Linker Response File\n"
+ " -wN output NetWare Import File\n"
+ " -wL output version map for GNU or Solaris linker\n"
+ "\n";
- "usage: %s header1 [options] [header2 ...]\n\n"
-
- "options: - : parse the content of stdin, ignore arguments\n"
- " -v : verbose mode, output sent to standard error\n"
- " -oFILE : write output to FILE instead of standard output\n"
- " -dNAME : indicate DLL file name, 'freetype.dll' by default\n"
- " -w : output .DEF file for Visual C++ and Mingw\n"
- " -wB : output .DEF file for Borland C++\n"
- " -wW : output Watcom Linker Response File\n"
- " -wN : output NetWare Import File\n"
- " -wL : output version map for GNU or Solaris linker\n"
- "\n";
-
fprintf( stderr,
format,
PROGRAM_NAME,
PROGRAM_VERSION,
- PROGRAM_NAME
- );
- exit(1);
+ PROGRAM_NAME );
+
+ exit( 1 );
}
-int main( int argc, const char* const* argv )
+int
+main( int argc,
+ const char* const* argv )
{
- int from_stdin = 0;
- int verbose = 0;
- OutputFormat format = OUTPUT_LIST; /* the default */
- FILE* out = stdout;
+ int from_stdin = 0;
+ int verbose = 0;
+ OutputFormat format = OUTPUT_LIST; /* the default */
+ FILE* out = stdout;
const char* library_name = NULL;
+
if ( argc < 2 )
usage();
- /* '-' used as a single argument means read source file from stdin */
+ /* `-' used as a single argument means read source file from stdin */
while ( argc > 1 && argv[1][0] == '-' )
{
const char* arg = argv[1];
+
switch ( arg[1] )
{
- case 'v':
- verbose = 1;
- break;
+ case 'v':
+ verbose = 1;
- case 'o':
- if ( arg[2] == 0 )
- {
- if ( argc < 2 )
- usage();
+ break;
- arg = argv[2];
- argv++;
- argc--;
- }
- else
- arg += 2;
+ case 'o':
+ if ( arg[2] == 0 )
+ {
+ if ( argc < 2 )
+ usage();
- out = fopen( arg, "wt" );
- if ( !out )
- {
- fprintf( stderr, "could not open '%s' for writing\n", arg );
- exit(3);
- }
- break;
+ arg = argv[2];
+ argv++;
+ argc--;
+ }
+ else
+ arg += 2;
- case 'd':
- if ( arg[2] == 0 )
- {
- if ( argc < 2 )
- usage();
+ out = fopen( arg, "wt" );
+ if ( !out )
+ {
+ fprintf( stderr, "could not open '%s' for writing\n", arg );
+ exit( 3 );
+ }
- arg = argv[2];
- argv++;
- argc--;
- }
- else
- arg += 2;
+ break;
- library_name = arg;
- break;
+ case 'd':
+ if ( arg[2] == 0 )
+ {
+ if ( argc < 2 )
+ usage();
- case 'w':
- format = OUTPUT_WINDOWS_DEF;
- switch ( arg[2] )
- {
- case 'B':
- format = OUTPUT_BORLAND_DEF;
- break;
+ arg = argv[2];
+ argv++;
+ argc--;
+ }
+ else
+ arg += 2;
- case 'W':
- format = OUTPUT_WATCOM_LBC;
- break;
+ library_name = arg;
- case 'N':
- format = OUTPUT_NETWARE_IMP;
- break;
+ break;
- case 'L':
- format = OUTPUT_GNU_VERMAP;
- break;
+ case 'w':
+ format = OUTPUT_WINDOWS_DEF;
- case 0:
- break;
+ switch ( arg[2] )
+ {
+ case 'B':
+ format = OUTPUT_BORLAND_DEF;
+ break;
- default:
- usage();
- }
+ case 'W':
+ format = OUTPUT_WATCOM_LBC;
break;
+ case 'N':
+ format = OUTPUT_NETWARE_IMP;
+ break;
+
+ case 'L':
+ format = OUTPUT_GNU_VERMAP;
+ break;
+
case 0:
- from_stdin = 1;
break;
default:
usage();
+ }
+
+ break;
+
+ case 0:
+ from_stdin = 1;
+
+ break;
+
+ default:
+ usage();
}
argc--;
argv++;
- }
+ } /* end of while loop */
+
if ( from_stdin )
- {
read_header_file( stdin, verbose );
- }
else
{
for ( --argc, argv++; argc > 0; argc--, argv++ )
@@ -455,6 +484,7 @@
{
FILE* file = fopen( argv[0], "rb" );
+
if ( !file )
fprintf( stderr, "unable to open '%s'\n", argv[0] );
else
@@ -469,7 +499,7 @@
}
if ( num_names == 0 )
- panic( "could not find exported functions !!\n" );
+ panic( "could not find exported functions\n" );
names_sort();
names_dump( out, format, library_name );
@@ -479,3 +509,6 @@
return 0;
}
+
+
+/* END */