]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - backend/ieee1284.c
Merge changes from CUPS 1.4svn-r7874.
[thirdparty/cups.git] / backend / ieee1284.c
index 03720bf7225d14338d6801c335299b67df8030ce..ebbd5d18bbddf8a4c32138a022414c7576b45884 100644 (file)
@@ -1,75 +1,60 @@
 /*
- * "$Id$"
+ * "$Id: ieee1284.c 7687 2008-06-24 01:28:36Z mike $"
  *
  *   IEEE-1284 support functions for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
+ *   Copyright 2007-2008 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
+ *   property of Apple Inc. and are protected by Federal copyright
+ *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
  *   "LICENSE" 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
+ *   file is missing or damaged, see the license at "http://www.cups.org/".
  *
  *   This file is subject to the Apple OS-Developed Software exception.
  *
  * Contents:
  *
- *   get_device_id()  - Get the IEEE-1284 device ID string and corresponding
- *                      URI.
- *   get_make_model() - Get the make and model string from the device ID.
+ *   backendGetDeviceID()  - Get the IEEE-1284 device ID string and
+ *                           corresponding URI.
+ *   backendGetMakeModel() - Get the make and model string from the device ID.
  */
 
 /*
  * Include necessary headers.
  */
 
-#include <cups/debug.h>
-
+#include "backend-private.h"
 
-/*
- * Prototypes...
- */
+#ifdef __linux
+#  include <sys/ioctl.h>
+#  include <linux/lp.h>
+#  define IOCNR_GET_DEVICE_ID          1
+#  define LPIOC_GET_DEVICE_ID(len)     _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
+#  include <linux/parport.h>
+#  include <linux/ppdev.h>
+#  include <unistd.h>
+#  include <fcntl.h>
+#endif /* __linux */
 
-static int     get_make_model(const char *device_id, char *make_model,
-                              int make_model_size);
+#ifdef __sun
+#  ifdef __sparc
+#    include <sys/ecppio.h>
+#  else
+#    include <sys/ioccom.h>
+#    include <sys/ecppsys.h>
+#  endif /* __sparc */
+#endif /* __sun */
 
 
 /*
- * 'get_device_id()' - Get the IEEE-1284 device ID string and
- *                     corresponding URI.
+ * 'backendGetDeviceID()' - Get the IEEE-1284 device ID string and
+ *                          corresponding URI.
  */
 
-#ifndef SNMP_BACKEND
-#  ifdef __linux
-#    include <sys/ioctl.h>
-#    include <linux/lp.h>
-#    define IOCNR_GET_DEVICE_ID                1
-#    define LPIOC_GET_DEVICE_ID(len)   _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
-#  endif /* __linux */
-
-#  ifdef __sun
-#    ifdef __sparc
-#      include <sys/ecppio.h>
-#    else
-#      include <sys/ioccom.h>
-#      include <sys/ecppsys.h>
-#    endif /* __sparc */
-#  endif /* __sun */
-
-
 int                                    /* O - 0 on success, -1 on failure */
