cups/cups-1.1.21-umlaut_printer.patch

43 lines
1.3 KiB
Diff
Raw Normal View History

--- 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))