Changeset 210
- Timestamp:
- 05/27/06 23:28:09 (3 years ago)
- Files:
-
- branches/1.0.4/src/tools/cowcp.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1.0.4/src/tools/cowcp.c
r208 r210 135 135 int cp_cow(const char *src, const char *dst) 136 136 { 137 if (link(src, dst) == -1) {138 vu_printf("link(%s, %s): %s\n", src, dst, strerror(errno));139 return -1;140 }141 137 /* init syscall data */ 142 138 struct vx_iattr iattr = { 143 .filename = dst,139 .filename = NULL, 144 140 .flags = IATTR_IMMUTABLE | IATTR_IUNLINK, 145 141 .mask = IATTR_IMMUTABLE | IATTR_IUNLINK, 146 142 }; 143 if (link(src, dst) == -1) { 144 if (errno == EPERM) { 145 // Make sure src is CoW, not just IMMUTABLE 146 iattr.filename = src; 147 if (vx_set_iattr(&iattr) == 0 && link(src, dst) == 0) 148 goto ok; 149 } 150 vu_printf("link(%s, %s): %s\n", src, dst, strerror(errno)); 151 return -1; 152 } 153 ok: 154 iattr.filename = dst; 147 155 if (vx_set_iattr(&iattr) == -1) { 148 156 vu_printf("iattr(%s): %s\n", dst, strerror(errno)); … … 270 278 opts.recurse = true; 271 279 break; 280 281 case 'f': 282 opts.force = true; 283 break; 272 284 273 285 DEFAULT_GETOPT
