]> git.ipfire.org Git - thirdparty/cups.git/blame - cups/backend.c
Merge changes from CUPS 1.4svn-r7817.
[thirdparty/cups.git] / cups / backend.c
CommitLineData
a4d04587 1/*
749b1e90 2 * "$Id: backend.c 7810 2008-07-29 01:11:15Z mike $"
a4d04587 3 *
4 * Backend functions for the Common UNIX Printing System (CUPS).
5 *
ac884b6a 6 * Copyright 2007-2008 by Apple Inc.
a4d04587 7 * Copyright 2006 by Easy Software Products.
8 *
9 * These coded instructions, statements, and computer programs are the
bc44d920 10 * property of Apple Inc. and are protected by Federal copyright
11 * law. Distribution and use rights are outlined in the file "LICENSE.txt"
12 * which should have been included with this file. If this file is
13 * file is missing or damaged, see the license at "http://www.cups.org/".
a4d04587 14 *
15 * This file is subject to the Apple OS-Developed Software exception.
16 *
17 * Contents:
18 *
19 * cupsBackendDeviceURI() - Get the device URI for a backend.
749b1e90
MS
20 * cupsBackendReport() - Write a device line from a backend.
21 * quote_string() - Write a quoted string to stdout, escaping \ and ".
a4d04587 22 */
23
24/*
25 * Include necessary headers...
26 */
27
28#include <stdlib.h>
29#include "backend.h"
5eb9da71 30#include "globals.h"
a4d04587 31
32
749b1e90
MS
33/*
34 * Local functions...
35 */
36
37static void quote_string(const char *s);
38
39
a4d04587 40/*
41 * 'cupsBackendDeviceURI()' - Get the device URI for a backend.
42 *
43 * The "argv" argument is the argv argument passed to main(). This
44 * function returns the device URI passed in the DEVICE_URI environment
45 * variable or the device URI passed in argv[0], whichever is found
46 * first.
47 */
48
ac884b6a 49const char * /* O - Device URI or @code NULL@ */
a4d04587 50cupsBackendDeviceURI(char **argv) /* I - Command-line arguments */
51{
52 const char *device_uri; /* Device URI */
5eb9da71 53 _cups_globals_t *cg = _cupsGlobals(); /* Global info */
a4d04587 54
55
5eb9da71
MS
56 if ((device_uri = getenv("DEVICE_URI")) == NULL)
57 {
58 if (!argv || !argv[0] || !strchr(argv[0], ':'))
59 return (NULL);
a4d04587 60
5eb9da71
MS
61 device_uri = argv[0];
62 }
63
64 return (_httpResolveURI(device_uri, cg->resolved_uri,
1f0275e3 65 sizeof(cg->resolved_uri), 1));
a4d04587 66}
67
68
69/*
749b1e90
MS
70 * 'cupsBackendReport()' - Write a device line from a backend.
71 *
72 * This function writes a single device line to stdout for a backend.
73 * It handles quoting of special characters in the device-make-and-model,
74 * device-info, device-id, and device-location strings.
75 */
76
77void
78cupsBackendReport(
79 const char *device_scheme, /* I - device-scheme string */
80 const char *device_uri, /* I - device-uri string */
81 const char *device_make_and_model, /* I - device-make-and-model string or @code NULL@ */
82 const char *device_info, /* I - device-info string or @code NULL@ */
83 const char *device_id, /* I - device-id string or @code NULL@ */
84 const char *device_location) /* I - device-location string or @code NULL@ */
85{
86 if (!device_scheme || !device_uri)
87 return;
88
89 printf("%s %s", device_scheme, device_uri);
90 if (device_make_and_model && *device_make_and_model)
91 quote_string(device_make_and_model);
92 else
93 quote_string("unknown");
94 quote_string(device_info);
95 quote_string(device_id);
96 quote_string(device_location);
97 putchar('\n');
98 fflush(stdout);
99}
100
101
102/*
103 * 'quote_string()' - Write a quoted string to stdout, escaping \ and ".
104 */
105
106static void
107quote_string(const char *s) /* I - String to write */
108{
109 fputs(" \"", stdout);
110
111 if (s)
112 {
113 while (*s)
114 {
115 if (*s == '\\' || *s == '\"')
116 putchar('\\');
117
118 putchar(*s);
119
120 s ++;
121 }
122 }
123
124 putchar('\"');
125}
126
127
128/*
129 * End of "$Id: backend.c 7810 2008-07-29 01:11:15Z mike $".
a4d04587 130 */