]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scheduler/mime.h
More journald/asl logging bug fixes (STR #4661)
[thirdparty/cups.git] / scheduler / mime.h
index 93a1f4ed3bea40cb4dfff76609521891221fac1e..3d61d2e1e2a6ee4e181d5f560f8326ab84ad6000 100644 (file)
@@ -1,41 +1,34 @@
 /*
- * "$Id: mime.h 4613 2005-08-30 12:41:48Z mike $"
+ * "$Id$"
  *
- *   MIME type/conversion database definitions for the Common UNIX Printing System (CUPS).
+ *   MIME type/conversion database definitions for CUPS.
  *
- *   Copyright 1997-2005 by Easy Software Products, all rights reserved.
+ *   Copyright 2007-2013 by Apple Inc.
+ *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
- *   property of Easy Software Products and are protected by Federal
- *   copyright law.  Distribution and use rights are outlined in the file
- *   "LICENSE.txt" which should have been included with this file.  If this
- *   file is missing or damaged please contact Easy Software Products
- *   at:
- *
- *       Attn: CUPS Licensing Information
- *       Easy Software Products
- *       44141 Airport View Drive, Suite 204
- *       Hollywood, Maryland 20636 USA
- *
- *       Voice: (301) 373-9600
- *       EMail: cups-info@cups.org
- *         WWW: http://www.cups.org
+ *   property of Apple Inc. and are protected by Federal copyright
+ *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+ *   which should have been included with this file.  If this file is
+ *   file is missing or damaged, see the license at "http://www.cups.org/".
  */
 
 #ifndef _CUPS_MIME_H_
 #  define _CUPS_MIME_H_
 
+#  include <cups/array.h>
 #  include <cups/ipp.h>
 #  include <cups/file.h>
+#  include <regex.h>
 
 
 /*
  * C++ magic...
  */
 
-#  ifdef _cplusplus
+#  ifdef __cplusplus
 extern "C" {
-#  endif /* _cplusplus */
+#  endif /* __cplusplus */
 
 
 /*
@@ -45,7 +38,7 @@ extern "C" {
 #  define MIME_MAX_SUPER       16              /* Maximum size of supertype name */
 #  define MIME_MAX_TYPE                IPP_MAX_NAME    /* Maximum size of type name */
 #  define MIME_MAX_FILTER      256             /* Maximum size of filter pathname */
-#  define MIME_MAX_BUFFER      8192            /* Maximum size of file buffer */
+#  define MIME_MAX_BUFFER      4096            /* Maximum size of file buffer */
 
 
 /*
@@ -66,12 +59,13 @@ typedef enum
   MIME_MAGIC_INT,                      /* Integer/32-bit word matches */
   MIME_MAGIC_LOCALE,                   /* Current locale matches string */
   MIME_MAGIC_CONTAINS,                 /* File contains a string */
-  MIME_MAGIC_ISTRING                   /* Case-insensitive string matches */
+  MIME_MAGIC_ISTRING,                  /* Case-insensitive string matches */
+  MIME_MAGIC_REGEX                     /* Regular expression matches */
 } mime_op_t;
 
-typedef struct mime_magic_str          /**** MIME Magic Data ****/
+typedef struct _mime_magic_s           /**** MIME Magic Data ****/
 {
-  struct mime_magic_str        *prev,          /* Previous rule */
+  struct _mime_magic_s *prev,          /* Previous rule */
                        *next,          /* Next rule */
                        *parent,        /* Parent rules */
                        *child;         /* Child rules */
@@ -85,33 +79,39 @@ typedef struct mime_magic_str               /**** MIME Magic Data ****/
     char       matchv[64];             /* Match value */
     char       localev[64];            /* Locale value */
     char       stringv[64];            /* String value */
-    char       charv;                  /* Byte value */
-    short      shortv;                 /* Short value */
-    int                intv;                   /* Integer value */
+    unsigned char charv;               /* Byte value */
+    unsigned short shortv;             /* Short value */
+    unsigned   intv;                   /* Integer value */
+    regex_t    rev;                    /* Regular expression value */
   }            value;
 } mime_magic_t;
 
-typedef struct                         /**** MIME Type Data ****/
+typedef struct _mime_type_s            /**** MIME Type Data ****/
 {
-  char         super[MIME_MAX_SUPER],  /* Super-type name ("image", "application", etc.) */
-               *type;                  /* Type name ("png", "postscript", etc.) */
   mime_magic_t *rules;                 /* Rules used to detect this type */
+  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.) */
 } mime_type_t;
 
