author | Vladimir Marek <Vladimir.Marek@oracle.com> |
Thu, 18 Aug 2011 12:40:34 -0700 | |
changeset 483 | 039b6fd5ced3 |
permissions | -rw-r--r-- |
483
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
1 |
--- ap2s/src/select.c.orig Thu Dec 16 02:04:56 1999 |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
2 |
+++ ap2s/src/select.c Sat Aug 21 12:05:31 2004 |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
3 |
@@ -131,6 +131,36 @@ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
4 |
return 1; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
5 |
} |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
6 |
|
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
7 |
+/* escapes the name of a file so that the shell groks it in 'single' q.marks. |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
8 |
+ The resulting pointer has to be free()ed when not longer used. */ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
9 |
+char * |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
10 |
+shell_escape(const char *fn) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
11 |
+{ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
12 |
+ size_t len = 0; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
13 |
+ const char *inp; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
14 |
+ char *retval, *outp; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
15 |
+ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
16 |
+ for(inp = fn; *inp; ++inp) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
17 |
+ switch(*inp) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
18 |
+ { |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
19 |
+ case '\'': len += 4; break; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
20 |
+ default: len += 1; break; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
21 |
+ } |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
22 |
+ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
23 |
+ outp = retval = malloc(len + 1); |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
24 |
+ if(!outp) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
25 |
+ return NULL; /* perhaps one should do better error handling here */ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
26 |
+ for(inp = fn; *inp; ++inp) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
27 |
+ switch(*inp) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
28 |
+ { |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
29 |
+ case '\'': *outp++ = '\''; *outp++ = '\\'; *outp++ = '\'', *outp++ = '\''; break; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
30 |
+ default: *outp++ = *inp; break; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
31 |
+ } |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
32 |
+ *outp = 0; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
33 |
+ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
34 |
+ return retval; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
35 |
+} |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
36 |
+ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
37 |
/* What says file about the type of a file (result is malloc'd). NULL |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
38 |
if could not be run. */ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
39 |
|
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
40 |
@@ -144,11 +174,15 @@ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
41 |
if (IS_EMPTY (job->file_command)) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
42 |
return NULL; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
43 |
|
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
44 |
+ filename = shell_escape(filename); |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
45 |
+ if(filename == NULL) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
46 |
+ return NULL; |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
47 |
/* Call file(1) with the correct option */ |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
48 |
- command = ALLOCA (char, (2 |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
49 |
+ command = ALLOCA (char, (4 |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
50 |
+ strlen (job->file_command) |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
51 |
+ ustrlen (filename))); |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
52 |
- sprintf (command, "%s %s", job->file_command, (const char *) filename); |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
53 |
+ sprintf (command, "%s '%s'", job->file_command, (const char *) filename); |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
54 |
+ free(filename); |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
55 |
message (msg_tool, (stderr, "Reading pipe: `%s'\n", command)); |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
56 |
file_out = popen (command, "r"); |
039b6fd5ced3
7008719 Problem with print/a2ps
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
57 |