summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ffb1a4b)
raw | patch | inline | side by side (parent: ffb1a4b)
author | Junio C Hamano <junkio@cox.net> | |
Tue, 29 Nov 2005 06:55:25 +0000 (22:55 -0800) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Tue, 29 Nov 2005 06:55:25 +0000 (22:55 -0800) |
This is to prepare for ls-tree updates.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
ls-files.c | patch | blob | history | |
ls-tree.c | patch | blob | history | |
quote.c | patch | blob | history | |
quote.h | patch | blob | history |
diff --git a/ls-files.c b/ls-files.c
index db2288aeee61bf64f30fdcc4b11e91c0cd3038a0..f3f1a6a6633881bf43887731fdcbe08af9ad2f4a 100644 (file)
--- a/ls-files.c
+++ b/ls-files.c
return;
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);
}
if (!show_stage) {
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);
}
else {
ntohl(ce->ce_mode),
sha1_to_hex(ce->sha1),
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);
}
}
diff --git a/ls-tree.c b/ls-tree.c
index d9f15e349cb833401eea38d21fb050b10f9678d4..d7c7e750fbf08363731e7bafdc6b2b1b058ccc38 100644 (file)
--- a/ls-tree.c
+++ b/ls-tree.c
int err = 0;
if (e != &root_entry) {
+ int pathlen = strlen(pathbuf);
printf("%06o %s %s ",
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);
}
index e662a7da71e39c1ffc3d1a4bf485fda17df5e907..76eb14426581f03d0b15ee4eb720456a0729d1bc 100644 (file)
--- a/quote.c
+++ b/quote.c
* 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
#define EMIT(c) \
if (!no_dq)
EMIT('"');
- for (sp = name; (ch = *sp++); ) {
+ for (sp = name; (ch = *sp++) && (sp - name) <= namelen; ) {
if ((ch < ' ') || (ch == '"') || (ch == '\\') ||
(ch == 0177)) {
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.
*
}
}
-void write_name_quoted(const char *prefix, const char *name,
- int quote, FILE *out)
+void write_name_quoted(const char *prefix, int prefix_len,
+ const char *name, int quote, FILE *out)
{
int needquote;
if (!quote) {
no_quote:
- if (prefix && prefix[0])
- fputs(prefix, out);
+ if (prefix_len)
+ fprintf(out, "%.*s", prefix_len, prefix);
fputs(name, out);
return;
}
needquote = 0;
- if (prefix && prefix[0])
- needquote = quote_c_style(prefix, NULL, NULL, 0);
+ if (prefix_len)
+ needquote = quote_c_style_counted(prefix, prefix_len,
+ NULL, NULL, 0);
if (!needquote)
needquote = quote_c_style(name, NULL, NULL, 0);
if (needquote) {
fputc('"', out);
- if (prefix && prefix[0])
- quote_c_style(prefix, NULL, out, 1);
+ if (prefix_len)
+ quote_c_style_counted(prefix, prefix_len,
+ NULL, out, 1);
quote_c_style(name, NULL, out, 1);
fputc('"', out);
}
index 2486e6e68c2d7fa7bc2f78c18df323cc9adcc894..c1ab3788e6d69318638142ebeffc690318a0489a 100644 (file)
--- a/quote.h
+++ b/quote.h
int nodq);
extern char *unquote_c_style(const char *quoted, const char **endp);
-extern void write_name_quoted(const char *prefix, const char *name,
- int quote, FILE *out);
+extern void write_name_quoted(const char *prefix, int prefix_len,
+ const char *name, int quote, FILE *out);
#endif