[xiph-commits] r12549 - trunk/ezstream/src
moritz at svn.xiph.org
moritz at svn.xiph.org
Sat Feb 24 15:26:17 PST 2007
Author: moritz
Date: 2007-02-24 15:26:16 -0800 (Sat, 24 Feb 2007)
New Revision: 12549
Modified:
trunk/ezstream/src/configfile.c
Log:
Merge new parseConfig() function. There were many changes, but those are too
cumbersome to merge separately. They are:
* The usual formatting nitpickings.
* Don't leak memory in case of duplicate entries. Instead make it an error
and print a helpful error message, with config file line number, to the
user.
* Replace the manual cast to (const xmlChar *) with libxml2's BAD_CAST.
There probably won't be any UTF8 support in Ezstream any time soon ...
* Remove redundant strlen() check - xmlNodeListGetString() never returns
an empty string if (cur->xmlChildrenNode != NULL).
* Use xstrdup() instead of malloc() + memset() + strcpy().
* Ensure that boolean configration options are always either 1 or 0.
* Ensure that path names given via <filename /> do not exceed PATH_MAX.
* Add <shuffle /> configuration option for playlist shuffling.
Modified: trunk/ezstream/src/configfile.c
===================================================================
--- trunk/ezstream/src/configfile.c 2007-02-24 23:05:51 UTC (rev 12548)
+++ trunk/ezstream/src/configfile.c 2007-02-24 23:26:16 UTC (rev 12549)
@@ -134,233 +134,335 @@
memset(cfg, 0, sizeof(EZCONFIG));
}
-int parseConfig(const char *fileName)
+int
+parseConfig(const char *fileName)
{
- xmlDocPtr doc;
- xmlNodePtr cur;
- char *ls_xmlContentPtr;
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+ char *ls_xmlContentPtr;
+ int shuffle_set, svrinfopublic_set;
- doc = xmlParseFile(fileName);
- if (doc == NULL) {
- printf("Unable to parse config file (%s)", fileName);
- return 0;
+ xmlLineNumbersDefault(1);
+ if ((doc = xmlParseFile(fileName)) == NULL) {
+ printf("%s: Parse error (not well-formed XML.)\n", fileName);
+ return (0);
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
- printf("Unable to parse config file (empty document)(%s)", fileName);
+ printf("%s: Parse error (empty XML document.)\n", fileName);
xmlFreeDoc(doc);
- return 0;
+ return (0);
}
memset(&ezConfig, '\000', sizeof(ezConfig));
+ shuffle_set = 0;
+ svrinfopublic_set = 0;
cur = cur->xmlChildrenNode;
while (cur != NULL) {
- if (!xmlStrcmp(cur->name, (const xmlChar *) "url")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "url")) {
+ if (ezConfig.URL != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <url> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.URL = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.URL, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.URL, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.URL = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "sourcepassword")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "sourcepassword")) {
+ if (ezConfig.password != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <sourcepassword> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.password = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.password, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.password, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.password = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "format")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "format")) {
+ if (ezConfig.format != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <format> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.format = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.format, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.format, ls_xmlContentPtr);
- }
+ char *p;
+
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.format = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
+ for (p = ezConfig.format; *p != '\0'; p++)
+ *p = toupper((int)*p);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "filename")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "filename")) {
+ if (ezConfig.fileName != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <filename> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.fileName = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.fileName, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.fileName, ls_xmlContentPtr);
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ if (strlen(ls_xmlContentPtr) > PATH_MAX - 1) {
+ printf("%s[%ld]: Error: Path or filename in <filename> is too long.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
}
+ ezConfig.fileName = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfoname")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "shuffle")) {
+ if (shuffle_set) {
+ printf("%s[%ld]: Error: Cannot have multiple <shuffle> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverName = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.serverName, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.serverName, ls_xmlContentPtr);
- }
+ int tmp;
+
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ tmp = atoi(ls_xmlContentPtr);
+ ezConfig.shuffle = (tmp == 0) ? 0 : 1;
xmlFree(ls_xmlContentPtr);
+ shuffle_set = 1;
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfourl")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfoname")) {
+ if (ezConfig.serverName != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfoname> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverURL = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.serverURL, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.serverURL, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.serverName = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfogenre")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfourl")) {
+ if (ezConfig.serverURL != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfourl> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverGenre = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.serverGenre, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.serverGenre, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.serverURL = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfodescription")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfogenre")) {
+ if (ezConfig.serverGenre != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfogenre> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverDescription = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.serverDescription, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.serverDescription, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.serverGenre = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfobitrate")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfodescription")) {
+ if (ezConfig.serverDescription != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfodescription> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverBitrate = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.serverBitrate, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.serverBitrate, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.serverDescription = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfobitrate")) {
+ if (ezConfig.serverBitrate != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfobitrate> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
+ if (cur->xmlChildrenNode != NULL) {
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.serverBitrate = xstrdup(ls_xmlContentPtr);
+ xmlFree(ls_xmlContentPtr);
+ }
+ }
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfochannels")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfochannels")) {
+ if (ezConfig.serverChannels != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfochannels> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverChannels = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.serverChannels, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.serverChannels, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.serverChannels = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfosamplerate")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfosamplerate")) {
+ if (ezConfig.serverSamplerate != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfosamplerate> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverSamplerate = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.serverSamplerate, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.serverSamplerate, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.serverSamplerate = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfoquality")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfoquality")) {
+ if (ezConfig.serverQuality != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfoquality> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverQuality = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(ezConfig.serverQuality, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(ezConfig.serverQuality, ls_xmlContentPtr);
- }
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ ezConfig.serverQuality = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "svrinfopublic")) {
+ if (!xmlStrcmp(cur->name, BAD_CAST "svrinfopublic")) {
+ if (svrinfopublic_set) {
+ printf("%s[%ld]: Error: Cannot have multiple <svrinfopublic> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.serverPublic = atoi(ls_xmlContentPtr);
- }
+ int tmp;
+
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+ tmp = atoi(ls_xmlContentPtr);
+ ezConfig.serverPublic = (tmp == 0) ? 0 : 1;
xmlFree(ls_xmlContentPtr);
+ svrinfopublic_set = 1;
}
}
- if (!xmlStrcmp(cur->name, (const xmlChar *) "reencode")) {
- xmlNodePtr cur2;
+ if (!xmlStrcmp(cur->name, BAD_CAST "reencode")) {
+ xmlNodePtr cur2;
+ int enable_set;
+
+ enable_set = 0;
cur2 = cur->xmlChildrenNode;
while (cur2 != NULL) {
- if (!xmlStrcmp(cur2->name, (const xmlChar *) "enable")) {
+ if (!xmlStrcmp(cur2->name, BAD_CAST "enable")) {
+ if (enable_set) {
+ printf("%s[%ld]: Error: Cannot have multiple <enable> elements.\n",
+ fileName, xmlGetLineNo(cur));
+ goto config_error;
+ }
if (cur2->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur2->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- ezConfig.reencode = atoi(ls_xmlContentPtr);
- }
+ int tmp;
+
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur2->xmlChildrenNode, 1);
+ tmp = atoi(ls_xmlContentPtr);
+ ezConfig.reencode = (tmp == 0) ? 0 : 1;
xmlFree(ls_xmlContentPtr);
+ enable_set = 1;
}
}
- if (!xmlStrcmp(cur2->name, (const xmlChar *) "encdec")) {
- xmlNodePtr cur3;
- FORMAT_ENCDEC *pformatEncDec = malloc(sizeof(FORMAT_ENCDEC));
- memset(pformatEncDec, '\000', sizeof(FORMAT_ENCDEC));
+ if (!xmlStrcmp(cur2->name, BAD_CAST "encdec")) {
+ xmlNodePtr cur3;
+ FORMAT_ENCDEC *pformatEncDec;
+ char *p;
+
+ pformatEncDec = xcalloc(1, sizeof(FORMAT_ENCDEC));
+
cur3 = cur2->xmlChildrenNode;
while (cur3 != NULL) {
- if (!xmlStrcmp(cur3->name, (const xmlChar *) "format")) {
+ if (!xmlStrcmp(cur3->name, BAD_CAST "format")) {
+ if (pformatEncDec->format != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <format> elements.\n",
+ fileName, xmlGetLineNo(cur3));
+ goto config_error;
+ }
if (cur3->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur3->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- pformatEncDec->format = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(pformatEncDec->format, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(pformatEncDec->format, ls_xmlContentPtr);
- }
+ char *p;
+
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1);
+ pformatEncDec->format = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
+ for (p = pformatEncDec->format; *p != '\0'; p++)
+ *p = toupper((int)*p);
}
}
- if (!xmlStrcmp(cur3->name, (const xmlChar *) "match")) {
+ if (!xmlStrcmp(cur3->name, BAD_CAST "match")) {
+ if (pformatEncDec->match != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <match> elements.\n",
+ fileName, xmlGetLineNo(cur3));
+ goto config_error;
+ }
if (cur3->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur3->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- pformatEncDec->match = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(pformatEncDec->match, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(pformatEncDec->match, ls_xmlContentPtr);
- }
+ char *p;
+
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1);
+ pformatEncDec->match = xstrdup(ls_xmlContentPtr);
xmlFree(ls_xmlContentPtr);
+ for (p = pformatEncDec->match; *p != '\0'; p++)
+ *p = tolower((int)*p);
}
}
- if (!xmlStrcmp(cur3->name, (const xmlChar *) "decode")) {
+ if (!xmlStrcmp(cur3->name, BAD_CAST "decode")) {
+ if (pformatEncDec->decoder != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <decode> elements.\n",
+ fileName, xmlGetLineNo(cur3));
+ goto config_error;
+ }
if (cur3->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur3->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- pformatEncDec->decoder = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(pformatEncDec->decoder, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(pformatEncDec->decoder, ls_xmlContentPtr);
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1);
+ pformatEncDec->decoder = xstrdup(ls_xmlContentPtr);
+ xmlFree(ls_xmlContentPtr);
+ if ((p = strstr(pformatEncDec->decoder, TRACK_PLACEHOLDER)) != NULL) {
+ p += strlen(TRACK_PLACEHOLDER);
+ if ((p = strstr(p, TRACK_PLACEHOLDER)) != NULL) {
+ printf("%s[%ld]: Error: Multiple `%s' placeholders in decoder command\n",
+ fileName, xmlGetLineNo(cur3), TRACK_PLACEHOLDER);
+ goto config_error;
+ }
}
- xmlFree(ls_xmlContentPtr);
+ if ((p = strstr(pformatEncDec->decoder, METADATA_PLACEHOLDER)) != NULL) {
+ p += strlen(METADATA_PLACEHOLDER);
+ if ((p = strstr(p, METADATA_PLACEHOLDER)) != NULL) {
+ printf("%s[%ld]: Error: Multiple `%s' placeholders in decoder command\n",
+ fileName, xmlGetLineNo(cur3), METADATA_PLACEHOLDER);
+ goto config_error;
+ }
+ }
}
}
- if (!xmlStrcmp(cur3->name, (const xmlChar *) "encode")) {
+ if (!xmlStrcmp(cur3->name, BAD_CAST "encode")) {
+ if (pformatEncDec->encoder != NULL) {
+ printf("%s[%ld]: Error: Cannot have multiple <encode> elements.\n",
+ fileName, xmlGetLineNo(cur3));
+ goto config_error;
+ }
if (cur3->xmlChildrenNode != NULL) {
- ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur3->xmlChildrenNode,1);
- if ( strlen(ls_xmlContentPtr) > 0 ) {
- pformatEncDec->encoder = (char *)malloc(strlen(ls_xmlContentPtr) +1);
- memset(pformatEncDec->encoder, '\000', strlen(ls_xmlContentPtr) +1);
- strcpy(pformatEncDec->encoder, ls_xmlContentPtr);
+ ls_xmlContentPtr = (char *)xmlNodeListGetString(doc, cur3->xmlChildrenNode, 1);
+ pformatEncDec->encoder = xstrdup(ls_xmlContentPtr);
+ xmlFree(ls_xmlContentPtr);
+ if ((p = strstr(pformatEncDec->encoder, TRACK_PLACEHOLDER)) != NULL) {
+ printf("%s[%ld]: Error: `%s' placeholder not allowed in encoder command\n",
+ fileName, xmlGetLineNo(cur3), TRACK_PLACEHOLDER);
+ goto config_error;
}
- xmlFree(ls_xmlContentPtr);
+ if ((p = strstr(pformatEncDec->encoder, METADATA_PLACEHOLDER)) != NULL) {
+ p += strlen(METADATA_PLACEHOLDER);
+ if ((p = strstr(p, METADATA_PLACEHOLDER)) != NULL) {
+ printf("%s[%ld]: Error: Multiple `%s' placeholders in encoder command\n",
+ fileName, xmlGetLineNo(cur3), METADATA_PLACEHOLDER);
+ goto config_error;
+ }
+ }
}
}
cur3 = cur3->next;
@@ -373,5 +475,13 @@
}
cur = cur->next;
}
+
+ xmlFreeDoc(doc);
return(1);
+
+config_error:
+
+ xmlFreeDoc(doc);
+ freeConfig(&ezConfig);
+ return (0);
}
More information about the commits
mailing list