Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148952188
D53863.1789264265.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D53863.1789264265.diff
View Options
diff --git a/bin/cp/cp.c b/bin/cp/cp.c
--- a/bin/cp/cp.c
+++ b/bin/cp/cp.c
@@ -433,6 +433,8 @@
sep = strchr(to.base, '\0');
sep[0] = '/';
sep[1] = '\0';
+ } else if (strcmp(curr->fts_name, "/") == 0) {
+ /* special case when source is the root directory */
} else {
/* entering a directory; append its name to to.path */
len = snprintf(to.end, END(to.path) - to.end, "%s%s",
@@ -520,6 +522,8 @@
if (type == DIR_TO_DNE &&
curr->fts_level == FTS_ROOTLEVEL) {
/* this is actually our created root */
+ } else if (strcmp(curr->fts_name, "/") == 0) {
+ /* special case when source is the root directory */
} else {
while (to.end > to.path && *to.end != '/')
to.end--;
@@ -551,7 +555,8 @@
/* Not an error but need to remember it happened. */
if (to.path[0] == '\0') {
/*
- * This can happen in two cases:
+ * This can happen in three cases:
+ * - The source path is the root directory.
* - DIR_TO_DNE; we created the directory and
* populated root_stat earlier.
* - FILE_TO_DIR if a source has a trailing slash;
diff --git a/bin/cp/tests/cp_test.sh b/bin/cp/tests/cp_test.sh
--- a/bin/cp/tests/cp_test.sh
+++ b/bin/cp/tests/cp_test.sh
@@ -747,9 +747,23 @@
atf_check cmp dir/file dst/file
}
+atf_test_case root
+root_head()
+{
+ atf_set "descr" "Test copying the root directory"
+}
+root_body()
+{
+ atf_check mkdir dst
+ atf_check -s exit:1 \
+ -e inline:"cp: / is a directory (not copied).\n" \
+ cp / dst
+}
+
atf_test_case to_root cleanup
to_root_head()
{
+ atf_set "descr" "Test copying to the root directory"
atf_set "require.user" "unprivileged"
}
to_root_body()
@@ -893,6 +907,7 @@
atf_add_test_case to_deaddirlink
atf_add_test_case to_link_outside
atf_add_test_case dstmode
+ atf_add_test_case root
atf_add_test_case to_root
atf_add_test_case dirloop
atf_add_test_case unrdir
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Sep 13, 1:51 AM (39 m, 34 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29570636
Default Alt Text
D53863.1789264265.diff (1 KB)
Attached To
Mode
D53863: cp: Fix copying the root directory
Attached
Detach File
Event Timeline
Log In to Comment