if ( sscanf(c, "%d:%d:%x:%x:%x:%x:%n", &type, &flags, &data[0], &data[1], &data[2], &data[3], &pathl) < 2 )
type = idInvalid;
}
-
if (pathl)
{
const char *pathstr = c+pathl;
- const char *namestr = strchr(pathstr, ':');
+ const char *namestr = NULL;
+ int found = strlen(pathstr)-1;
+ for(;found >= 0;found--)
+ {
+ if(pathstr[found] == ':')
+ break;
+ }
+ if (found != -1)
+ namestr = pathstr + found;
if (namestr)
{
- if (pathstr != namestr)
- path.assign(pathstr, namestr-pathstr);
- if (*(namestr+1))
- name=namestr+1;
+ if (!strncmp(namestr, "://", 3)) // The path is a url (e.g. "http://...")
+ {
+ namestr = strchr(namestr, ' ');
+ if (namestr)
+ {
+ path.assign(pathstr, namestr - pathstr);
+ if (*(namestr + 1))
+ name = namestr + 1;
+ }
+ }
+ else
+ {
+ if (pathstr != namestr)
+ path.assign(pathstr, namestr-pathstr);
+ if (*(namestr+1))
+ name=namestr+1;
+ }
}
else
path=pathstr;
return 0;
}
+RESULT eServiceCenter::addFactoryExtension(int id, const char *extension)
+{
+ std::map<int, std::list<std::string> >::iterator it = extensions.find(id);
+ if (it == extensions.end())
+ return -1;
+ it->second.push_back(extension);
+ return 0;
+}
+
+RESULT eServiceCenter::removeFactoryExtension(int id, const char *extension)
+{
+ std::map<int, std::list<std::string> >::iterator it = extensions.find(id);
+ if (it == extensions.end())
+ return -1;
+ it->second.remove(extension);
+ return 0;
+}
+
+
int eServiceCenter::getServiceTypeForExtension(const char *str)
{
for (std::map<int, std::list<std::string> >::iterator sit(extensions.begin()); sit != extensions.end(); ++sit)