diff --git a/scheduler/mime.c b/scheduler/mime.c index 70dc7bf..80168b9 100644 --- a/scheduler/mime.c +++ b/scheduler/mime.c @@ -156,6 +156,9 @@ mimeDeleteType(mime_t *mime, /* I - MIME database */ if (!mime || !mt) return; + if (--mt->refcount != 0) + return; + cupsArrayRemove(mime->types, mt); delete_rules(mt->rules); diff --git a/scheduler/mime.h b/scheduler/mime.h index 0afc8d1..9928b86 100644 --- a/scheduler/mime.h +++ b/scheduler/mime.h @@ -89,6 +89,7 @@ typedef struct _mime_type_s /**** MIME Type Data ****/ int priority; /* Priority of this type */ char super[MIME_MAX_SUPER], /* Super-type name ("image", "application", etc.) */ type[MIME_MAX_TYPE]; /* Type name ("png", "postscript", etc.) */ + short refcount; /* Reference count */ } mime_type_t; typedef struct _mime_filter_s /**** MIME Conversion Filter Data ****/ diff --git a/scheduler/type.c b/scheduler/type.c index 11ef264..2fc6cd1 100644 --- a/scheduler/type.c +++ b/scheduler/type.c @@ -84,7 +84,10 @@ mimeAddType(mime_t *mime, /* I - MIME database */ */ if ((temp = mimeType(mime, super, type)) != NULL) + { + temp->refcount++; return (temp); + } /* * The type doesn't exist; add it... @@ -100,6 +103,7 @@ mimeAddType(mime_t *mime, /* I - MIME database */ strlen(type) + 1)) == NULL) return (NULL); + temp->refcount = 1; strlcpy(temp->super, super, sizeof(temp->super)); strcpy(temp->type, type); /* Safe: temp->type is allocated */ temp->priority = 100;