diff options
author | Hiroki Sato <hrs@FreeBSD.org> | 2013-04-27 16:00:26 +0000 |
---|---|---|
committer | Hiroki Sato <hrs@FreeBSD.org> | 2013-04-27 16:00:26 +0000 |
commit | 03156fbc9e57b8833d571c09fe86a65de05d8966 (patch) | |
tree | a41583195bf11eaddcc25d81461b4a49df2cefca /print/a2ps/files/patch-select.c | |
parent | - rename patch, since it's now applied uncoditionally and remove EXTRA_PATCHE... (diff) |
Add libpaper support to print/a2ps-*[1], print/c2ps-*, print/lprps-*,
graphics/jpeg2ps-*, and merge the papersize-suffixed versions into
single ones respectively as print/psutils did.
Approved by: dinoex (maintainer) [1]
Diffstat (limited to 'print/a2ps/files/patch-select.c')
-rw-r--r-- | print/a2ps/files/patch-select.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/print/a2ps/files/patch-select.c b/print/a2ps/files/patch-select.c new file mode 100644 index 000000000000..a2c38898fdc6 --- /dev/null +++ b/print/a2ps/files/patch-select.c @@ -0,0 +1,57 @@ +--- src/select.c.orig Thu Dec 16 02:04:56 1999 ++++ src/select.c Sat Aug 21 12:05:31 2004 +@@ -131,6 +131,36 @@ + return 1; + } + ++/* escapes the name of a file so that the shell groks it in 'single' q.marks. ++ The resulting pointer has to be free()ed when not longer used. */ ++char * ++shell_escape(const char *fn) ++{ ++ size_t len = 0; ++ const char *inp; ++ char *retval, *outp; ++ ++ for(inp = fn; *inp; ++inp) ++ switch(*inp) ++ { ++ case '\'': len += 4; break; ++ default: len += 1; break; ++ } ++ ++ outp = retval = malloc(len + 1); ++ if(!outp) ++ return NULL; /* perhaps one should do better error handling here */ ++ for(inp = fn; *inp; ++inp) ++ switch(*inp) ++ { ++ case '\'': *outp++ = '\''; *outp++ = '\\'; *outp++ = '\'', *outp++ = '\''; break; ++ default: *outp++ = *inp; break; ++ } ++ *outp = 0; ++ ++ return retval; ++} ++ + /* What says file about the type of a file (result is malloc'd). NULL + if could not be run. */ + +@@ -144,11 +174,15 @@ + if (IS_EMPTY (job->file_command)) + return NULL; + ++ filename = shell_escape(filename); ++ if(filename == NULL) ++ return NULL; + /* Call file(1) with the correct option */ +- command = ALLOCA (char, (2 ++ command = ALLOCA (char, (4 + + strlen (job->file_command) + + ustrlen (filename))); +- sprintf (command, "%s %s", job->file_command, (const char *) filename); ++ sprintf (command, "%s '%s'", job->file_command, (const char *) filename); ++ free(filename); + message (msg_tool, (stderr, "Reading pipe: `%s'\n", command)); + file_out = popen (command, "r"); + |