-get_device_id(
+backendGetDeviceID(
     int        fd,                     /* I - File descriptor */
     char       *device_id,             /* O - 1284 device ID */
     int        device_id_size,         /* I - Size of buffer */
@@ -79,21 +64,20 @@ get_device_id(
     char       *uri,                   /* O - Device URI */
     int        uri_size)               /* I - Size of buffer */
 {
-  char *attr,                          /* 1284 attribute */
-       *delim,                         /* 1284 delimiter */
-       *uriptr,                        /* Pointer into URI */
-       manufacturer[256],              /* Manufacturer string */
-       serial_number[1024];            /* Serial number string */
-  int  manulen;                        /* Length of manufacturer string */
-#ifdef __linux
+#ifdef __APPLE__ /* This function is a no-op */
+  return (-1);
+
+#else /* Get the device ID from the specified file descriptor... */
+#  ifdef __linux
   int  length;                         /* Length of device ID info */
-#endif /* __linux */
-#if defined(__sun) && defined(ECPPIOC_GETDEVID)
+  int   got_id = 0;
+#  endif /* __linux */
+#  if defined(__sun) && defined(ECPPIOC_GETDEVID)
   struct ecpp_device_id did;           /* Device ID buffer */
-#endif /* __sun && ECPPIOC_GETDEVID */
+#  endif /* __sun && ECPPIOC_GETDEVID */
 
 
-  DEBUG_printf(("get_device_id(fd=%d, device_id=%p, device_id_size=%d, "
+  DEBUG_printf(("backendGetDeviceID(fd=%d, device_id=%p, device_id_size=%d, "
                 "make_model=%p, make_model_size=%d, scheme=\"%s\", "
                "uri=%p, uri_size=%d)\n", fd, device_id, device_id_size,
                make_model, make_model_size, scheme ? scheme : "(null)",
@@ -103,86 +87,164 @@ get_device_id(
   * Range check input...
   */
 
-  if (fd < 0 ||
-      !device_id || device_id_size < 32 ||
-      !make_model || make_model_size < 32)
+  if (!device_id || device_id_size < 32)
   {
-    DEBUG_puts("get_device_id: Bad args!");
+    DEBUG_puts("backendGetDeviceID: Bad args!");
     return (-1);
   }
 
-  *device_id  = '\0';
-  *make_model = '\0';
-
-  if (uri)
-    *uri = '\0';
-
- /*
-  * Get the device ID string...
-  */
+  if (make_model)
+    *make_model = '\0';
 
-#ifdef __linux
-  if (!ioctl(fd, LPIOC_GET_DEVICE_ID(device_id_size), device_id))
+  if (fd >= 0)
   {
    /*
-    * Extract the length of the device ID string from the first two
-    * bytes.  The 1284 spec says the length is stored MSB first...
+    * Get the device ID string...
     */
 
-    length = (((unsigned)device_id[0] & 255) << 8) +
-            ((unsigned)device_id[1] & 255);
+    *device_id = '\0';
 
-   /*
-    * Check to see if the length is larger than our buffer; first
-    * assume that the vendor incorrectly implemented the 1284 spec,
-    * and then limit the length to the size of our buffer...
-    */
+#  ifdef __linux
+    if (ioctl(fd, LPIOC_GET_DEVICE_ID(device_id_size), device_id))
+    {
+     /*
+      * Linux has to implement things differently for every device it seems.
+      * Since the standard parallel port driver does not provide a simple
+      * ioctl() to get the 1284 device ID, we have to open the "raw" parallel
+      * device corresponding to this port and do some negotiation trickery
+      * to get the current device ID.
+      */
 
-    if (length > (device_id_size - 2))
-      length = (((unsigned)device_id[1] & 255) << 8) +
-              ((unsigned)device_id[0] & 255);
+      if (uri && !strncmp(uri, "parallel:/dev/", 14))
+      {
+       char    devparport[16];         /* /dev/parportN */
+       int     devparportfd,           /* File descriptor for raw device */
+                 mode;                 /* Port mode */
 
-    if (length > (device_id_size - 2))
-      length = device_id_size - 2;
 
-   /*
-    * Copy the device ID text to the beginning of the buffer and
-    * nul-terminate.
-    */
+       /*
+       * Since the Linux parallel backend only supports 4 parallel port
+       * devices, just grab the trailing digit and use it to construct a
+       * /dev/parportN filename...
+       */
 
-    memmove(device_id, device_id + 2, length);
-    device_id[length] = '\0';
-  }
-#  ifdef DEBUG
-  else
-    printf("get_device_id: ioctl failed - %s\n", strerror(errno));
-#  endif /* DEBUG */
-#endif /* __linux */
+       snprintf(devparport, sizeof(devparport), "/dev/parport%s",
+                uri + strlen(uri) - 1);
+
+       if ((devparportfd = open(devparport, O_RDWR | O_NOCTTY)) != -1)
+       {
+        /*
+         * Claim the device...
+         */
+
+         if (!ioctl(devparportfd, PPCLAIM))
+         {
+           fcntl(devparportfd, F_SETFL, fcntl(devparportfd, F_GETFL) | O_NONBLOCK);
+
+           mode = IEEE1284_MODE_COMPAT;
+
+           if (!ioctl(devparportfd, PPNEGOT, &mode))
+           {
+            /*
+             * Put the device into Device ID mode...
+             */
+
+             mode = IEEE1284_MODE_NIBBLE | IEEE1284_DEVICEID;
+
+             if (!ioctl(devparportfd, PPNEGOT, &mode))
+             {
+              /*
+               * Read the 1284 device ID...
+               */
+
+               if ((length = read(devparportfd, device_id,
+                                  device_id_size - 1)) >= 2)
+               {
+                 device_id[length] = '\0';
+                 got_id = 1;
+               }
+             }
+           }
+
+          /*
+           * Release the device...
+           */
+
+           ioctl(devparportfd, PPRELEASE);
+         }
+
+         close(devparportfd);
+       }
+      }
+    }
+    else
+      got_id = 1;
 
-#if defined(__sun) && defined(ECPPIOC_GETDEVID)
-  did.mode = ECPP_CENTRONICS;
-  did.len  = device_id_size - 1;
-  did.rlen = 0;
-  did.addr = device_id;
+    if (got_id)
+    {
+     /*
+      * Extract the length of the device ID string from the first two
+      * bytes.  The 1284 spec says the length is stored MSB first...
+      */
 
-  if (!ioctl(fd, ECPPIOC_GETDEVID, &did))
-  {
-   /*
-    * Nul-terminate the device ID text.
-    */
+      length = (((unsigned)device_id[0] & 255) << 8) +
+              ((unsigned)device_id[1] & 255);
 
-    if (did.rlen < (device_id_size - 1))
-      device_id[did.rlen] = '\0';
+     /*
+      * Check to see if the length is larger than our buffer; first
+      * assume that the vendor incorrectly implemented the 1284 spec,
+      * and then limit the length to the size of our buffer...
+      */
+
+      if (length > (device_id_size - 2))
+       length = (((unsigned)device_id[1] & 255) << 8) +
+                ((unsigned)device_id[0] & 255);
+
+      if (length > (device_id_size - 2))
+       length = device_id_size - 2;
+
+     /*
+      * Copy the device ID text to the beginning of the buffer and
+      * nul-terminate.
+      */
+
+      memmove(device_id, device_id + 2, length);
+      device_id[length] = '\0';
+    }
+#    ifdef DEBUG
     else
-      device_id[device_id_size - 1] = '\0';
+      printf("backendGetDeviceID: ioctl failed - %s\n", strerror(errno));
+#    endif /* DEBUG */
+#  endif /* __linux */
+
+#   if defined(__sun) && defined(ECPPIOC_GETDEVID)
+    did.mode = ECPP_CENTRONICS;
+    did.len  = device_id_size - 1;
+    did.rlen = 0;
+    did.addr = device_id;
+
+    if (!ioctl(fd, ECPPIOC_GETDEVID, &did))
+    {
+     /*
+      * Nul-terminate the device ID text.
+      */
+
+      if (did.rlen < (device_id_size - 1))
+       device_id[did.rlen] = '\0';
+      else
+       device_id[device_id_size - 1] = '\0';
+    }
+#    ifdef DEBUG
+    else
+      printf("backendGetDeviceID: ioctl failed - %s\n", strerror(errno));
+#    endif /* DEBUG */
+#  endif /* __sun && ECPPIOC_GETDEVID */
   }
-#  ifdef DEBUG
-  else
-    printf("get_device_id: ioctl failed - %s\n", strerror(errno));
-#  endif /* DEBUG */
-#endif /* __sun && ECPPIOC_GETDEVID */
 
-  DEBUG_printf(("get_device_id: device_id=\"%s\"\n", device_id));
+  DEBUG_printf(("backendGetDeviceID: device_id=\"%s\"\n", device_id));
+
+  if (scheme && uri)
+    *uri = '\0';
 
   if (!*device_id)
     return (-1);
@@ -191,7 +253,8 @@ get_device_id(
   * Get the make and model...
   */
 
-  get_make_model(device_id, make_model, make_model_size);
+  if (make_model)
+    backendGetMakeModel(device_id, make_model, make_model_size);
 
  /*
   * Then generate a device URI...
@@ -199,130 +262,82 @@ get_device_id(
 
   if (scheme && uri && uri_size > 32)
   {
-   /*
-    * Look for the serial number field...
-    */
+    int                        num_values;     /* Number of keys and values */
+    cups_option_t      *values;        /* Keys and values in device ID */
+    const char         *mfg,           /* Manufacturer */
+                       *mdl,           /* Model */
+                       *sern;          /* Serial number */
+    char               temp[256],      /* Temporary manufacturer string */
+                       *tempptr;       /* Pointer into temp string */
 
-    if ((attr = strstr(device_id, "SERN:")) != NULL)
-      attr += 5;
-    else if ((attr = strstr(device_id, "SERIALNUMBER:")) != NULL)
-      attr += 13;
-    else if ((attr = strstr(device_id, ";SN:")) != NULL)
-      attr += 4;
-
-    if (attr)
-    {
-      strlcpy(serial_number, attr, sizeof(serial_number));
-
-      if ((delim = strchr(serial_number, ';')) != NULL)
-       *delim = '\0';
-    }
-    else
-      serial_number[0] = '\0';
 
    /*
-    * Generate the device URI from the manufacturer, make_model, and
-    * serial number strings.
+    * Get the make, model, and serial numbers...
     */
 
-    snprintf(uri, uri_size, "%s://", scheme);
+    num_values = _ppdGet1284Values(device_id, &values);
 
-    if ((attr = strstr(device_id, "MANUFACTURER:")) != NULL)
-      attr += 13;
-    else if ((attr = strstr(device_id, "Manufacturer:")) != NULL)
-      attr += 13;
-    else if ((attr = strstr(device_id, "MFG:")) != NULL)
-      attr += 4;
+    if ((sern = cupsGetOption("SERIALNUMBER", num_values, values)) == NULL)
+      if ((sern = cupsGetOption("SERN", num_values, values)) == NULL)
+        sern = cupsGetOption("SN", num_values, values);
 
-    if (attr)
-    {
-      strlcpy(manufacturer, attr, sizeof(manufacturer));
+    if ((mfg = cupsGetOption("MANUFACTURER", num_values, values)) == NULL)
+      mfg = cupsGetOption("MFG", num_values, values);
 
-      if ((delim = strchr(manufacturer, ';')) != NULL)
-        *delim = '\0';
+    if ((mdl = cupsGetOption("MODEL", num_values, values)) == NULL)
+      mdl = cupsGetOption("MDL", num_values, values);
 
-      if (!strcasecmp(manufacturer, "Hewlett-Packard"))
-        strcpy(manufacturer, "HP");
+    if (mfg)
+    {
+      if (!strcasecmp(mfg, "Hewlett-Packard"))
+        mfg = "HP";
+      else if (!strcasecmp(mfg, "Lexmark International"))
+        mfg = "Lexmark";
     }
     else
     {
-      strlcpy(manufacturer, make_model, sizeof(manufacturer));
-
-      if ((delim = strchr(manufacturer, ' ')) != NULL)
-        *delim = '\0';
-    }
-
-    manulen = strlen(manufacturer);
-
-    for (uriptr = uri + strlen(uri), delim = manufacturer;
-        *delim && uriptr < (uri + uri_size - 3);
-        delim ++)
-      if (*delim == ' ')
-      {
-       *uriptr++ = '%';
-       *uriptr++ = '2';
-       *uriptr++ = '0';
-      }
-      else
-       *uriptr++ = *delim;
+      strlcpy(temp, make_model, sizeof(temp));
 
-    *uriptr++ = '/';
+      if ((tempptr = strchr(temp, ' ')) != NULL)
+        *tempptr = '\0';
 
-    if (!strncasecmp(make_model, manufacturer, manulen))
-    {
-      delim = make_model + manulen;
-
-      while (isspace(*delim & 255))
-        delim ++;
+      mfg = temp;
     }
-    else
-      delim = make_model;
 
-    for (; *delim && uriptr < (uri + uri_size - 3); delim ++)
-      if (*delim == ' ')
-      {
-       *uriptr++ = '%';
-       *uriptr++ = '2';
-       *uriptr++ = '0';
-      }
-      else
-       *uriptr++ = *delim;
+   /*
+    * Generate the device URI from the manufacturer, make_model, and
+    * serial number strings.
+    */
 
-    if (serial_number[0])
-    {
-     /*
-      * Add the serial number to the URI...
-      */
+    httpAssembleURIf(HTTP_URI_CODING_ALL, uri, uri_size, scheme, NULL, mfg, 0,
+                     "/%s%s%s", mdl, sern ? "?serial=" : "", sern ? sern : "");
 
-      strlcpy(uriptr, "?serial=", uri_size - (uriptr - uri));
-      strlcat(uriptr, serial_number, uri_size - (uriptr - uri));
-    }
-    else
-      *uriptr = '\0';
+    cupsFreeOptions(num_values, values);
   }
 
   return (0);
+#endif /* __APPLE__ */
 }
-#endif /* !SNMP_BACKEND */
 
 
 /*
- * 'get_make_model()' - Get the make and model string from the device ID.
+ * 'backendGetMakeModel()' - Get the make and model string from the device ID.
  */
 
 int                                    /* O - 0 on success, -1 on failure */
-get_make_model(
+backendGetMakeModel(
     const char *device_id,             /* O - 1284 device ID */
     char       *make_model,            /* O - Make/model */
     int        make_model_size)                /* I - Size of buffer */
 {
-  char *attr,                          /* 1284 attribute */
-       *delim,                         /* 1284 delimiter */
-       *mfg,                           /* Manufacturer string */
-       *mdl;                           /* Model string */
+  int          num_values;             /* Number of keys and values */
+  cups_option_t        *values;                /* Keys and values */
+  const char   *mfg,                   /* Manufacturer string */
+               *mdl,                   /* Model string */
+               *des;                   /* Description string */
 
 
-  DEBUG_printf(("get_make_model(device_id=\"%s\", "
+  DEBUG_printf(("backendGetMakeModel(device_id=\"%s\", "
                 "make_model=%p, make_model_size=%d)\n", device_id,
                make_model, make_model_size));
 
@@ -332,7 +347,7 @@ get_make_model(
 
   if (!device_id || !*device_id || !make_model || make_model_size < 32)
   {
-    DEBUG_puts("get_make_model: Bad args!");
+    DEBUG_puts("backendGetMakeModel: Bad args!");
     return (-1);
   }
 
@@ -342,63 +357,10 @@ get_make_model(
   * Look for the description field...
   */
 
-  if ((attr = strstr(device_id, "DES:")) != NULL)
-    attr += 4;
-  else if ((attr = strstr(device_id, "DESCRIPTION:")) != NULL)
-    attr += 12;
-
-  if (attr)
-  {
-   /*
-    * Make sure the description contains something useful, since some
-    * printer manufacturers (HP) apparently don't follow the standards
-    * they helped to define...
-    *
-    * Here we require the description to be 8 or more characters in length,
-    * containing at least one space and one letter.
-    */
-
-    if ((delim = strchr(attr, ';')) == NULL)
-      delim = attr + strlen(attr);
-
-    if ((delim - attr) < 8)
-      attr = NULL;
-    else
-    {
-      char     *ptr;                   /* Pointer into description */
-      int      letters,                /* Number of letters seen */
-               spaces;                 /* Number of spaces seen */
-
-
-      for (ptr = attr, letters = 0, spaces = 0; ptr < delim; ptr ++)
-      {
-        if (isspace(*ptr & 255))
-         spaces ++;
-       else if (isalpha(*ptr & 255))
-         letters ++;
-
-        if (spaces && letters)
-         break;
-      }
+  num_values = _ppdGet1284Values(device_id, &values);
 
-      if (!spaces || !letters)
-        attr = NULL;
-    }
-  }
-
-  if ((mfg = strstr(device_id, "MANUFACTURER:")) != NULL)
-    mfg += 13;
-  else if ((mfg = strstr(device_id, "Manufacturer:")) != NULL)
-    mfg += 13;
-  else if ((mfg = strstr(device_id, "MFG:")) != NULL)
-    mfg += 4;
-
-  if ((mdl = strstr(device_id, "MODEL:")) != NULL)
-    mdl += 6;
-  else if ((mdl = strstr(device_id, "Model:")) != NULL)
-    mdl += 6;
-  else if ((mdl = strstr(device_id, "MDL:")) != NULL)
-    mdl += 4;
+  if ((mdl = cupsGetOption("MODEL", num_values, values)) == NULL)
+    mdl = cupsGetOption("MDL", num_values, values);
 
   if (mdl)
   {
@@ -406,69 +368,65 @@ get_make_model(
     * Build a make-model string from the manufacturer and model attributes...
     */
 
-    if (mfg)
-    {
-      if (!strncasecmp(mfg, "Hewlett-Packard", 15))
-       strlcpy(make_model, "HP", make_model_size);
-      else
-       strlcpy(make_model, mfg, make_model_size);
-
-      if ((delim = strchr(make_model, ';')) != NULL)
-       *delim = '\0';
+    if ((mfg = cupsGetOption("MANUFACTURER", num_values, values)) == NULL)
+      mfg = cupsGetOption("MFG", num_values, values);
 
-      if (!strncasecmp(make_model, mdl, strlen(make_model)))
-      {
-       /*
-       * Just copy model string, since it has the manufacturer...
-       */
-
-       strlcpy(make_model, mdl, make_model_size);
-      }
-      else
-      {
-       /*
-       * Concatenate the make and model...
-       */
+    if (!mfg || !strncasecmp(mdl, mfg, strlen(mfg)))
+    {
+     /*
+      * Just copy the model string, since it has the manufacturer...
+      */
 
-       strlcat(make_model, " ", make_model_size);
-       strlcat(make_model, mdl, make_model_size);
-      }
+      _ppdNormalizeMakeAndModel(mdl, make_model, make_model_size);
     }
     else
     {
      /*
-      * Just copy model string, since it has the manufacturer...
+      * Concatenate the make and model...
       */
 
-      strlcpy(make_model, mdl, make_model_size);
+      char     temp[1024];             /* Temporary make and model */
+
+      snprintf(temp, sizeof(temp), "%s %s", mfg, mdl);
+      _ppdNormalizeMakeAndModel(temp, make_model, make_model_size);
     }
   }
-  else if (attr)
+  else if ((des = cupsGetOption("DESCRIPTION", num_values, values)) != NULL ||
+           (des = cupsGetOption("DES", num_values, values)) != NULL)
   {
    /*
-    * Use description...
+    * Make sure the description contains something useful, since some
+    * printer manufacturers (HP) apparently don't follow the standards
+    * they helped to define...
+    *
+    * Here we require the description to be 8 or more characters in length,
+    * containing at least one space and one letter.
     */
 
-    if (!strncasecmp(attr, "Hewlett-Packard hp ", 19))
+    if (strlen(des) >= 8)
     {
-     /*
-      * Check for a common HP bug...
-      */
+      const char       *ptr;           /* Pointer into description */
+      int              letters,        /* Number of letters seen */
+                       spaces;         /* Number of spaces seen */
 
-      strlcpy(make_model, "HP ", make_model_size);
-      strlcpy(make_model + 3, attr + 19, make_model_size - 3);
-    }
-    else if (!strncasecmp(attr, "Hewlett-Packard ", 16))
-    {
-      strlcpy(make_model, "HP ", make_model_size);
-      strlcpy(make_model + 3, attr + 16, make_model_size - 3);
-    }
-    else
-    {
-      strlcpy(make_model, attr, make_model_size);
+
+      for (ptr = des, letters = 0, spaces = 0; *ptr; ptr ++)
+      {
+       if (isspace(*ptr & 255))
+         spaces ++;
+       else if (isalpha(*ptr & 255))
+         letters ++;
+
+       if (spaces && letters)
+         break;
+      }
+
+      if (spaces && letters)
+        _ppdNormalizeMakeAndModel(des, make_model, make_model_size);
     }
   }
-  else
+
+  if (!make_model[0])
   {
    /*
     * Use "Unknown" as the printer make and model...
@@ -477,34 +435,12 @@ get_make_model(
     strlcpy(make_model, "Unknown", make_model_size);
   }
 
- /*
-  * Strip trailing data...
-  */
-
-  if ((delim = strchr(make_model, ';')) != NULL)
-    *delim = '\0';
-
- /*
-  * Strip trailing whitespace...
-  */
-
-  for (delim = make_model + strlen(make_model) - 1; delim >= make_model; delim --)
-    if (isspace(*delim & 255))
-      *delim = '\0';
-    else
-      break;
+  cupsFreeOptions(num_values, values);
 
- /*
-  * Return...
-  */
-
-  if (make_model[0])
-    return (0);
-  else
-    return (-1);
+  return (0);
 }
 
 
 /*
- * End of "$Id$".
+ * End of "$Id: ieee1284.c 7687 2008-06-24 01:28:36Z mike $".
  */