]>
Commit | Line | Data |
---|---|---|
6fb737be JH |
1 | #ifndef QUOTE_H |
2 | #define QUOTE_H | |
3 | ||
77d604c3 | 4 | #include <stddef.h> |
4f6fbcdc | 5 | #include <stdio.h> |
6fb737be JH |
6 | |
7 | /* Help to copy the thing properly quoted for the shell safety. | |
77d604c3 PA |
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. | |
6fb737be JH |
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. | |
77d604c3 PA |
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. | |
6fb737be JH |
29 | */ |
30 | ||
4f6fbcdc | 31 | extern char *sq_quote(const char *src); |
575ba9d6 | 32 | extern void sq_quote_print(FILE *stream, const char *src); |
4f6fbcdc | 33 | extern size_t sq_quote_buf(char *dst, size_t n, const char *src); |
7cf67205 | 34 | extern char *sq_quote_argv(const char** argv, int count); |
4f6fbcdc | 35 | |
86257aa3 CC |
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 | ||
35eb2d36 LT |
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 | ||
4f6fbcdc JH |
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 | ||
9ef2b3cb JH |
52 | extern void write_name_quoted(const char *prefix, int prefix_len, |
53 | const char *name, int quote, FILE *out); | |
6fb737be | 54 | |
9f613ddd JH |
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); | |
5558e55c | 58 | extern void tcl_quote_print(FILE *stream, const char *src); |
9f613ddd | 59 | |
6fb737be | 60 | #endif |