]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - systemv/lpmove.c
Fix a performance regression with large PPDs (rdar://47040759)
[thirdparty/cups.git] / systemv / lpmove.c
index bbe4d260109599f237e11a04469ca504d50854e2..391098d29f3e35262d37f7a8daee26947e77eb1b 100644 (file)
@@ -1,34 +1,21 @@
 /*
- * "$Id: lpmove.c 7219 2008-01-14 22:00:02Z mike $"
+ * "lpmove" command for CUPS.
  *
- *   "lpmove" command for the Common UNIX Printing System (CUPS).
+ * Copyright 2007-2016 by Apple Inc.
+ * Copyright 1997-2006 by Easy Software Products.
  *
- *   Copyright 2007-2009 by Apple Inc.
- *   Copyright 1997-2006 by Easy Software Products.
- *
- *   These coded instructions, statements, and computer programs are the
- *   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/".
- *
- * Contents:
- *
- *   main()     - Parse options and move jobs.
- *   move_job() - Move a job.
+ * These coded instructions, statements, and computer programs are the
+ * 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
+ * missing or damaged, see the license at "http://www.cups.org/".
  */
 
 /*
  * Include necessary headers...
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <cups/string.h>
-#include <cups/cups.h>
-#include <cups/i18n.h>
-#include <cups/debug.h>
+#include <cups/cups-private.h>
 
 
 /*
@@ -49,7 +36,8 @@ main(int  argc,                               /* I - Number of command-line arguments */
 {
   int          i;                      /* Looping var */
   http_t       *http;                  /* Connection to server */
-  const char   *job;                   /* Job name */
+  const char   *opt,                   /* Option pointer */
+               *job;                   /* Job name */
   int          jobid;                  /* Job ID */
   int          num_dests;              /* Number of destinations */
   cups_dest_t  *dests;                 /* Destinations */
@@ -67,43 +55,48 @@ main(int  argc,                             /* I - Number of command-line arguments */
   src       = NULL;
 
   for (i = 1; i < argc; i ++)
+  {
     if (argv[i][0] == '-')
-      switch (argv[i][1])
+    {
+      for (opt = argv[i] + 1; *opt; opt ++)
       {
-        case 'E' : /* Encrypt */
+       switch (*opt)
+       {
+         case 'E' : /* Encrypt */
 #ifdef HAVE_SSL
-           cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
+             cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
 
 #else
-            _cupsLangPrintf(stderr,
-                           _("%s: Sorry, no encryption support compiled in\n"),
-                           argv[0]);
+             _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."), argv[0]);
 #endif /* HAVE_SSL */
-           break;
-
-        case 'h' : /* Connect to host */
-           if (argv[i][2] != '\0')
-             cupsSetServer(argv[i] + 2);
-           else
-           {
-             i ++;
+             break;
 
-             if (i >= argc)
+         case 'h' : /* Connect to host */
+             if (opt[1] != '\0')
+             {
+               cupsSetServer(opt + 1);
+               opt += strlen(opt) - 1;
+             }
+             else
              {
-               _cupsLangPuts(stderr,
-                             _("Error: need hostname after \'-h\' option\n"));
-               return (1);
-              }
-
-             cupsSetServer(argv[i]);
-           }
-           break;
-
-       default :
-           _cupsLangPrintf(stderr, _("lpmove: Unknown option \'%c\'\n"),
-                           argv[i][1]);
-           return (1);
+               i ++;
+
+               if (i >= argc)
+               {
+                 _cupsLangPuts(stderr, _("Error: need hostname after \"-h\" option."));
+                 return (1);
+               }
+
+               cupsSetServer(argv[i]);
+             }
+             break;
+
+         default :
+             _cupsLangPrintf(stderr, _("%s: Unknown option \"%c\"."), argv[0], *opt);
+             return (1);
+       }
       }
+    }
     else if (!jobid && !src)
     {
       if (num_dests == 0)
@@ -122,14 +115,14 @@ main(int  argc,                           /* I - Number of command-line arguments */
       dest = argv[i];
     else
     {
-      _cupsLangPrintf(stderr, _("lpmove: Unknown argument \'%s\'\n"),
-                      argv[i]);
+      _cupsLangPrintf(stderr, _("lpmove: Unknown argument \"%s\"."), argv[i]);
       return (1);
     }
+  }
 
   if ((!jobid && !src) || !dest)
   {
-    _cupsLangPuts(stdout, _("Usage: lpmove job/src dest\n"));
+    _cupsLangPuts(stdout, _("Usage: lpmove job/src dest"));
     return (1);
   }
 
@@ -137,8 +130,7 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
   if (http == NULL)
   {
-    _cupsLangPrintf(stderr,
-                   _("lpmove: Unable to connect to server: %s\n"),
+    _cupsLangPrintf(stderr, _("lpmove: Unable to connect to server: %s"),
                    strerror(errno));
     return (1);
   }
@@ -208,14 +200,9 @@ move_job(http_t     *http,         /* I - HTTP connection to server */
 
   if (cupsLastError() > IPP_OK_CONFLICT)
   {
-    _cupsLangPrintf(stderr, "lpmove: %s\n", cupsLastErrorString());
+    _cupsLangPrintf(stderr, "lpmove: %s", cupsLastErrorString());
     return (1);
   }
   else
     return (0);
 }
-
-
-/*
- * End of "$Id: lpmove.c 7219 2008-01-14 22:00:02Z mike $".
- */