diff options
author | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2011-04-11 18:53:27 +0000 |
---|---|---|
committer | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2011-04-11 18:53:27 +0000 |
commit | 07ed0e9a4385437b52e7195b681e600c2f1c5623 (patch) | |
tree | 6dda615ae2f467bbc8c311ba8066bf63c20ec1d7 /scheduler/filter.c | |
parent | 84315f460a5c9eb38f7fcc4204acf98ed2b29406 (diff) | |
download | cups-07ed0e9a4385437b52e7195b681e600c2f1c5623.tar.gz |
Merge changes from CUPS 1.5svn-r9675.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@3122 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'scheduler/filter.c')
-rw-r--r-- | scheduler/filter.c | 69 |
1 files changed, 48 insertions, 21 deletions
diff --git a/scheduler/filter.c b/scheduler/filter.c index 1234de52a..9f734da56 100644 --- a/scheduler/filter.c +++ b/scheduler/filter.c @@ -17,8 +17,10 @@ * mimeAddFilter() - Add a filter to the current MIME database. * mimeFilter() - Find the fastest way to convert from one type to * another. - * mimeFilterLookup() - Lookup a filter... - * compare_filters() - Compare two filters... + * mimeFilter2() - Find the fastest way to convert from one type to + * another, including the file size. + * mimeFilterLookup() - Lookup a filter. + * compare_filters() - Compare two filters. * find_filters() - Find the filters to convert from one type to another. */ @@ -49,8 +51,8 @@ typedef struct _mime_typelist_s /**** List of source types ****/ static int compare_filters(mime_filter_t *, mime_filter_t *); static int compare_srcs(mime_filter_t *, mime_filter_t *); static cups_array_t *find_filters(mime_t *mime, mime_type_t *src, - mime_type_t *dst, int *cost, - _mime_typelist_t *visited); + size_t srcsize, mime_type_t *dst, + int *cost, _mime_typelist_t *visited); /* @@ -137,16 +139,37 @@ mimeFilter(mime_t *mime, /* I - MIME database */ mime_type_t *dst, /* I - Destination file type */ int *cost) /* O - Cost of filters */ { - /* - * Range-check the input... - */ - DEBUG_printf(("mimeFilter(mime=%p, src=%p(%s/%s), dst=%p(%s/%s), " - "cost=%p(%d))\n", + "cost=%p(%d))", mime, src, src ? src->super : "?", src ? src->type : "?", dst, dst ? dst->super : "?", dst ? dst->type : "?", cost, cost ? *cost : 0)); + return (mimeFilter2(mime, src, 0, dst, cost)); +} + + +/* + * 'mimeFilter2()' - Find the fastest way to convert from one type to another, + * including file size. + */ + +cups_array_t * /* O - Array of filters to run */ +mimeFilter2(mime_t *mime, /* I - MIME database */ + mime_type_t *src, /* I - Source file type */ + size_t srcsize, /* I - Size of source file */ + mime_type_t *dst, /* I - Destination file type */ + int *cost) /* O - Cost of filters */ +{ + /* + * Range-check the input... + */ + + DEBUG_printf(("mimeFilter2(mime=%p, src=%p(%s/%s), srcsize=" CUPS_LLFMT + ", dst=%p(%s/%s), cost=%p(%d))", + mime, src, src ? src->super : "?", src ? src->type : "?", + CUPS_LLCAST srcsize, dst, dst ? dst->super : "?", + dst ? dst->type : "?", cost, cost ? *cost : 0)); if (cost) *cost = 0; @@ -162,7 +185,6 @@ mimeFilter(mime_t *mime, /* I - MIME database */ { mime_filter_t *current; /* Current filter */ - mime->srcs = cupsArrayNew((cups_array_func_t)compare_srcs, NULL); for (current = mimeFirstFilter(mime); @@ -175,12 +197,12 @@ mimeFilter(mime_t *mime, /* I - MIME database */ * Find the filters... */ - return (find_filters(mime, src, dst, cost, NULL)); + return (find_filters(mime, src, srcsize, dst, cost, NULL)); } /* - * 'mimeFilterLookup()' - Lookup a filter... + * 'mimeFilterLookup()' - Lookup a filter. */ mime_filter_t * /* O - Filter for src->dst */ @@ -199,7 +221,7 @@ mimeFilterLookup(mime_t *mime, /* I - MIME database */ /* - * 'compare_filters()' - Compare two filters... + * 'compare_filters()' - Compare two filters. */ static int /* O - Comparison result */ @@ -243,6 +265,7 @@ compare_srcs(mime_filter_t *f0, /* I - First filter */ static cups_array_t * /* O - Array of filters to run */ find_filters(mime_t *mime, /* I - MIME database */ mime_type_t *src, /* I - Source file type */ + size_t srcsize, /* I - Size of source file */ mime_type_t *dst, /* I - Destination file type */ int *cost, /* O - Cost of filters */ _mime_typelist_t *list) /* I - Source types we've used */ @@ -257,21 +280,23 @@ find_filters(mime_t *mime, /* I - MIME database */ *listptr; /* Pointer in list */ - DEBUG_printf(("find_filters(mime=%p, src=%p(%s/%s), dst=%p(%s/%s), " - "cost=%p, list=%p)\n", mime, src, src->super, src->type, - dst, dst->super, dst->type, cost, list)); + DEBUG_printf(("2find_filters(mime=%p, src=%p(%s/%s), srcsize=" CUPS_LLFMT + ", dst=%p(%s/%s), cost=%p, list=%p)", mime, src, src->super, + src->type, CUPS_LLCAST srcsize, dst, dst->super, dst->type, + cost, list)); /* * See if there is a filter that can convert the files directly... */ - if ((current = mimeFilterLookup(mime, src, dst)) != NULL) + if ((current = mimeFilterLookup(mime, src, dst)) != NULL && + (current->maxsize == 0 || srcsize <= current->maxsize)) { /* * Got a direct filter! */ - DEBUG_puts("find_filters: Direct filter found!"); + DEBUG_puts("2find_filters: Direct filter found!"); if ((mintemp = cupsArrayNew(NULL, NULL)) == NULL) return (NULL); @@ -283,8 +308,8 @@ find_filters(mime_t *mime, /* I - MIME database */ if (!cost) return (mintemp); - DEBUG_puts("find_filters: Found direct filter:"); - DEBUG_printf(("find_filters: %s (cost=%d)\n", current->filter, mincost)); + DEBUG_puts("2find_filters: Found direct filter:"); + DEBUG_printf(("2find_filters: %s (cost=%d)", current->filter, mincost)); } else { @@ -319,6 +344,8 @@ find_filters(mime_t *mime, /* I - MIME database */ mime_type_t *current_dst; /* Current destination type */ + if (current->maxsize > 0 && srcsize > current->maxsize) + continue; for (listptr = list, current_dst = current->dst; listptr; @@ -337,7 +364,7 @@ find_filters(mime_t *mime, /* I - MIME database */ listnode.src = current->src; cupsArraySave(mime->srcs); - temp = find_filters(mime, current->dst, dst, &tempcost, &listnode); + temp = find_filters(mime, current->dst, srcsize, dst, &tempcost, &listnode); cupsArrayRestore(mime->srcs); if (!temp) |