diff options
Diffstat (limited to 'coreutils/cp.c')
-rw-r--r-- | coreutils/cp.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/coreutils/cp.c b/coreutils/cp.c index 455bffbba..ae60623d3 100644 --- a/coreutils/cp.c +++ b/coreutils/cp.c | |||
@@ -24,6 +24,11 @@ | |||
24 | //config: help | 24 | //config: help |
25 | //config: Enable long options. | 25 | //config: Enable long options. |
26 | //config: Also add support for --parents option. | 26 | //config: Also add support for --parents option. |
27 | //config: | ||
28 | //config:config FEATURE_CP_REFLINK | ||
29 | //config: bool "Enable --reflink[=auto]" | ||
30 | //config: default y | ||
31 | //config: depends on FEATURE_CP_LONG_OPTIONS | ||
27 | 32 | ||
28 | //applet:IF_CP(APPLET_NOEXEC(cp, cp, BB_DIR_BIN, BB_SUID_DROP, cp)) | 33 | //applet:IF_CP(APPLET_NOEXEC(cp, cp, BB_DIR_BIN, BB_SUID_DROP, cp)) |
29 | /* NOEXEC despite cases when it can be a "runner" (cp -r LARGE_DIR NEW_DIR) */ | 34 | /* NOEXEC despite cases when it can be a "runner" (cp -r LARGE_DIR NEW_DIR) */ |
@@ -72,10 +77,14 @@ int cp_main(int argc, char **argv) | |||
72 | #if ENABLE_FEATURE_CP_LONG_OPTIONS | 77 | #if ENABLE_FEATURE_CP_LONG_OPTIONS |
73 | /*OPT_rmdest = FILEUTILS_RMDEST = 1 << FILEUTILS_CP_OPTNUM */ | 78 | /*OPT_rmdest = FILEUTILS_RMDEST = 1 << FILEUTILS_CP_OPTNUM */ |
74 | OPT_parents = 1 << (FILEUTILS_CP_OPTNUM+1), | 79 | OPT_parents = 1 << (FILEUTILS_CP_OPTNUM+1), |
80 | OPT_reflink = 1 << (FILEUTILS_CP_OPTNUM+2), | ||
75 | #endif | 81 | #endif |
76 | }; | 82 | }; |
77 | 83 | ||
78 | #if ENABLE_FEATURE_CP_LONG_OPTIONS | 84 | #if ENABLE_FEATURE_CP_LONG_OPTIONS |
85 | # if ENABLE_FEATURE_CP_REFLINK | ||
86 | char *reflink = NULL; | ||
87 | # endif | ||
79 | flags = getopt32long(argv, "^" | 88 | flags = getopt32long(argv, "^" |
80 | FILEUTILS_CP_OPTSTR | 89 | FILEUTILS_CP_OPTSTR |
81 | "\0" | 90 | "\0" |
@@ -99,7 +108,22 @@ int cp_main(int argc, char **argv) | |||
99 | "update\0" No_argument "u" | 108 | "update\0" No_argument "u" |
100 | "remove-destination\0" No_argument "\xff" | 109 | "remove-destination\0" No_argument "\xff" |
101 | "parents\0" No_argument "\xfe" | 110 | "parents\0" No_argument "\xfe" |
111 | # if ENABLE_FEATURE_CP_REFLINK | ||
112 | "reflink\0" Optional_argument "\xfd" | ||
113 | , &reflink | ||
114 | # endif | ||
102 | ); | 115 | ); |
116 | # if ENABLE_FEATURE_CP_REFLINK | ||
117 | BUILD_BUG_ON(OPT_reflink != FILEUTILS_REFLINK); | ||
118 | if (flags & FILEUTILS_REFLINK) { | ||
119 | if (!reflink) | ||
120 | flags |= FILEUTILS_REFLINK_ALWAYS; | ||
121 | else if (strcmp(reflink, "always") == 0) | ||
122 | flags |= FILEUTILS_REFLINK_ALWAYS; | ||
123 | else if (strcmp(reflink, "auto") != 0) | ||
124 | bb_show_usage(); | ||
125 | } | ||
126 | # endif | ||
103 | #else | 127 | #else |
104 | flags = getopt32(argv, "^" | 128 | flags = getopt32(argv, "^" |
105 | FILEUTILS_CP_OPTSTR | 129 | FILEUTILS_CP_OPTSTR |