Changeset 210

Show
Ignore:
Timestamp:
05/27/06 23:28:09 (3 years ago)
Author:
bonbons
Message:

Some improvement to cowcp:

dont fail on IMMUTABLE source

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.0.4/src/tools/cowcp.c

    r208 r210  
    135135int cp_cow(const char *src, const char *dst) 
    136136{ 
    137         if (link(src, dst) == -1) { 
    138                 vu_printf("link(%s, %s): %s\n", src, dst, strerror(errno)); 
    139                 return -1; 
    140         } 
    141137        /* init syscall data */ 
    142138        struct vx_iattr iattr = { 
    143                 .filename = dst
     139                .filename = NULL
    144140                .flags = IATTR_IMMUTABLE | IATTR_IUNLINK, 
    145141                .mask  = IATTR_IMMUTABLE | IATTR_IUNLINK, 
    146142        }; 
     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        } 
     153ok: 
     154        iattr.filename = dst; 
    147155        if (vx_set_iattr(&iattr) == -1) { 
    148156                vu_printf("iattr(%s): %s\n", dst, strerror(errno)); 
     
    270278                                opts.recurse = true; 
    271279                                break; 
     280 
     281                        case 'f': 
     282                                opts.force = true; 
     283                                break; 
    272284                         
    273285                        DEFAULT_GETOPT