summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2011-11-30 09:02:14 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2011-11-30 09:02:14 +0000
commitdf8e76c055ba66a5b735d3353fba86a389c77bb0 (patch)
tree96752877f2b2ddc7b10518c9256c0b43f6d78c7c
parent7c4053deb191465c4b3771f7922a72a8e2956882 (diff)
More softlist validation (no whatsnew)
-rw-r--r--src/emu/softlist.c55
1 files changed, 47 insertions, 8 deletions
diff --git a/src/emu/softlist.c b/src/emu/softlist.c
index bad432a11cc..298ab5c2fbf 100644
--- a/src/emu/softlist.c
+++ b/src/emu/softlist.c
@@ -456,6 +456,9 @@ static void start_handler(void *data, const char *tagname, const char **attribut
}
else
{
+ parse_error(&swlist->state, "%s: No name defined for item (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
+
swlist->softinfo = NULL;
}
}
@@ -518,6 +521,9 @@ static void start_handler(void *data, const char *tagname, const char **attribut
}
add_info( swlist, name, value );
+ } else {
+ parse_error(&swlist->state, "%s: Incomplete sharedfeat definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
}
}
else if ( !strcmp(tagname, "part" ) )
@@ -563,6 +569,8 @@ static void start_handler(void *data, const char *tagname, const char **attribut
else
{
/* Incomplete/incorrect part definition */
+ parse_error(&swlist->state, "%s: Incomplete part definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
}
}
else
@@ -608,6 +616,8 @@ static void start_handler(void *data, const char *tagname, const char **attribut
else
{
/* Missing dataarea name or size */
+ parse_error(&swlist->state, "%s: Incomplete dataarea definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
}
}
else if (!strcmp(tagname, "diskarea"))
@@ -639,6 +649,8 @@ static void start_handler(void *data, const char *tagname, const char **attribut
else
{
/* Missing dataarea name or size */
+ parse_error(&swlist->state, "%s: Incomplete diskarea definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
}
}
else if ( !strcmp(tagname, "feature") )
@@ -680,6 +692,9 @@ static void start_handler(void *data, const char *tagname, const char **attribut
}
add_feature( swlist, name, value );
+ } else {
+ parse_error(&swlist->state, "%s: Incomplete feature definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
}
}
else if (!strcmp(tagname, "dipswitch"))
@@ -751,10 +766,13 @@ static void start_handler(void *data, const char *tagname, const char **attribut
}
else
{
- if ( str_name && str_crc && str_sha1 )
+ if ( str_name)
{
char *s_name = (char *)pool_malloc_lib(swlist->pool, ( strlen( str_name ) + 1 ) * sizeof(char) );
- char *hashdata = (char *)pool_malloc_lib( swlist->pool, sizeof(char) * ( strlen(str_crc) + strlen(str_sha1) + 7 + 4 ) );
+ int hashsize = 7 + 4;
+ if (str_crc) hashsize+= strlen(str_crc);
+ if (str_sha1) hashsize+= strlen(str_sha1);
+ char *hashdata = (char *)pool_malloc_lib( swlist->pool, sizeof(char) * (hashsize) );
int baddump = ( str_status && !strcmp(str_status, "baddump") ) ? 1 : 0;
int nodump = ( str_status && !strcmp(str_status, "nodump" ) ) ? 1 : 0;
int romflags = 0;
@@ -763,7 +781,20 @@ static void start_handler(void *data, const char *tagname, const char **attribut
return;
strcpy( s_name, str_name );
- sprintf( hashdata, "%c%s%c%s%s", hash_collection::HASH_CRC, str_crc, hash_collection::HASH_SHA1, str_sha1, ( nodump ? NO_DUMP : ( baddump ? BAD_DUMP : "" ) ) );
+ if (nodump) {
+ sprintf( hashdata, "%s", NO_DUMP);
+ if (str_crc && str_sha1) {
+ parse_error(&swlist->state, "%s: No need for hash definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
+ }
+ } else {
+ if (str_crc && str_sha1) {
+ sprintf( hashdata, "%c%s%c%s%s", hash_collection::HASH_CRC, str_crc, hash_collection::HASH_SHA1, str_sha1, (baddump ? BAD_DUMP : ""));
+ } else {
+ parse_error(&swlist->state, "%s: Incomplete rom hash definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
+ }
+ }
/* Handle loadflag attribute */
if ( str_loadflag && !strcmp(str_loadflag, "load16_word_swap") )
@@ -779,14 +810,19 @@ static void start_handler(void *data, const char *tagname, const char **attribut
/* ROM_LOAD( name, offset, length, hash ) */
add_rom_entry( swlist, s_name, hashdata, offset, length, ROMENTRYTYPE_ROM | romflags );
+ } else {
+ parse_error(&swlist->state, "%s: Rom name missing (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
}
}
}
- }
- else
- {
- /* Missing name, size, crc, sha1, or offset */
- }
+ else
+ {
+ /* Missing name, size, crc, sha1, or offset */
+ parse_error(&swlist->state, "%s: Incomplete rom definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
+ }
+ }
}
else
if (!strcmp(tagname, "disk"))
@@ -826,6 +862,9 @@ static void start_handler(void *data, const char *tagname, const char **attribut
sprintf( hashdata, "%c%s%s", hash_collection::HASH_SHA1, str_sha1, ( nodump ? NO_DUMP : ( baddump ? BAD_DUMP : "" ) ) );
add_rom_entry( swlist, s_name, hashdata, 0, 0, ROMENTRYTYPE_ROM | (writeable ? DISK_READWRITE : DISK_READONLY ) );
+ } else {
+ parse_error(&swlist->state, "%s: Incomplete disk definition (line %lu)\n",
+ swlist->file->filename(),XML_GetCurrentLineNumber(swlist->state.parser));
}
}
}