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 | |
Junio C Hamano | 4f6fbcd | 2005-10-14 21:54:47 -0700 | [diff] [blame] | 31 | extern char *sq_quote(const char *src); |
Matthias Lederhofer | 575ba9d | 2006-06-25 15:56:18 +0200 | [diff] [blame] | 32 | extern void sq_quote_print(FILE *stream, const char *src); |
Junio C Hamano | 4f6fbcd | 2005-10-14 21:54:47 -0700 | [diff] [blame] | 33 | extern size_t sq_quote_buf(char *dst, size_t n, const char *src); |
Christian Couder | 7cf6720 | 2006-08-31 08:42:11 +0200 | [diff] [blame] | 34 | extern char *sq_quote_argv(const char** argv, int count); |
Junio C Hamano | 4f6fbcd | 2005-10-14 21:54:47 -0700 | [diff] [blame] | 35 | |
Christian Couder | 86257aa | 2006-09-11 06:59:22 +0200 | [diff] [blame] | 36 | /* |
| 37 | * Append a string to a string buffer, with or without shell quoting. |
| 38 | * Return true if the buffer overflowed. |
| 39 | */ |
| 40 | extern int add_to_string(char **ptrp, int *sizep, const char *str, int quote); |
| 41 | |
Linus Torvalds | 35eb2d3 | 2005-10-23 14:30:45 -0700 | [diff] [blame] | 42 | /* This unwraps what sq_quote() produces in place, but returns |
| 43 | * NULL if the input does not look like what sq_quote would have |
| 44 | * produced. |
| 45 | */ |
| 46 | extern char *sq_dequote(char *); |
| 47 | |
Junio C Hamano | 4f6fbcd | 2005-10-14 21:54:47 -0700 | [diff] [blame] | 48 | extern int quote_c_style(const char *name, char *outbuf, FILE *outfp, |
| 49 | int nodq); |
| 50 | extern char *unquote_c_style(const char *quoted, const char **endp); |
| 51 | |
Junio C Hamano | 9ef2b3c | 2005-11-28 22:55:25 -0800 | [diff] [blame] | 52 | extern void write_name_quoted(const char *prefix, int prefix_len, |
| 53 | const char *name, int quote, FILE *out); |
Junio C Hamano | 6fb737b | 2005-07-07 23:58:32 -0700 | [diff] [blame] | 54 | |
Junio C Hamano | 9f613dd | 2006-09-15 13:30:02 -0700 | [diff] [blame] | 55 | /* quoting as a string literal for other languages */ |
| 56 | extern void perl_quote_print(FILE *stream, const char *src); |
| 57 | extern void python_quote_print(FILE *stream, const char *src); |
| 58 | |
Junio C Hamano | 6fb737b | 2005-07-07 23:58:32 -0700 | [diff] [blame] | 59 | #endif |