/*
- * "$Id: usb.c,v 1.18.2.35 2004/05/13 15:13:52 mike Exp $"
+ * "$Id$"
*
* USB port backend for the Common UNIX Printing System (CUPS).
*
- * Copyright 1997-2004 by Easy Software Products, all rights reserved.
+ * Copyright 2007-2009 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-3142 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.
*
# include <ApplicationServices/ApplicationServices.h>
#endif /* __APPLE__ */
-#include <cups/cups.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <cups/string.h>
-#include <signal.h>
+#include "backend-private.h"
#ifdef WIN32
# include <io.h>
void list_devices(void);
int print_device(const char *uri, const char *hostname,
- const char *resource, const char *options,
- int fp, int copies);
+ const char *resource, char *options,
+ int print_fd, int copies, int argc, char *argv[]);
/*
* Include the vendor-specific USB implementation...
*/
-#ifdef __APPLE__
+#ifdef HAVE_USB_H
+# include "usb-libusb.c"
+#elif defined(__APPLE__)
# include "usb-darwin.c"
-#elif defined(__linux) || defined(__sun) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+#elif defined(__linux) || defined(__sun) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
# include "usb-unix.c"
#else
/*
print_device(const char *uri, /* I - Device URI */
const char *hostname, /* I - Hostname/manufacturer */
const char *resource, /* I - Resource/modelname */
- const char *options, /* I - Device options/serial number */
- int fp, /* I - File descriptor to print */
- int copies) /* I - Copies to print */
+ char *options, /* I - Device options/serial number */
+ int print_fd, /* I - File descriptor to print */
+ int copies, /* I - Copies to print */
+ int argc, /* I - Number of command-line arguments (6 or 7) */
+ char *argv[]) /* I - Command-line arguments */
{
/*
* Can't print, so just reference the arguments to eliminate compiler
(void)hostname;
(void)resource;
(void)options;
- (void)fp;
+ (void)print_fd;
(void)copies;
+ (void)argc;
+ (void)argv;
- return (1);
+ return (CUPS_BACKEND_FAILED);
}
#endif /* __APPLE__ */
main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
- int fp; /* Print file */
+ int print_fd; /* Print file */
int copies; /* Number of copies to print */
int status; /* Exit status */
int port; /* Port number (not used) */
if (argc == 1)
{
list_devices();
- return (0);
+ return (CUPS_BACKEND_OK);
}
else if (argc < 6 || argc > 7)
{
- fputs("Usage: usb job-id user title copies options [file]\n", stderr);
- return (1);
+ _cupsLangPrintf(stderr,
+ _("Usage: %s job-id user title copies options [file]"),
+ argv[0]);
+ return (CUPS_BACKEND_FAILED);
}
/*
* Extract the device name and options from the URI...
*/
- if (strncmp(argv[0], "usb:", 4))
- uri = getenv("DEVICE_URI");
- else
- uri = argv[0];
+ uri = cupsBackendDeviceURI(argv);
- if (!uri)
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, uri,
+ method, sizeof(method), username, sizeof(username),
+ hostname, sizeof(hostname), &port,
+ resource, sizeof(resource)) < HTTP_URI_OK)
{
- fputs("ERROR: No device URI found in argv[0] or in DEVICE_URI environment variable!\n", stderr);
+ _cupsLangPrintFilter(stderr, "ERROR",
+ _("No device URI found in argv[0] or in DEVICE_URI "
+ "environment variable."));
return (1);
}
- httpSeparate(argv[0], method, username, hostname, &port, resource);
-
/*
* See if there are any options...
*/
if (argc == 6)
{
- fp = 0;
- copies = 1;
+ print_fd = 0;
+ copies = 1;
}
else
{
* Try to open the print file...
*/
- if ((fp = open(argv[6], O_RDONLY)) < 0)
+ if ((print_fd = open(argv[6], O_RDONLY)) < 0)
{
- fprintf(stderr, "ERROR: unable to open print file %s - %s\n",
- argv[6], strerror(errno));
- return (1);
+ _cupsLangPrintError("ERROR", _("Unable to open print file"));
+ return (CUPS_BACKEND_FAILED);
}
copies = atoi(argv[4]);
* Finally, send the print file...
*/
- status = print_device(uri, hostname, resource, options, fp, copies);
+ status = print_device(uri, hostname, resource, options, print_fd, copies,
+ argc, argv);
/*
* Close the input file and return...
*/
- if (fp != 0)
- close(fp);
+ if (print_fd != 0)
+ close(print_fd);
return (status);
}
/*
- * End of "$Id: usb.c,v 1.18.2.35 2004/05/13 15:13:52 mike Exp $".
+ * End of "$Id$".
*/