>From dec00bfb90fee6ae008f76f7c598724aa9475707 Mon Sep 17 00:00:00 2001
From: Tamas TEVESZ <[email protected]>
Date: Sat, 9 Oct 2010 09:23:40 +0200
Subject: [PATCH] wmmenugen: Add file name validator function
Add optional interface parsers may choose to implement that, when
a directory is being scanned for files to parse, may, based on
the file name, decide whether or not said file should be parsed.
Signed-off-by: Tamas TEVESZ <[email protected]>
---
util/wmmenugen.c | 21 ++++++++++++++-------
util/wmmenugen.h | 2 ++
util/wmmenugen_parse_wmconfig.c | 10 ++++++++++
3 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/util/wmmenugen.c b/util/wmmenugen.c
index cbb55d8..a87a001 100644
--- a/util/wmmenugen.c
+++ b/util/wmmenugen.c
@@ -44,6 +44,7 @@ static int menuSortFunc(const void *left, const void *right);
static int nodeFindSubMenuByNameFunc(const void *item, const void *cdata);
static WMTreeNode *findPositionInMenu(char *submenu);
static void (*parse)(const char *file, void
(*addWMMenuEntryCallback)(WMMenuEntry *aEntry));
+static Bool (*validateFilename)(const char *filename);
static WMArray *plMenuNodes;
char *terminal;
@@ -59,6 +60,7 @@ int main(int argc, char **argv)
plMenuNodes = WMCreateArray(8); /* grows on demand */
menu = (WMTreeNode *)NULL;
parse = NULL;
+ validateFilename = NULL;
/* assemblePLMenuFunc passes this around */
previousDepth = (int *)wmalloc(sizeof(int));
@@ -90,6 +92,7 @@ int main(int argc, char **argv)
fputs("Using parser \"wmconfig\"\n", stderr);
#endif
parse = &parse_wmconfig;
+ validateFilename = &wmconfig_validate_file;
} else {
fprintf(stderr, "%s: Unknown parser \"%s\"\n",
__progname, argv[i] + 8);
}
@@ -142,6 +145,10 @@ static int dirParseFunc(const char *filename, const struct
stat *st, int tflags,
(void)tflags;
(void)ftw;
+ if (validateFilename &&
+ !validateFilename(filename))
+ return 0;
+
parse(filename, addWMMenuEntryCallback);
return 0;
}
@@ -196,7 +203,7 @@ static void assemblePLMenuFunc(WMTreeNode *aNode, void
*data)
pDepth = *(int *)data;
if (pDepth > cDepth) { /* just ascended out of
a/several submenu(s) */
- WMPropList *last, *but; /* merge the
differences */
+ WMPropList *last, *but; /* merge the tail up to
the current position */
int i;
for (i = pDepth - cDepth; i > 0; i--) {
last = WMPopFromArray(plMenuNodes);
@@ -239,12 +246,12 @@ static void assemblePLMenuFunc(WMTreeNode *aNode, void
*data)
snprintf(buf, sizeof(buf), "%s -e \"%s\"",
terminal, wm->CmdLine);
else
snprintf(buf, sizeof(buf), "%s", wm->CmdLine);
- WMAddToPLArray(pl, WMCreatePLArray(
- WMCreatePLString(wm->Name),
- WMCreatePLString("SHEXEC"),
- WMCreatePLString(buf),
- NULL)
- );
+ WMAddToPLArray(pl, WMCreatePLArray(
+ WMCreatePLString(wm->Name),
+ WMCreatePLString("SHEXEC"),
+ WMCreatePLString(buf),
+ NULL)
+ );
}
WMAddToArray(plMenuNodes, pl);
}
diff --git a/util/wmmenugen.h b/util/wmmenugen.h
index 920c6e3..61bb06a 100644
--- a/util/wmmenugen.h
+++ b/util/wmmenugen.h
@@ -57,3 +57,5 @@ Bool fileInPath(const char *file);
*/
void parse_xdg(const char *file, void (*addWMMenuEntryCallback)(WMMenuEntry
*aEntry));
void parse_wmconfig(const char *file, void
(*addWMMenuEntryCallback)(WMMenuEntry *aEntry));
+Bool wmconfig_validate_file(const char *filename);
+
diff --git a/util/wmmenugen_parse_wmconfig.c b/util/wmmenugen_parse_wmconfig.c
index 26d1f7a..6b244d8 100644
--- a/util/wmmenugen_parse_wmconfig.c
+++ b/util/wmmenugen_parse_wmconfig.c
@@ -129,6 +129,16 @@ void parse_wmconfig(const char *file, void
(*addWMMenuEntryCallback)(WMMenuEntry
}
}
+/* an example to illustrate validateFilename.
+ * with wmconfig, no special handling is needed
+ */
+Bool wmconfig_validate_file(const char *filename)
+{
+ (void)filename;
+
+ return True;
+}
+
/* get a line allocating label, key and value as necessary */
static void parse_wmconfig_line(char **label, char **key, char **value, char
*line)
{
--
1.7.0.4
--
[-]
mkdir /nonexistentFrom dec00bfb90fee6ae008f76f7c598724aa9475707 Mon Sep 17 00:00:00 2001
From: Tamas TEVESZ <[email protected]>
Date: Sat, 9 Oct 2010 09:23:40 +0200
Subject: [PATCH] wmmenugen: Add file name validator function
Add optional interface parsers may choose to implement that, when
a directory is being scanned for files to parse, may, based on
the file name, decide whether or not said file should be parsed.
Signed-off-by: Tamas TEVESZ <[email protected]>
---
util/wmmenugen.c | 21 ++++++++++++++-------
util/wmmenugen.h | 2 ++
util/wmmenugen_parse_wmconfig.c | 10 ++++++++++
3 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/util/wmmenugen.c b/util/wmmenugen.c
index cbb55d8..a87a001 100644
--- a/util/wmmenugen.c
+++ b/util/wmmenugen.c
@@ -44,6 +44,7 @@ static int menuSortFunc(const void *left, const void *right);
static int nodeFindSubMenuByNameFunc(const void *item, const void *cdata);
static WMTreeNode *findPositionInMenu(char *submenu);
static void (*parse)(const char *file, void (*addWMMenuEntryCallback)(WMMenuEntry *aEntry));
+static Bool (*validateFilename)(const char *filename);
static WMArray *plMenuNodes;
char *terminal;
@@ -59,6 +60,7 @@ int main(int argc, char **argv)
plMenuNodes = WMCreateArray(8); /* grows on demand */
menu = (WMTreeNode *)NULL;
parse = NULL;
+ validateFilename = NULL;
/* assemblePLMenuFunc passes this around */
previousDepth = (int *)wmalloc(sizeof(int));
@@ -90,6 +92,7 @@ int main(int argc, char **argv)
fputs("Using parser \"wmconfig\"\n", stderr);
#endif
parse = &parse_wmconfig;
+ validateFilename = &wmconfig_validate_file;
} else {
fprintf(stderr, "%s: Unknown parser \"%s\"\n", __progname, argv[i] + 8);
}
@@ -142,6 +145,10 @@ static int dirParseFunc(const char *filename, const struct stat *st, int tflags,
(void)tflags;
(void)ftw;
+ if (validateFilename &&
+ !validateFilename(filename))
+ return 0;
+
parse(filename, addWMMenuEntryCallback);
return 0;
}
@@ -196,7 +203,7 @@ static void assemblePLMenuFunc(WMTreeNode *aNode, void *data)
pDepth = *(int *)data;
if (pDepth > cDepth) { /* just ascended out of a/several submenu(s) */
- WMPropList *last, *but; /* merge the differences */
+ WMPropList *last, *but; /* merge the tail up to the current position */
int i;
for (i = pDepth - cDepth; i > 0; i--) {
last = WMPopFromArray(plMenuNodes);
@@ -239,12 +246,12 @@ static void assemblePLMenuFunc(WMTreeNode *aNode, void *data)
snprintf(buf, sizeof(buf), "%s -e \"%s\"", terminal, wm->CmdLine);
else
snprintf(buf, sizeof(buf), "%s", wm->CmdLine);
- WMAddToPLArray(pl, WMCreatePLArray(
- WMCreatePLString(wm->Name),
- WMCreatePLString("SHEXEC"),
- WMCreatePLString(buf),
- NULL)
- );
+ WMAddToPLArray(pl, WMCreatePLArray(
+ WMCreatePLString(wm->Name),
+ WMCreatePLString("SHEXEC"),
+ WMCreatePLString(buf),
+ NULL)
+ );
}
WMAddToArray(plMenuNodes, pl);
}
diff --git a/util/wmmenugen.h b/util/wmmenugen.h
index 920c6e3..61bb06a 100644
--- a/util/wmmenugen.h
+++ b/util/wmmenugen.h
@@ -57,3 +57,5 @@ Bool fileInPath(const char *file);
*/
void parse_xdg(const char *file, void (*addWMMenuEntryCallback)(WMMenuEntry *aEntry));
void parse_wmconfig(const char *file, void (*addWMMenuEntryCallback)(WMMenuEntry *aEntry));
+Bool wmconfig_validate_file(const char *filename);
+
diff --git a/util/wmmenugen_parse_wmconfig.c b/util/wmmenugen_parse_wmconfig.c
index 26d1f7a..6b244d8 100644
--- a/util/wmmenugen_parse_wmconfig.c
+++ b/util/wmmenugen_parse_wmconfig.c
@@ -129,6 +129,16 @@ void parse_wmconfig(const char *file, void (*addWMMenuEntryCallback)(WMMenuEntry
}
}
+/* an example to illustrate validateFilename.
+ * with wmconfig, no special handling is needed
+ */
+Bool wmconfig_validate_file(const char *filename)
+{
+ (void)filename;
+
+ return True;
+}
+
/* get a line allocating label, key and value as necessary */
static void parse_wmconfig_line(char **label, char **key, char **value, char *line)
{
--
1.7.0.4