-typedef struct                         /**** MIME Conversion Filter Data ****/
+typedef struct _mime_filter_s          /**** MIME Conversion Filter Data ****/
 {
   mime_type_t  *src,                   /* Source type */
                *dst;                   /* Destination type */
   int          cost;                   /* Relative cost */
   char         filter[MIME_MAX_FILTER];/* Filter program to use */
+  size_t       maxsize;                /* Maximum file size for this filter */
 } mime_filter_t;
 
-typedef struct                         /**** MIME Database ****/
+typedef void (*mime_error_cb_t)(void *ctx, const char *message);
+
+typedef struct _mime_s                 /**** MIME Database ****/
 {
-  int          num_types;              /* Number of file types */
-  mime_type_t  **types;                /* File types */
-  int          num_filters;            /* Number of type conversion filters */
-  mime_filter_t        *filters;               /* Type conversion filters */
+  cups_array_t         *types;         /* File types */
+  cups_array_t         *filters;       /* Type conversion filters */
+  cups_array_t         *srcs;          /* Filters sorted by source type */
+  mime_error_cb_t      error_cb;       /* Error message callback */
+  void                 *error_ctx;     /* Pointer for callback */
 } mime_t;
 
 
@@ -120,28 +120,46 @@ typedef struct                            /**** MIME Database ****/
  */
 
 extern void            mimeDelete(mime_t *mime);
-#define mimeLoad(pathname,filterpath) \
-                       mimeMerge((mime_t *)0, (pathname), (filterpath))
-extern mime_t          *mimeMerge(mime_t *mime, const char *pathname,
-                                  const char *filterpath);
-extern mime_t          *mimeNew(void);
-
-extern mime_type_t     *mimeAddType(mime_t *mime, const char *super, const char *type);
+extern mime_t          *mimeNew(void) _CUPS_API_1_5;
+extern mime_t          *mimeLoad(const char *pathname, const char *filterpath);
+extern mime_t          *mimeLoadFilters(mime_t *mime, const char *pathname,
+                                        const char *filterpath);
+extern mime_t          *mimeLoadTypes(mime_t *mime, const char *pathname);
+
+extern mime_type_t     *mimeAddType(mime_t *mime, const char *super,
+                                    const char *type);
 extern int             mimeAddTypeRule(mime_type_t *mt, const char *rule);
+extern void            mimeDeleteType(mime_t *mime, mime_type_t *mt);
 extern mime_type_t     *mimeFileType(mime_t *mime, const char *pathname,
-                                     int *compression);
-extern mime_type_t     *mimeType(mime_t *mime, const char *super, const char *type);
-
-extern mime_filter_t   *mimeAddFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst,
-                                      int cost, const char *filter);
-extern mime_filter_t   *mimeFilter(mime_t *mime, mime_type_t *src, mime_type_t *dst,
-                                   int *num_filters, int max_depth);
-
-#  ifdef _cplusplus
+                                     const char *filename, int *compression);
+extern mime_type_t     *mimeFirstType(mime_t *mime);
+extern mime_type_t     *mimeNextType(mime_t *mime);
+extern int             mimeNumTypes(mime_t *mime);
+extern mime_type_t     *mimeType(mime_t *mime, const char *super,
+                                 const char *type);
+
+extern mime_filter_t   *mimeAddFilter(mime_t *mime, mime_type_t *src,
+                                      mime_type_t *dst, int cost,
+                                      const char *filter);
+extern void            mimeDeleteFilter(mime_t *mime, mime_filter_t *filter);
+extern cups_array_t    *mimeFilter(mime_t *mime, mime_type_t *src,
+                                   mime_type_t *dst, int *cost);
+extern cups_array_t    *mimeFilter2(mime_t *mime, mime_type_t *src,
+                                    size_t srcsize, mime_type_t *dst,
+                                    int *cost);
+extern mime_filter_t   *mimeFilterLookup(mime_t *mime, mime_type_t *src,
+                                         mime_type_t *dst);
+extern mime_filter_t   *mimeFirstFilter(mime_t *mime);
+extern mime_filter_t   *mimeNextFilter(mime_t *mime);
+extern int             mimeNumFilters(mime_t *mime);
+extern void            mimeSetErrorCallback(mime_t *mime, mime_error_cb_t cb,
+                                            void *context) _CUPS_API_1_5;
+
+#  ifdef __cplusplus
 }
-#  endif /* _cplusplus */
+#  endif /* __cplusplus */
 #endif /* !_CUPS_MIME_H_ */
 
 /*
- * End of "$Id: mime.h 4613 2005-08-30 12:41:48Z mike $".
+ * End of "$Id$".
  */