summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-04-26 17:08:00 -0700
committerJunio C Hamano <junkio@cox.net>2006-04-26 17:08:00 -0700
commit69bcc43eca0f251617e3b5db5df632b24db94e92 (patch)
treed816d41d36c73f3e665e4a2967a59abef4ce12d3 /setup.c
parent3496277a561307c3d31d2085347af8eb4c667c36 (diff)
parent5981e09999e90b389a02843671529a0faaf72143 (diff)
downloadgit-69bcc43eca0f251617e3b5db5df632b24db94e92.tar.gz
Merge branch 'fix'
* fix: commit-tree.c: check_valid() microoptimization. Fix filename verification when in a subdirectory rebase: typofix. socksetup: don't return on set_reuse_addr() error
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/setup.c b/setup.c
index 36ede3d874..cce9bb8069 100644
--- a/setup.c
+++ b/setup.c
@@ -62,6 +62,29 @@ const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
return path;
}
+/*
+ * Verify a filename that we got as an argument for a pathspec
+ * entry. Note that a filename that begins with "-" never verifies
+ * as true, because even if such a filename were to exist, we want
+ * it to be preceded by the "--" marker (or we want the user to
+ * use a format like "./-filename")
+ */
+void verify_filename(const char *prefix, const char *arg)
+{
+ const char *name;
+ struct stat st;
+
+ if (*arg == '-')
+ die("bad flag '%s' used after filename", arg);
+ name = prefix ? prefix_filename(prefix, strlen(prefix), arg) : arg;
+ if (!lstat(name, &st))
+ return;
+ if (errno == ENOENT)
+ die("ambiguous argument '%s': unknown revision or filename\n"
+ "Use '--' to separate filenames from revisions", arg);
+ die("'%s': %s", arg, strerror(errno));
+}
+
const char **get_pathspec(const char *prefix, const char **pathspec)
{
const char *entry = *pathspec;