>From ef6ad6e933668000ada941818b016f592056bb12 Mon Sep 17 00:00:00 2001
From: Tamas TEVESZ <i...@extreme.hu>
Date: Wed, 31 Mar 2010 04:24:17 +0200
Subject: [PATCH] Style stuff up
- convert hand-rolled arg parsers to getopt_long
- sort headers, get rid of some duplicates in the process
- in fontconv, replace magic numbers with constants (there's
little practical value to this here, but it's much nicer)
- slightly redo fontconv.c:strToInt()
---
util/convertfonts.c | 115 ++++++++++++++++++++++++++++++--------------------
util/fontconv.c | 57 +++++++++++++++++--------
util/geticonset.c | 65 +++++++++++++++++++---------
util/getstyle.c | 107 ++++++++++++++++++++++++++++-------------------
util/seticons.c | 76 ++++++++++++++++++++--------------
5 files changed, 259 insertions(+), 161 deletions(-)
diff --git a/util/convertfonts.c b/util/convertfonts.c
index 2aa79c7..7f93a93 100644
--- a/util/convertfonts.c
+++ b/util/convertfonts.c
@@ -22,11 +22,18 @@
#define PROG_VERSION "convertfonts (Window Maker) 1.0"
-#include <stdlib.h>
-#include <stdio.h>
+#ifdef __GLIBC__
+#define _GNU_SOURCE /* getopt_long */
+#endif
+
#include <sys/stat.h>
-#include <string.h>
+
+#include <getopt.h>
#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
#include <WINGs/WUtil.h>
#include "../src/wconfig.h"
@@ -48,73 +55,89 @@ extern char *__progname;
extern char *convertFont(char *font, Bool keepXLFD);
-void print_help()
+void print_help(int print_usage, int exitval)
{
- printf("\nUsage: %s <style_file>\n\n", __progname);
- puts("Converts fonts in a style file into fontconfig format");
- puts("");
- puts(" -h, --help display this help and exit");
- puts(" -v, --version output version information and exit");
- puts(" --keep-xlfd preserve the original xlfd by appending a
':xlfd=<xlfd>' hint");
- puts(" to the font name. This property is not used by
the fontconfig");
- puts(" matching engine to find the font, but it is
useful as a hint");
- puts(" about what the original font was to allow hand
tuning the");
- puts(" result or restoring the xlfd. The default is to
not add it");
- puts(" as it results in long, unreadable and confusing
names.");
- puts("");
+ printf("Usage: %s [-h] [-v] [--keep-xlfd] <style_file>\n", __progname);
+ if (print_usage) {
+ puts("Converts fonts in a style file into fontconfig format");
+ puts("");
+ puts(" -h, --help display this help and exit");
+ puts(" -v, --version output version information and exit");
+ puts(" --keep-xlfd preserve the original xlfd by appending
a ':xlfd=<xlfd>' hint");
+ puts(" to the font name. This property is not
used by the fontconfig");
+ puts(" matching engine to find the font, but it
is useful as a hint");
+ puts(" about what the original font was to
allow hand tuning the");
+ puts(" result or restoring the xlfd. The
default is to not add it");
+ puts(" as it results in long, unreadable and
confusing names.");
+ }
+ exit(exitval);
}
int main(int argc, char **argv)
{
WMPropList *style, *key, *val;
char *file = NULL, *oldfont, *newfont;
- struct stat statbuf;
+ struct stat st;
Bool keepXLFD = False;
- int i;
+ int i, ch;
+
+ struct option longopts[] = {
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { "keep-xlfd", no_argument, &keepXLFD, True },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "hv", longopts, NULL)) != -1)
+ switch(ch) {
+ case 'v':
+ puts(PROG_VERSION);
+ return 0;
+ /* NOTREACHED */
+ case 'h':
+ print_help(1, 0);
+ /* NOTREACHED */
+ case 0:
+ break;
+ default:
+ print_help(0, 1);
+ /* NOTREACHED */
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ print_help(0, 1);
- if (argc < 2) {
- print_help();
- exit(0);
+ file = argv[0];
+
+ if (stat(file, &st) != 0) {
+ perror(file);
+ return 1;
}
- for (i = 1; i < argc; i++) {
- if (strcmp("-v", argv[i]) == 0 || strcmp("--version", argv[i])
== 0) {
- puts(PROG_VERSION);
- exit(0);
- } else if (strcmp("-h", argv[i]) == 0 || strcmp("--help",
argv[i]) == 0) {
- print_help();
- exit(0);
- } else if (strcmp("--keep-xlfd", argv[i]) == 0) {
- keepXLFD = True;;
- } else if (argv[i][0] == '-') {
- printf("%s: invalid argument '%s'\n", __progname,
argv[i]);
- printf("Try '%s --help' for more information\n",
__progname);
- exit(1);
- } else {
- file = argv[i];
- }
+ if (!S_ISREG(st.st_mode)) { /* maybe symlink too? */
+ fprintf(stderr, "%s: `%s' is not a regular file\n", __progname,
file);
+ return 1;
}
/* we need this in order for MB_CUR_MAX to work */
+ /* this contradicts big time with getstyle */
setlocale(LC_ALL, "");
WMPLSetCaseSensitive(False);
- if (stat(file, &statbuf) < 0) {
- perror(file);
- exit(1);
- }
-
style = WMReadPropListFromFile(file);
if (!style) {
perror(file);
- printf("%s: could not load style file.\n", __progname);
- exit(1);
+ printf("%s: could not load style file\n", __progname);
+ return 1;
}
if (!WMIsPLDictionary(style)) {
printf("%s: '%s' is not a well formatted style file\n",
__progname, file);
- exit(1);
+ return 1;
}
for (i = 0; FontOptions[i] != NULL; i++) {
@@ -135,5 +158,5 @@ int main(int argc, char **argv)
WMWritePropListToFile(style, file);
- exit(0);
+ return 0;
}
diff --git a/util/fontconv.c b/util/fontconv.c
index e470998..e3263b4 100644
--- a/util/fontconv.c
+++ b/util/fontconv.c
@@ -1,13 +1,32 @@
-#include <string.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+
#include <WINGs/WUtil.h>
#include "../src/wconfig.h"
#define DEFAULT_FONT "sans serif:pixelsize=12"
+/* X Font Name Suffix field names */
+enum {
+ FOUNDRY,
+ FAMILY_NAME,
+ WEIGHT_NAME,
+ SLANT,
+ SETWIDTH_NAME,
+ ADD_STYLE_NAME,
+ PIXEL_SIZE,
+ POINT_SIZE,
+ RESOLUTION_X,
+ RESOLUTION_Y,
+ SPACING,
+ AVERAGE_WIDTH,
+ CHARSET_REGISTRY,
+ CHARSET_ENCODING
+};
+
static int countChar(char *str, char c)
{
int count = 0;
@@ -26,7 +45,7 @@ static int countChar(char *str, char c)
typedef struct str {
char *str;
- int len;
+ size_t len;
} str;
#define XLFD_TOKENS 14
@@ -37,6 +56,7 @@ static str *getXLFDTokens(char *xlfd)
int i, len, size;
char *ptr;
+ /* XXX: why does this assume there can't ever be XFNextPrefix? */
if (!xlfd || *xlfd != '-' || countChar(xlfd, '-') != XLFD_TOKENS)
return NULL;
@@ -62,26 +82,25 @@ static str *getXLFDTokens(char *xlfd)
static int strToInt(str * token)
{
- int res = 0, pos, c;
+ static char buf[32]; /* enough for an Incredibly Big Number */
- if (token->len == 0 || token->str[0] == '*') {
+ if (token->len == 0 ||
+ token->str[0] == '*' ||
+ token->len >= sizeof(buf))
return -1;
- } else {
- for (res = 0, pos = 0; pos < token->len; pos++) {
- c = token->str[pos] - '0';
- if (c < 0 || c > 9)
- break;
- res = res * 10 + c;
- }
- }
- return res;
+
+ memset(buf, 0, sizeof(buf));
+ strncpy(buf, token->str, token->len);
+
+ /* the code using this will gracefully handle overflows */
+ return (int)strtol(buf, NULL, 10);
}
static char *mapWeightToName(str * weight)
{
char *normalNames[] = { "medium", "normal", "regular" };
static char buf[32];
- int i;
+ size_t i;
if (weight->len == 0)
return "";
@@ -123,11 +142,11 @@ char *xlfdToFc(char *xlfd, char *useFamily, Bool keepXLFD)
if (!tokens)
return wstrdup(DEFAULT_FONT);
- family = &(tokens[1]);
- weight = &(tokens[2]);
- slant = &(tokens[3]);
- pixelsize = strToInt(&tokens[6]);
- size = strToInt(&tokens[7]);
+ family = &(tokens[FAMILY_NAME]);
+ weight = &(tokens[WEIGHT_NAME]);
+ slant = &(tokens[SLANT]);
+ pixelsize = strToInt(&tokens[PIXEL_SIZE]);
+ size = strToInt(&tokens[POINT_SIZE]);
if (useFamily) {
name = wstrdup(useFamily);
diff --git a/util/geticonset.c b/util/geticonset.c
index e21994b..2b793d5 100644
--- a/util/geticonset.c
+++ b/util/geticonset.c
@@ -22,8 +22,13 @@
#define PROG_VERSION "geticonset (Window Maker) 0.1"
-#include <stdlib.h>
+#ifdef __GLIBC__
+#define _GNU_SOURCE /* getopt_long */
+#endif
+
+#include <getopt.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <WINGs/WUtil.h>
@@ -32,13 +37,16 @@
extern char *__progname;
-void print_help()
+void print_help(int print_usage, int exitval)
{
- printf("Usage: %s [OPTIONS] [FILE]\n", __progname);
- puts("Retrieves program icon configuration and output to FILE or to
stdout");
- puts("");
- puts(" -h, --help display this help and exit");
- puts(" -v, --version output version information and exit");
+ printf("Usage: %s [-h] [-v] [file]\n", __progname);
+ if (print_usage) {
+ puts("Retrieves program icon configuration and output to FILE
or to stdout");
+ puts("");
+ puts(" -h, --help display this help and exit");
+ puts(" -v, --version output version information and exit");
+ }
+ exit(exitval);
}
int main(int argc, char **argv)
@@ -46,24 +54,39 @@ int main(int argc, char **argv)
WMPropList *window_name, *icon_key, *window_attrs, *icon_value;
WMPropList *all_windows, *iconset, *keylist;
char *path;
- int i;
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") ==
0) {
- print_help();
- exit(0);
- } else if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i],
"--version") == 0) {
- puts(PROG_VERSION);
- exit(0);
+ int i, ch;
+
+ struct option longopts[] = {
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "hv", longopts, NULL)) != -1)
+ switch(ch) {
+ case 'v':
+ puts(PROG_VERSION);
+ return 0;
+ /* NOTREACHED */
+ case 'h':
+ print_help(1, 0);
+ /* NOTREACHED */
+ case 0:
+ break;
+ default:
+ print_help(0, 1);
+ /* NOTREACHED */
}
- }
+
+ argc -= optind;
+ argv += optind;
path = wdefaultspathfordomain("WMWindowAttributes");
all_windows = WMReadPropListFromFile(path);
if (!all_windows) {
printf("%s: could not load WindowMaker configuration file
\"%s\".\n", __progname, path);
- exit(1);
+ return 1;
}
iconset = WMCreatePLDictionary(NULL, NULL);
@@ -88,10 +111,10 @@ int main(int argc, char **argv)
}
}
- if (argc == 2) {
- WMWritePropListToFile(iconset, argv[1]);
+ if (argc == 1) {
+ WMWritePropListToFile(iconset, argv[0]);
} else {
puts(WMGetPropListDescription(iconset, True));
}
- exit(0);
+ return 0;
}
diff --git a/util/getstyle.c b/util/getstyle.c
index 78f9efc..6c97d39 100644
--- a/util/getstyle.c
+++ b/util/getstyle.c
@@ -22,20 +22,25 @@
#define PROG_VERSION "getstyle (Window Maker) 0.6"
+#ifdef __GLIBC__
+#define _GNU_SOURCE /* getopt_long */
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
+#include <assert.h>
#include <errno.h>
#include <fcntl.h>
-#include <stdlib.h>
+#include <getopt.h>
+#include <libgen.h>
+#include <limits.h>
+#include <pwd.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <string.h>
-#include <pwd.h>
-#include <limits.h>
-#include <assert.h>
-#include <libgen.h>
+
#include <WINGs/WUtil.h>
#define RETRY( x ) do { \
@@ -132,15 +137,18 @@ char *ThemePath = NULL;
extern char *convertFont(char *font, Bool keepXLFD);
-void print_help()
+void print_help(int print_usage, int exitval)
{
- printf("Usage: %s [OPTIONS] [FILE]\n", __progname);
- puts("Retrieves style/theme configuration and output to FILE or to
stdout");
- puts("");
- puts(" -t, --theme-options output theme related options when
producing a style file");
- puts(" -p, --pack produce output as a theme pack");
- puts(" -h, --help display this help and exit");
- puts(" -v, --version output version information and exit");
+ printf("Usage: %s [-t] [-p] [-h] [-v] [file]\n", __progname);
+ if (print_usage) {
+ puts("Retrieves style/theme configuration and output to FILE or
to stdout");
+ puts("");
+ puts(" -h, --help display this help and exit");
+ puts(" -v, --version output version information and
exit");
+ puts(" -t, --theme-options output theme related options when
producing a style file");
+ puts(" -p, --pack produce output as a theme pack");
+ }
+ exit(exitval);
}
void abortar(char *reason)
@@ -342,44 +350,55 @@ int main(int argc, char **argv)
{
WMPropList *prop, *style, *key, *val;
char *path, *p;
- int i, theme_too = 0, make_pack = 0;
+ int i, ch, theme_too = 0, make_pack = 0;
char *style_file = NULL;
- if (argc > 1) {
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-p") == 0 || strcmp(argv[i],
"--pack") == 0) {
+ struct option longopts[] = {
+ { "pack", no_argument, NULL, 'p' },
+ { "theme-options", no_argument, NULL, 't' },
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "ptvh", longopts, NULL)) != -1)
+ switch(ch) {
+ case 'v':
+ puts(PROG_VERSION);
+ return 0;
+ /* NOTREACHED */
+ case 'h':
+ print_help(1, 0);
+ /* NOTREACHED */
+ case 'p':
make_pack = 1;
theme_too = 1;
- } else if (strcmp(argv[i], "-t") == 0 ||
strcmp(argv[i], "--theme-options") == 0) {
+ break;
+ case 't':
theme_too = 1;
- } else if (strcmp(argv[i], "-h") == 0 ||
strcmp(argv[i], "--help") == 0) {
- print_help();
- exit(0);
- } else if (strcmp(argv[i], "-v") == 0 ||
strcmp(argv[i], "--version") == 0) {
- puts(PROG_VERSION);
- exit(0);
- } else {
- if (style_file != NULL) {
- printf("%s: invalid argument '%s'\n",
__progname,
- style_file[0] == '-' ?
style_file : argv[i]);
- printf("Try '%s --help' for more
information\n", __progname);
- exit(1);
- }
- style_file = argv[i];
- while ((p = strchr(style_file, '/')) != NULL)
- *p = '_';
- }
+ case 0:
+ break;
+ default:
+ print_help(0, 1);
+ /* NOTREACHED */
}
- }
- if (style_file && !make_pack) {
- print_help();
- exit(1);
- }
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ print_help(0, 1);
+
+ style_file = argv[0];
+ while ((p = strchr(style_file, '/')) != NULL)
+ *p = '_';
+
+ if (style_file && !make_pack) /* what's this? */
+ print_help(0, 1);
if (make_pack && !style_file) {
printf("%s: you must supply a name for the theme pack\n",
__progname);
- exit(1);
+ return 1;
}
WMPLSetCaseSensitive(False);
@@ -389,7 +408,7 @@ int main(int argc, char **argv)
prop = WMReadPropListFromFile(path);
if (!prop) {
printf("%s: could not load WindowMaker configuration file
\"%s\".\n", __progname, path);
- exit(1);
+ return 1;
}
/* get global value */
@@ -459,5 +478,5 @@ int main(int argc, char **argv)
puts(WMGetPropListDescription(style, True));
}
}
- exit(0);
+ return 0;
}
diff --git a/util/seticons.c b/util/seticons.c
index 96baf98..ffd38f4 100644
--- a/util/seticons.c
+++ b/util/seticons.c
@@ -22,53 +22,67 @@
#define PROG_VERSION "seticons (Window Maker) 0.1"
-#include <stdlib.h>
+#ifdef __GLIBC__
+#define _GNU_SOURCE /* getopt_long */
+#endif
+
+#include <getopt.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
+
#include <WINGs/WUtil.h>
#include "../src/wconfig.h"
extern char *__progname;
-void print_help()
+void print_help(int print_usage, int exitval)
{
- printf("Usage: %s [OPTIONS] FILE\n", __progname);
- puts("Reads icon configuration from FILE and updates Window Maker.");
- puts("");
- puts(" -h, --help display this help and exit");
- puts(" -v, --version output version information and exit");
+ printf("Usage: %s [-h] [-v] [file]\n", __progname);
+ if (print_usage) {
+ puts("Reads icon configuration from FILE and updates Window
Maker.");
+ puts("");
+ puts(" -h, --help display this help and exit");
+ puts(" -v, --version output version information and exit");
+ }
+ exit(exitval);
}
int main(int argc, char **argv)
{
WMPropList *window_name, *icon_key, *window_attrs, *icon_value;
WMPropList *all_windows, *iconset, *keylist;
- int i;
+ int i, ch;
char *path = NULL;
- if (argc < 2) {
- printf("%s: missing argument\n", __progname);
- printf("Try '%s --help' for more information\n", __progname);
- exit(1);
- }
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") ==
0) {
- print_help();
- exit(0);
- } else if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i],
"--version") == 0) {
- puts(PROG_VERSION);
- exit(0);
- } else {
- if (path) {
- printf("%s: invalid argument '%s'\n",
__progname, argv[i]);
- printf("Try '%s --help' for more
information\n", __progname);
- exit(1);
- }
- path = argv[i];
+ struct option longopts[] = {
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "hv", longopts, NULL)) != -1)
+ switch(ch) {
+ case 'v':
+ puts(PROG_VERSION);
+ return 0;
+ /* NOTREACHED */
+ case 'h':
+ print_help(1, 0);
+ /* NOTREACHED */
+ case 0:
+ break;
+ default:
+ print_help(0, 1);
+ /* NOTREACHED */
}
- }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ print_help(0, 1);
path = wdefaultspathfordomain("WMWindowAttributes");
@@ -78,9 +92,9 @@ int main(int argc, char **argv)
exit(1);
}
- iconset = WMReadPropListFromFile(argv[1]);
+ iconset = WMReadPropListFromFile(argv[0]);
if (!iconset) {
- printf("%s: could not load icon set file \"%s\".\n",
__progname, argv[1]);
+ printf("%s: could not load icon set file \"%s\".\n",
__progname, argv[0]);
exit(1);
}
--
1.7.0
--
[-]
mkdir /nonexistent
From ef6ad6e933668000ada941818b016f592056bb12 Mon Sep 17 00:00:00 2001
From: Tamas TEVESZ <i...@extreme.hu>
Date: Wed, 31 Mar 2010 04:24:17 +0200
Subject: [PATCH] Style stuff up
- convert hand-rolled arg parsers to getopt_long
- sort headers, get rid of some duplicates in the process
- in fontconv, replace magic numbers with constants (there's
little practical value to this here, but it's much nicer)
- slightly redo fontconv.c:strToInt()
---
util/convertfonts.c | 115 ++++++++++++++++++++++++++++++--------------------
util/fontconv.c | 57 +++++++++++++++++--------
util/geticonset.c | 65 +++++++++++++++++++---------
util/getstyle.c | 107 ++++++++++++++++++++++++++++-------------------
util/seticons.c | 76 ++++++++++++++++++++--------------
5 files changed, 259 insertions(+), 161 deletions(-)
diff --git a/util/convertfonts.c b/util/convertfonts.c
index 2aa79c7..7f93a93 100644
--- a/util/convertfonts.c
+++ b/util/convertfonts.c
@@ -22,11 +22,18 @@
#define PROG_VERSION "convertfonts (Window Maker) 1.0"
-#include <stdlib.h>
-#include <stdio.h>
+#ifdef __GLIBC__
+#define _GNU_SOURCE /* getopt_long */
+#endif
+
#include <sys/stat.h>
-#include <string.h>
+
+#include <getopt.h>
#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
#include <WINGs/WUtil.h>
#include "../src/wconfig.h"
@@ -48,73 +55,89 @@ extern char *__progname;
extern char *convertFont(char *font, Bool keepXLFD);
-void print_help()
+void print_help(int print_usage, int exitval)
{
- printf("\nUsage: %s <style_file>\n\n", __progname);
- puts("Converts fonts in a style file into fontconfig format");
- puts("");
- puts(" -h, --help display this help and exit");
- puts(" -v, --version output version information and exit");
- puts(" --keep-xlfd preserve the original xlfd by appending a ':xlfd=<xlfd>' hint");
- puts(" to the font name. This property is not used by the fontconfig");
- puts(" matching engine to find the font, but it is useful as a hint");
- puts(" about what the original font was to allow hand tuning the");
- puts(" result or restoring the xlfd. The default is to not add it");
- puts(" as it results in long, unreadable and confusing names.");
- puts("");
+ printf("Usage: %s [-h] [-v] [--keep-xlfd] <style_file>\n", __progname);
+ if (print_usage) {
+ puts("Converts fonts in a style file into fontconfig format");
+ puts("");
+ puts(" -h, --help display this help and exit");
+ puts(" -v, --version output version information and exit");
+ puts(" --keep-xlfd preserve the original xlfd by appending a ':xlfd=<xlfd>' hint");
+ puts(" to the font name. This property is not used by the fontconfig");
+ puts(" matching engine to find the font, but it is useful as a hint");
+ puts(" about what the original font was to allow hand tuning the");
+ puts(" result or restoring the xlfd. The default is to not add it");
+ puts(" as it results in long, unreadable and confusing names.");
+ }
+ exit(exitval);
}
int main(int argc, char **argv)
{
WMPropList *style, *key, *val;
char *file = NULL, *oldfont, *newfont;
- struct stat statbuf;
+ struct stat st;
Bool keepXLFD = False;
- int i;
+ int i, ch;
+
+ struct option longopts[] = {
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { "keep-xlfd", no_argument, &keepXLFD, True },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "hv", longopts, NULL)) != -1)
+ switch(ch) {
+ case 'v':
+ puts(PROG_VERSION);
+ return 0;
+ /* NOTREACHED */
+ case 'h':
+ print_help(1, 0);
+ /* NOTREACHED */
+ case 0:
+ break;
+ default:
+ print_help(0, 1);
+ /* NOTREACHED */
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ print_help(0, 1);
- if (argc < 2) {
- print_help();
- exit(0);
+ file = argv[0];
+
+ if (stat(file, &st) != 0) {
+ perror(file);
+ return 1;
}
- for (i = 1; i < argc; i++) {
- if (strcmp("-v", argv[i]) == 0 || strcmp("--version", argv[i]) == 0) {
- puts(PROG_VERSION);
- exit(0);
- } else if (strcmp("-h", argv[i]) == 0 || strcmp("--help", argv[i]) == 0) {
- print_help();
- exit(0);
- } else if (strcmp("--keep-xlfd", argv[i]) == 0) {
- keepXLFD = True;;
- } else if (argv[i][0] == '-') {
- printf("%s: invalid argument '%s'\n", __progname, argv[i]);
- printf("Try '%s --help' for more information\n", __progname);
- exit(1);
- } else {
- file = argv[i];
- }
+ if (!S_ISREG(st.st_mode)) { /* maybe symlink too? */
+ fprintf(stderr, "%s: `%s' is not a regular file\n", __progname, file);
+ return 1;
}
/* we need this in order for MB_CUR_MAX to work */
+ /* this contradicts big time with getstyle */
setlocale(LC_ALL, "");
WMPLSetCaseSensitive(False);
- if (stat(file, &statbuf) < 0) {
- perror(file);
- exit(1);
- }
-
style = WMReadPropListFromFile(file);
if (!style) {
perror(file);
- printf("%s: could not load style file.\n", __progname);
- exit(1);
+ printf("%s: could not load style file\n", __progname);
+ return 1;
}
if (!WMIsPLDictionary(style)) {
printf("%s: '%s' is not a well formatted style file\n", __progname, file);
- exit(1);
+ return 1;
}
for (i = 0; FontOptions[i] != NULL; i++) {
@@ -135,5 +158,5 @@ int main(int argc, char **argv)
WMWritePropListToFile(style, file);
- exit(0);
+ return 0;
}
diff --git a/util/fontconv.c b/util/fontconv.c
index e470998..e3263b4 100644
--- a/util/fontconv.c
+++ b/util/fontconv.c
@@ -1,13 +1,32 @@
-#include <string.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+
#include <WINGs/WUtil.h>
#include "../src/wconfig.h"
#define DEFAULT_FONT "sans serif:pixelsize=12"
+/* X Font Name Suffix field names */
+enum {
+ FOUNDRY,
+ FAMILY_NAME,
+ WEIGHT_NAME,
+ SLANT,
+ SETWIDTH_NAME,
+ ADD_STYLE_NAME,
+ PIXEL_SIZE,
+ POINT_SIZE,
+ RESOLUTION_X,
+ RESOLUTION_Y,
+ SPACING,
+ AVERAGE_WIDTH,
+ CHARSET_REGISTRY,
+ CHARSET_ENCODING
+};
+
static int countChar(char *str, char c)
{
int count = 0;
@@ -26,7 +45,7 @@ static int countChar(char *str, char c)
typedef struct str {
char *str;
- int len;
+ size_t len;
} str;
#define XLFD_TOKENS 14
@@ -37,6 +56,7 @@ static str *getXLFDTokens(char *xlfd)
int i, len, size;
char *ptr;
+ /* XXX: why does this assume there can't ever be XFNextPrefix? */
if (!xlfd || *xlfd != '-' || countChar(xlfd, '-') != XLFD_TOKENS)
return NULL;
@@ -62,26 +82,25 @@ static str *getXLFDTokens(char *xlfd)
static int strToInt(str * token)
{
- int res = 0, pos, c;
+ static char buf[32]; /* enough for an Incredibly Big Number */
- if (token->len == 0 || token->str[0] == '*') {
+ if (token->len == 0 ||
+ token->str[0] == '*' ||
+ token->len >= sizeof(buf))
return -1;
- } else {
- for (res = 0, pos = 0; pos < token->len; pos++) {
- c = token->str[pos] - '0';
- if (c < 0 || c > 9)
- break;
- res = res * 10 + c;
- }
- }
- return res;
+
+ memset(buf, 0, sizeof(buf));
+ strncpy(buf, token->str, token->len);
+
+ /* the code using this will gracefully handle overflows */
+ return (int)strtol(buf, NULL, 10);
}
static char *mapWeightToName(str * weight)
{
char *normalNames[] = { "medium", "normal", "regular" };
static char buf[32];
- int i;
+ size_t i;
if (weight->len == 0)
return "";
@@ -123,11 +142,11 @@ char *xlfdToFc(char *xlfd, char *useFamily, Bool keepXLFD)
if (!tokens)
return wstrdup(DEFAULT_FONT);
- family = &(tokens[1]);
- weight = &(tokens[2]);
- slant = &(tokens[3]);
- pixelsize = strToInt(&tokens[6]);
- size = strToInt(&tokens[7]);
+ family = &(tokens[FAMILY_NAME]);
+ weight = &(tokens[WEIGHT_NAME]);
+ slant = &(tokens[SLANT]);
+ pixelsize = strToInt(&tokens[PIXEL_SIZE]);
+ size = strToInt(&tokens[POINT_SIZE]);
if (useFamily) {
name = wstrdup(useFamily);
diff --git a/util/geticonset.c b/util/geticonset.c
index e21994b..2b793d5 100644
--- a/util/geticonset.c
+++ b/util/geticonset.c
@@ -22,8 +22,13 @@
#define PROG_VERSION "geticonset (Window Maker) 0.1"
-#include <stdlib.h>
+#ifdef __GLIBC__
+#define _GNU_SOURCE /* getopt_long */
+#endif
+
+#include <getopt.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <WINGs/WUtil.h>
@@ -32,13 +37,16 @@
extern char *__progname;
-void print_help()
+void print_help(int print_usage, int exitval)
{
- printf("Usage: %s [OPTIONS] [FILE]\n", __progname);
- puts("Retrieves program icon configuration and output to FILE or to stdout");
- puts("");
- puts(" -h, --help display this help and exit");
- puts(" -v, --version output version information and exit");
+ printf("Usage: %s [-h] [-v] [file]\n", __progname);
+ if (print_usage) {
+ puts("Retrieves program icon configuration and output to FILE or to stdout");
+ puts("");
+ puts(" -h, --help display this help and exit");
+ puts(" -v, --version output version information and exit");
+ }
+ exit(exitval);
}
int main(int argc, char **argv)
@@ -46,24 +54,39 @@ int main(int argc, char **argv)
WMPropList *window_name, *icon_key, *window_attrs, *icon_value;
WMPropList *all_windows, *iconset, *keylist;
char *path;
- int i;
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) {
- print_help();
- exit(0);
- } else if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0) {
- puts(PROG_VERSION);
- exit(0);
+ int i, ch;
+
+ struct option longopts[] = {
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "hv", longopts, NULL)) != -1)
+ switch(ch) {
+ case 'v':
+ puts(PROG_VERSION);
+ return 0;
+ /* NOTREACHED */
+ case 'h':
+ print_help(1, 0);
+ /* NOTREACHED */
+ case 0:
+ break;
+ default:
+ print_help(0, 1);
+ /* NOTREACHED */
}
- }
+
+ argc -= optind;
+ argv += optind;
path = wdefaultspathfordomain("WMWindowAttributes");
all_windows = WMReadPropListFromFile(path);
if (!all_windows) {
printf("%s: could not load WindowMaker configuration file \"%s\".\n", __progname, path);
- exit(1);
+ return 1;
}
iconset = WMCreatePLDictionary(NULL, NULL);
@@ -88,10 +111,10 @@ int main(int argc, char **argv)
}
}
- if (argc == 2) {
- WMWritePropListToFile(iconset, argv[1]);
+ if (argc == 1) {
+ WMWritePropListToFile(iconset, argv[0]);
} else {
puts(WMGetPropListDescription(iconset, True));
}
- exit(0);
+ return 0;
}
diff --git a/util/getstyle.c b/util/getstyle.c
index 78f9efc..6c97d39 100644
--- a/util/getstyle.c
+++ b/util/getstyle.c
@@ -22,20 +22,25 @@
#define PROG_VERSION "getstyle (Window Maker) 0.6"
+#ifdef __GLIBC__
+#define _GNU_SOURCE /* getopt_long */
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
+#include <assert.h>
#include <errno.h>
#include <fcntl.h>
-#include <stdlib.h>
+#include <getopt.h>
+#include <libgen.h>
+#include <limits.h>
+#include <pwd.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <string.h>
-#include <pwd.h>
-#include <limits.h>
-#include <assert.h>
-#include <libgen.h>
+
#include <WINGs/WUtil.h>
#define RETRY( x ) do { \
@@ -132,15 +137,18 @@ char *ThemePath = NULL;
extern char *convertFont(char *font, Bool keepXLFD);
-void print_help()
+void print_help(int print_usage, int exitval)
{
- printf("Usage: %s [OPTIONS] [FILE]\n", __progname);
- puts("Retrieves style/theme configuration and output to FILE or to stdout");
- puts("");
- puts(" -t, --theme-options output theme related options when producing a style file");
- puts(" -p, --pack produce output as a theme pack");
- puts(" -h, --help display this help and exit");
- puts(" -v, --version output version information and exit");
+ printf("Usage: %s [-t] [-p] [-h] [-v] [file]\n", __progname);
+ if (print_usage) {
+ puts("Retrieves style/theme configuration and output to FILE or to stdout");
+ puts("");
+ puts(" -h, --help display this help and exit");
+ puts(" -v, --version output version information and exit");
+ puts(" -t, --theme-options output theme related options when producing a style file");
+ puts(" -p, --pack produce output as a theme pack");
+ }
+ exit(exitval);
}
void abortar(char *reason)
@@ -342,44 +350,55 @@ int main(int argc, char **argv)
{
WMPropList *prop, *style, *key, *val;
char *path, *p;
- int i, theme_too = 0, make_pack = 0;
+ int i, ch, theme_too = 0, make_pack = 0;
char *style_file = NULL;
- if (argc > 1) {
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-p") == 0 || strcmp(argv[i], "--pack") == 0) {
+ struct option longopts[] = {
+ { "pack", no_argument, NULL, 'p' },
+ { "theme-options", no_argument, NULL, 't' },
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "ptvh", longopts, NULL)) != -1)
+ switch(ch) {
+ case 'v':
+ puts(PROG_VERSION);
+ return 0;
+ /* NOTREACHED */
+ case 'h':
+ print_help(1, 0);
+ /* NOTREACHED */
+ case 'p':
make_pack = 1;
theme_too = 1;
- } else if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--theme-options") == 0) {
+ break;
+ case 't':
theme_too = 1;
- } else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) {
- print_help();
- exit(0);
- } else if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0) {
- puts(PROG_VERSION);
- exit(0);
- } else {
- if (style_file != NULL) {
- printf("%s: invalid argument '%s'\n", __progname,
- style_file[0] == '-' ? style_file : argv[i]);
- printf("Try '%s --help' for more information\n", __progname);
- exit(1);
- }
- style_file = argv[i];
- while ((p = strchr(style_file, '/')) != NULL)
- *p = '_';
- }
+ case 0:
+ break;
+ default:
+ print_help(0, 1);
+ /* NOTREACHED */
}
- }
- if (style_file && !make_pack) {
- print_help();
- exit(1);
- }
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ print_help(0, 1);
+
+ style_file = argv[0];
+ while ((p = strchr(style_file, '/')) != NULL)
+ *p = '_';
+
+ if (style_file && !make_pack) /* what's this? */
+ print_help(0, 1);
if (make_pack && !style_file) {
printf("%s: you must supply a name for the theme pack\n", __progname);
- exit(1);
+ return 1;
}
WMPLSetCaseSensitive(False);
@@ -389,7 +408,7 @@ int main(int argc, char **argv)
prop = WMReadPropListFromFile(path);
if (!prop) {
printf("%s: could not load WindowMaker configuration file \"%s\".\n", __progname, path);
- exit(1);
+ return 1;
}
/* get global value */
@@ -459,5 +478,5 @@ int main(int argc, char **argv)
puts(WMGetPropListDescription(style, True));
}
}
- exit(0);
+ return 0;
}
diff --git a/util/seticons.c b/util/seticons.c
index 96baf98..ffd38f4 100644
--- a/util/seticons.c
+++ b/util/seticons.c
@@ -22,53 +22,67 @@
#define PROG_VERSION "seticons (Window Maker) 0.1"
-#include <stdlib.h>
+#ifdef __GLIBC__
+#define _GNU_SOURCE /* getopt_long */
+#endif
+
+#include <getopt.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
+
#include <WINGs/WUtil.h>
#include "../src/wconfig.h"
extern char *__progname;
-void print_help()
+void print_help(int print_usage, int exitval)
{
- printf("Usage: %s [OPTIONS] FILE\n", __progname);
- puts("Reads icon configuration from FILE and updates Window Maker.");
- puts("");
- puts(" -h, --help display this help and exit");
- puts(" -v, --version output version information and exit");
+ printf("Usage: %s [-h] [-v] [file]\n", __progname);
+ if (print_usage) {
+ puts("Reads icon configuration from FILE and updates Window Maker.");
+ puts("");
+ puts(" -h, --help display this help and exit");
+ puts(" -v, --version output version information and exit");
+ }
+ exit(exitval);
}
int main(int argc, char **argv)
{
WMPropList *window_name, *icon_key, *window_attrs, *icon_value;
WMPropList *all_windows, *iconset, *keylist;
- int i;
+ int i, ch;
char *path = NULL;
- if (argc < 2) {
- printf("%s: missing argument\n", __progname);
- printf("Try '%s --help' for more information\n", __progname);
- exit(1);
- }
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) {
- print_help();
- exit(0);
- } else if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0) {
- puts(PROG_VERSION);
- exit(0);
- } else {
- if (path) {
- printf("%s: invalid argument '%s'\n", __progname, argv[i]);
- printf("Try '%s --help' for more information\n", __progname);
- exit(1);
- }
- path = argv[i];
+ struct option longopts[] = {
+ { "version", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "hv", longopts, NULL)) != -1)
+ switch(ch) {
+ case 'v':
+ puts(PROG_VERSION);
+ return 0;
+ /* NOTREACHED */
+ case 'h':
+ print_help(1, 0);
+ /* NOTREACHED */
+ case 0:
+ break;
+ default:
+ print_help(0, 1);
+ /* NOTREACHED */
}
- }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
+ print_help(0, 1);
path = wdefaultspathfordomain("WMWindowAttributes");
@@ -78,9 +92,9 @@ int main(int argc, char **argv)
exit(1);
}
- iconset = WMReadPropListFromFile(argv[1]);
+ iconset = WMReadPropListFromFile(argv[0]);
if (!iconset) {
- printf("%s: could not load icon set file \"%s\".\n", __progname, argv[1]);
+ printf("%s: could not load icon set file \"%s\".\n", __progname, argv[0]);
exit(1);
}
--
1.7.0