diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | constlist.c | 93 | ||||
-rw-r--r-- | constlist.h | 35 | ||||
-rw-r--r-- | mkfontscale.c | 24 |
4 files changed, 143 insertions, 11 deletions
diff --git a/Makefile.am b/Makefile.am index 56308e2..90315ee 100644 --- a/Makefile.am +++ b/Makefile.am @@ -27,6 +27,8 @@ AM_CFLAGS = $(CWARNFLAGS) mkfontscale_LDADD = @MKFONTSCALE_LIBS@ mkfontscale_SOURCES = \ + constlist.c \ + constlist.h \ data.h \ hash.c \ hash.h \ diff --git a/constlist.c b/constlist.c new file mode 100644 index 0000000..b57fc97 --- /dev/null +++ b/constlist.c @@ -0,0 +1,93 @@ +/* + Copyright (c) 2002-2003 by Juliusz Chroboczek + Copyright (c) 2015 by Thomas Klausner + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include <stdlib.h> +#include "constlist.h" + +ConstListPtr +appendConstList(ConstListPtr first, ConstListPtr second) +{ + ConstListPtr current; + + if(second == NULL) + return first; + + if(first == NULL) + return second; + + for(current = first; current->next; current = current->next) + ; + + current->next = second; + return first; +} + +ConstListPtr +makeConstList(const char **a, int n, ConstListPtr old, int begin) +{ + ConstListPtr first, current, next; + int i; + + if(n == 0) + return old; + + first = malloc(sizeof(ConstListRec)); + if(!first) + return NULL; + + first->value = a[0]; + first->next = NULL; + + current = first; + for(i = 1; i < n; i++) { + next = malloc(sizeof(ConstListRec)); + if(!next) { + destroyConstList(first); + return NULL; + } + next->value = a[i]; + next->next = NULL; + + current->next = next; + current = next; + } + if(begin) { + current->next = old; + return first; + } else { + return appendConstList(old, first); + } +} + +void +destroyConstList(ConstListPtr old) +{ + ConstListPtr next; + if(!old) + return; + while(old) { + next = old->next; + free(old); + old = next; + } +} diff --git a/constlist.h b/constlist.h new file mode 100644 index 0000000..5ba9f51 --- /dev/null +++ b/constlist.h @@ -0,0 +1,35 @@ +/* + Copyright (c) 2015 Thomas Klausner + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef _MKS_CONSTLIST_H_ +#define _MKS_CONSTLIST_H_ 1 + +typedef struct _ConstList { + const char *value; + struct _ConstList *next; +} ConstListRec, *ConstListPtr; + +ConstListPtr appendConstList(ConstListPtr first, ConstListPtr second); +ConstListPtr makeConstList(const char **a, int n, ConstListPtr old, int begin); +void destroyConstList(ConstListPtr old); + +#endif /* _MKS_CONSTLIST_H_ */ diff --git a/mkfontscale.c b/mkfontscale.c index 13cf648..e5c038d 100644 --- a/mkfontscale.c +++ b/mkfontscale.c @@ -48,6 +48,7 @@ #include FT_XFREE86_H #include "list.h" +#include "constlist.h" #include "hash.h" #include "data.h" #include "ident.h" @@ -88,14 +89,14 @@ static const char *encodings_array[] = static const char *extra_encodings_array[] = { "iso10646-1", "adobe-fontspecific", "microsoft-symbol" }; -static ListPtr encodings, extra_encodings; +static ConstListPtr encodings, extra_encodings; static const char *outfilename; #define countof(_a) (sizeof(_a)/sizeof((_a)[0])) static int doDirectory(const char*, int, ListPtr); -static int checkEncoding(FT_Face face, char *encoding_name); -static int checkExtraEncoding(FT_Face face, char *encoding_name, int found); +static int checkEncoding(FT_Face face, const char *encoding_name); +static int checkExtraEncoding(FT_Face face, const char *encoding_name, int found); static int find_cmap(int type, int pid, int eid, FT_Face face); static const char* notice_foundry(const char *notice); static const char* vendor_foundry(const signed char *vendor); @@ -158,11 +159,11 @@ main(int argc, char **argv) outfilename = NULL; - encodings = makeList(encodings_array, countof(encodings_array), NULL, 0); + encodings = makeConstList(encodings_array, countof(encodings_array), NULL, 0); - extra_encodings = makeList(extra_encodings_array, - countof(extra_encodings_array), - NULL, 0); + extra_encodings = makeConstList(extra_encodings_array, + countof(extra_encodings_array), + NULL, 0); doBitmaps = 0; doISO10646_1_encoding = 1; doScalable = 1; @@ -188,7 +189,7 @@ main(int argc, char **argv) if(argn >= argc - 1) { missing_arg("-a"); } - makeList(&argv[argn + 1], 1, encodings, 0); + makeConstList((const char **)&argv[argn + 1], 1, encodings, 0); argn += 2; } else if(strcmp(argv[argn], "-p") == 0) { if(argn >= argc - 1) { @@ -782,7 +783,8 @@ doDirectory(const char *dirname_given, int numEncodings, ListPtr encodingsToDo) struct dirent** namelist; FT_Error ftrc; FT_Face face; - ListPtr encoding, xlfd, lp; + ConstListPtr encoding; + ListPtr xlfd, lp; HashTablePtr entries; HashBucketPtr *array; int i, n, dirn, diri, found, rc; @@ -1039,7 +1041,7 @@ doDirectory(const char *dirname_given, int numEncodings, ListPtr encodingsToDo) (c) == 0xAD || (c) == 0xF71B) static int -checkEncoding(FT_Face face, char *encoding_name) +checkEncoding(FT_Face face, const char *encoding_name) { FontEncPtr encoding; FontMapPtr mapping; @@ -1211,7 +1213,7 @@ find_cmap(int type, int pid, int eid, FT_Face face) } static int -checkExtraEncoding(FT_Face face, char *encoding_name, int found) +checkExtraEncoding(FT_Face face, const char *encoding_name, int found) { int c; |