43 lines
1.3 KiB
Diff
43 lines
1.3 KiB
Diff
|
--- cups-1.1.21/scheduler/client.c.orig 2004-09-14 17:00:56.102330657 +0200
|
||
|
+++ cups-1.1.21/scheduler/client.c 2004-09-14 18:32:04.648731933 +0200
|
||
|
@@ -1262,10 +1330,36 @@
|
||
|
* names are not case sensitive but filenames can be...
|
||
|
*/
|
||
|
|
||
|
- con->uri[strlen(con->uri) - 4] = '\0'; /* Drop ".ppd" */
|
||
|
+ int i;
|
||
|
+ char tmp_uri[HTTP_MAX_URI];
|
||
|
+ char *uri, *len;
|
||
|
+
|
||
|
+ memset(tmp_uri, 0, HTTP_MAX_URI);
|
||
|
+ uri = con->uri;
|
||
|
+ len = uri + strlen(uri) - 4;
|
||
|
+ i = 0;
|
||
|
|
||
|
- if ((p = FindPrinter(con->uri + 10)) != NULL)
|
||
|
- snprintf(con->uri, sizeof(con->uri), "/ppd/%s.ppd", p->name);
|
||
|
+ while(uri < len)
|
||
|
+ {
|
||
|
+ if (uri[0] == '%' && isxdigit(uri[1]) && isxdigit(uri[2]))
|
||
|
+ {
|
||
|
+ tmp_uri[i] = (isdigit(uri[1])?uri[1]-'0':(toupper(uri[1])-'A'+10))*16
|
||
|
+ + (isdigit(uri[2])?uri[2]-'0':(toupper(uri[2])-'A'+10));
|
||
|
+ uri += 3;
|
||
|
+ }
|
||
|
+ else
|
||
|
+ {
|
||
|
+ tmp_uri[i] = uri[0];
|
||
|
+ uri++;
|
||
|
+ }
|
||
|
+ i++;
|
||
|
+ }
|
||
|
+ tmp_uri[i] = '\0';
|
||
|
+
|
||
|
+ // con->uri[strlen(con->uri) - 4] = '\0'; /* Drop ".ppd" */
|
||
|
+
|
||
|
+ if ((p = FindPrinter(tmp_uri + 10)) != NULL)
|
||
|
+ snprintf(con->uri, sizeof(con->uri), "/ppd/%s.ppd", p->name);
|
||
|
else
|
||
|
{
|
||
|
if (!SendError(con, HTTP_NOT_FOUND))
|