Add a helper to list the MIME types supported

This commit is contained in:
Pierre Pronchery 2017-12-07 18:58:41 +01:00
parent e5450740e5
commit a0dc6a9fe0
2 changed files with 46 additions and 0 deletions

View File

@ -60,6 +60,7 @@ int mimehandler_can_execute(MimeHandler * handler);
String const * mimehandler_get_name(MimeHandler * handler);
String const * mimehandler_get_program(MimeHandler * handler);
MimeHandlerType mimehandler_get_type(MimeHandler * handler);
String ** mimehandler_get_types(MimeHandler * handler);
int mimehandler_is_hidden(MimeHandler * handler);

View File

@ -183,6 +183,51 @@ MimeHandlerType mimehandler_get_type(MimeHandler * handler)
}
/* mimehandler_get_types */
String ** mimehandler_get_types(MimeHandler * handler)
{
String ** ret = NULL;
size_t cnt = 0;
size_t i;
String const * p;
String * q;
String * last;
String ** r;
if(mimehandler_get_type(handler) != MIME_HANDLER_TYPE_APPLICATION)
return NULL;
if((p = config_get(handler, SECTION, "MimeType")) == NULL)
{
if((ret = malloc(sizeof(String *))) == NULL)
return NULL;
ret[0] = NULL;
return ret;
}
if((q = string_new(p)) == NULL)
return NULL;
for(p = strtok_r(q, ":", &last); p != NULL;
p = strtok_r(NULL, ":", &last))
{
if((r = realloc(ret, sizeof(*ret) * (cnt + 1))) != NULL)
{
ret = r;
ret[cnt] = string_new(p);
}
if(r == NULL || ret[cnt] == NULL)
{
for(i = 0; i < cnt; i++)
string_delete(ret[i]);
free(ret);
return NULL;
}
cnt++;
}
if(ret != NULL)
ret[cnt] = NULL;
return ret;
}
/* mimehandler_is_hidden */
int mimehandler_is_hidden(MimeHandler * handler)
{