Junio C Hamano | 6fb737b | 2005-07-07 23:58:32 -0700 | [diff] [blame] | 1 | #ifndef QUOTE_H |
| 2 | #define QUOTE_H |
| 3 | |
H. Peter Anvin | 77d604c | 2005-10-10 14:46:10 -0700 | [diff] [blame] | 4 | #include <stddef.h> |
Junio C Hamano | 4f6fbcd | 2005-10-14 21:54:47 -0700 | [diff] [blame] | 5 | #include <stdio.h> |
Junio C Hamano | 6fb737b | 2005-07-07 23:58:32 -0700 | [diff] [blame] | 6 | |
| 7 | /* Help to copy the thing properly quoted for the shell safety. |
H. Peter Anvin | 77d604c | 2005-10-10 14:46:10 -0700 | [diff] [blame] | 8 | * any single quote is replaced with '\'', any exclamation point |
| 9 | * is replaced with '\!', and the whole thing is enclosed in a |
| 10 | * single quote pair. |
Junio C Hamano | 6fb737b | 2005-07-07 23:58:32 -0700 | [diff] [blame] | 11 | * |
| 12 | * For example, if you are passing the result to system() as an |
| 13 | * argument: |
| 14 | * |
| 15 | * sprintf(cmd, "foobar %s %s", sq_quote(arg0), sq_quote(arg1)) |
| 16 | * |
| 17 | * would be appropriate. If the system() is going to call ssh to |
| 18 | * run the command on the other side: |
| 19 | * |
| 20 | * sprintf(cmd, "git-diff-tree %s %s", sq_quote(arg0), sq_quote(arg1)); |
| 21 | * sprintf(rcmd, "ssh %s %s", sq_quote(host), sq_quote(cmd)); |
| 22 | * |
| 23 | * Note that the above examples leak memory! Remember to free result from |
| 24 | * sq_quote() in a real application. |
H. Peter Anvin | 77d604c | 2005-10-10 14:46:10 -0700 | [diff] [blame] | 25 | * |
| 26 | * sq_quote_buf() writes to an existing buffer of specified size; it |
| 27 | * will return the number of characters that would have been written |
| 28 | * excluding the final null regardless of the buffer size. |
Junio C Hamano | 6fb737b | 2005-07-07 23:58:32 -0700 | [diff] [blame] | 29 | */ |
| 30 | |
Matthias Lederhofer | 575ba9d | 2006-06-25 15:56:18 +0200 | [diff] [blame] | 31 | extern void sq_quote_print(FILE *stream, const char *src); |
Junio C Hamano | 4f6fbcd | 2005-10-14 21:54:47 -0700 | [diff] [blame] | 32 | |
Pierre Habouzit | 7a33bcb | 2007-09-20 00:42:13 +0200 | [diff] [blame] | 33 | extern void sq_quote_buf(struct strbuf *, const char *src); |
Christian Couder | b319ce4 | 2007-12-03 05:51:50 +0100 | [diff] [blame] | 34 | extern void sq_quote_argv(struct strbuf *, const char **argv, size_t maxlen); |
Christian Couder | 86257aa | 2006-09-11 06:59:22 +0200 | [diff] [blame] | 35 | |
Linus Torvalds | 35eb2d3 | 2005-10-23 14:30:45 -0700 | [diff] [blame] | 36 | /* This unwraps what sq_quote() produces in place, but returns |
| 37 | * NULL if the input does not look like what sq_quote would have |
| 38 | * produced. |
| 39 | */ |
| 40 | extern char *sq_dequote(char *); |
| 41 | |
Pierre Habouzit | 7fb1011 | 2007-09-20 00:42:14 +0200 | [diff] [blame] | 42 | extern int unquote_c_style(struct strbuf *, const char *quoted, const char **endp); |
Pierre Habouzit | 663af34 | 2007-09-20 00:42:15 +0200 | [diff] [blame] | 43 | extern size_t quote_c_style(const char *name, struct strbuf *, FILE *, int no_dq); |
Junio C Hamano | d562509 | 2007-12-26 17:13:36 -0800 | [diff] [blame] | 44 | extern void quote_two_c_style(struct strbuf *, const char *, const char *, int); |
Junio C Hamano | 4f6fbcd | 2005-10-14 21:54:47 -0700 | [diff] [blame] | 45 | |
Pierre Habouzit | 663af34 | 2007-09-20 00:42:15 +0200 | [diff] [blame] | 46 | extern void write_name_quoted(const char *name, FILE *, int terminator); |
| 47 | extern void write_name_quotedpfx(const char *pfx, size_t pfxlen, |
| 48 | const char *name, FILE *, int terminator); |
Junio C Hamano | 6fb737b | 2005-07-07 23:58:32 -0700 | [diff] [blame] | 49 | |
Dmitry Potapov | a734d0b | 2008-03-07 05:30:58 +0300 | [diff] [blame] | 50 | /* quote path as relative to the given prefix */ |
| 51 | char *quote_path_relative(const char *in, int len, |
| 52 | struct strbuf *out, const char *prefix); |
| 53 | |
Junio C Hamano | 9f613dd | 2006-09-15 13:30:02 -0700 | [diff] [blame] | 54 | /* quoting as a string literal for other languages */ |
| 55 | extern void perl_quote_print(FILE *stream, const char *src); |
| 56 | extern void python_quote_print(FILE *stream, const char *src); |
Shawn O. Pearce | 5558e55 | 2007-01-28 02:39:13 -0500 | [diff] [blame] | 57 | extern void tcl_quote_print(FILE *stream, const char *src); |
Junio C Hamano | 9f613dd | 2006-09-15 13:30:02 -0700 | [diff] [blame] | 58 | |
Junio C Hamano | 6fb737b | 2005-07-07 23:58:32 -0700 | [diff] [blame] | 59 | #endif |