write_name_quoted(): make one of the path a counted string.
This is to prepare for ls-tree updates. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
ffb1a4bed5
commit
9ef2b3cbf6
@ -344,7 +344,7 @@ static void show_dir_entry(const char *tag, struct nond_on_fs *ent)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
fputs(tag, stdout);
|
fputs(tag, stdout);
|
||||||
write_name_quoted("", ent->name + offset, line_terminator, stdout);
|
write_name_quoted("", 0, ent->name + offset, line_terminator, stdout);
|
||||||
putchar(line_terminator);
|
putchar(line_terminator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -433,7 +433,8 @@ static void show_ce_entry(const char *tag, struct cache_entry *ce)
|
|||||||
|
|
||||||
if (!show_stage) {
|
if (!show_stage) {
|
||||||
fputs(tag, stdout);
|
fputs(tag, stdout);
|
||||||
write_name_quoted("", ce->name + offset, line_terminator, stdout);
|
write_name_quoted("", 0, ce->name + offset,
|
||||||
|
line_terminator, stdout);
|
||||||
putchar(line_terminator);
|
putchar(line_terminator);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -442,7 +443,8 @@ static void show_ce_entry(const char *tag, struct cache_entry *ce)
|
|||||||
ntohl(ce->ce_mode),
|
ntohl(ce->ce_mode),
|
||||||
sha1_to_hex(ce->sha1),
|
sha1_to_hex(ce->sha1),
|
||||||
ce_stage(ce));
|
ce_stage(ce));
|
||||||
write_name_quoted("", ce->name + offset, line_terminator, stdout);
|
write_name_quoted("", 0, ce->name + offset,
|
||||||
|
line_terminator, stdout);
|
||||||
putchar(line_terminator);
|
putchar(line_terminator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,9 +157,11 @@ static int show_entry(struct tree_entry_list *e, int level, char *pathbuf)
|
|||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
if (e != &root_entry) {
|
if (e != &root_entry) {
|
||||||
|
int pathlen = strlen(pathbuf);
|
||||||
printf("%06o %s %s ",
|
printf("%06o %s %s ",
|
||||||
e->mode, entry_type(e), entry_hex(e));
|
e->mode, entry_type(e), entry_hex(e));
|
||||||
write_name_quoted(pathbuf, e->name, line_termination, stdout);
|
write_name_quoted(pathbuf, pathlen, e->name,
|
||||||
|
line_termination, stdout);
|
||||||
putchar(line_termination);
|
putchar(line_termination);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
29
quote.c
29
quote.c
@ -112,7 +112,8 @@ char *sq_dequote(char *arg)
|
|||||||
* but not enclosed in double-quote pair. Return value is undefined.
|
* but not enclosed in double-quote pair. Return value is undefined.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int quote_c_style(const char *name, char *outbuf, FILE *outfp, int no_dq)
|
static int quote_c_style_counted(const char *name, int namelen,
|
||||||
|
char *outbuf, FILE *outfp, int no_dq)
|
||||||
{
|
{
|
||||||
#undef EMIT
|
#undef EMIT
|
||||||
#define EMIT(c) \
|
#define EMIT(c) \
|
||||||
@ -125,7 +126,7 @@ int quote_c_style(const char *name, char *outbuf, FILE *outfp, int no_dq)
|
|||||||
|
|
||||||
if (!no_dq)
|
if (!no_dq)
|
||||||
EMIT('"');
|
EMIT('"');
|
||||||
for (sp = name; (ch = *sp++); ) {
|
for (sp = name; (ch = *sp++) && (sp - name) <= namelen; ) {
|
||||||
|
|
||||||
if ((ch < ' ') || (ch == '"') || (ch == '\\') ||
|
if ((ch < ' ') || (ch == '"') || (ch == '\\') ||
|
||||||
(ch == 0177)) {
|
(ch == 0177)) {
|
||||||
@ -162,6 +163,12 @@ int quote_c_style(const char *name, char *outbuf, FILE *outfp, int no_dq)
|
|||||||
return needquote ? count : 0;
|
return needquote ? count : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int quote_c_style(const char *name, char *outbuf, FILE *outfp, int no_dq)
|
||||||
|
{
|
||||||
|
int cnt = strlen(name);
|
||||||
|
return quote_c_style_counted(name, cnt, outbuf, outfp, no_dq);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* C-style name unquoting.
|
* C-style name unquoting.
|
||||||
*
|
*
|
||||||
@ -227,28 +234,30 @@ char *unquote_c_style(const char *quoted, const char **endp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void write_name_quoted(const char *prefix, const char *name,
|
void write_name_quoted(const char *prefix, int prefix_len,
|
||||||
int quote, FILE *out)
|
const char *name, int quote, FILE *out)
|
||||||
{
|
{
|
||||||
int needquote;
|
int needquote;
|
||||||
|
|
||||||
if (!quote) {
|
if (!quote) {
|
||||||
no_quote:
|
no_quote:
|
||||||
if (prefix && prefix[0])
|
if (prefix_len)
|
||||||
fputs(prefix, out);
|
fprintf(out, "%.*s", prefix_len, prefix);
|
||||||
fputs(name, out);
|
fputs(name, out);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
needquote = 0;
|
needquote = 0;
|
||||||
if (prefix && prefix[0])
|
if (prefix_len)
|
||||||
needquote = quote_c_style(prefix, NULL, NULL, 0);
|
needquote = quote_c_style_counted(prefix, prefix_len,
|
||||||
|
NULL, NULL, 0);
|
||||||
if (!needquote)
|
if (!needquote)
|
||||||
needquote = quote_c_style(name, NULL, NULL, 0);
|
needquote = quote_c_style(name, NULL, NULL, 0);
|
||||||
if (needquote) {
|
if (needquote) {
|
||||||
fputc('"', out);
|
fputc('"', out);
|
||||||
if (prefix && prefix[0])
|
if (prefix_len)
|
||||||
quote_c_style(prefix, NULL, out, 1);
|
quote_c_style_counted(prefix, prefix_len,
|
||||||
|
NULL, out, 1);
|
||||||
quote_c_style(name, NULL, out, 1);
|
quote_c_style(name, NULL, out, 1);
|
||||||
fputc('"', out);
|
fputc('"', out);
|
||||||
}
|
}
|
||||||
|
4
quote.h
4
quote.h
@ -41,7 +41,7 @@ extern int quote_c_style(const char *name, char *outbuf, FILE *outfp,
|
|||||||
int nodq);
|
int nodq);
|
||||||
extern char *unquote_c_style(const char *quoted, const char **endp);
|
extern char *unquote_c_style(const char *quoted, const char **endp);
|
||||||
|
|
||||||
extern void write_name_quoted(const char *prefix, const char *name,
|
extern void write_name_quoted(const char *prefix, int prefix_len,
|
||||||
int quote, FILE *out);
|
const char *name, int quote, FILE *out);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user