On Fri, Jan 10, 2014 at 05:36:39PM +0100, Pino Toscano wrote:
[..]
This still isn't quite what I meant. My meaning was that mode
would be disabled by default (unless all:true).
How about:
int copy_mode, copy_xattributes, copy_ownership;
/* Set defaults. */
if (all)
copy_mode = copy_xattributes = copy_ownership = 1;
else
copy_mode = copy_xattributes = copy_ownership = 0;
/* If set in the original struct, copy those settings overriding
* the defaults.
*/
if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_MODE_BITMASK))
copy_mode = mode;
if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_XATTRIBUTES_BITMASK))
copy_xattributes = xattributes;
if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_OWNERSHIP_BITMASK))
copy_ownership = ownership;
if (!copy_mode && !copy_xattributes && !copy_ownership) {
/* Short-circuit the code, but this *isn't* an error. */
return 0;
}
[...]
if (copy_mode)
// chmod
etc.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
On Friday 10 January 2014 16:53:32 Richard W.M. Jones wrote:> On Fri, Jan 10, 2014 at 05:36:39PM +0100, Pino Toscano wrote: > [..] > > This still isn't quite what I meant. My meaning was that mode > would be disabled by default (unless all:true).OK.> How about: > > int copy_mode, copy_xattributes, copy_ownership; > > /* Set defaults. */ > if (all) > copy_mode = copy_xattributes = copy_ownership = 1; > else > copy_mode = copy_xattributes = copy_ownership = 0; > > /* If set in the original struct, copy those settings overriding > * the defaults. > */ > if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_MODE_BITMASK)) > copy_mode = mode; > if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_XATTRIBUTES_BITMASK)) > copy_xattributes = xattributes; > if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_OWNERSHIP_BITMASK)) > copy_ownership = ownership;Isn't this doing basically the same of the snippet I used (the «if (all) { ... }» one), short of the part that enables mode if neither all nor mode were specified? -- Pino Toscano
On Mon, Jan 13, 2014 at 12:54:36PM +0100, Pino Toscano wrote:> On Friday 10 January 2014 16:53:32 Richard W.M. Jones wrote: > > On Fri, Jan 10, 2014 at 05:36:39PM +0100, Pino Toscano wrote: > > [..] > > > > This still isn't quite what I meant. My meaning was that mode > > would be disabled by default (unless all:true). > > OK. > > > How about: > > > > int copy_mode, copy_xattributes, copy_ownership; > > > > /* Set defaults. */ > > if (all) > > copy_mode = copy_xattributes = copy_ownership = 1; > > else > > copy_mode = copy_xattributes = copy_ownership = 0; > > > > /* If set in the original struct, copy those settings overriding > > * the defaults. > > */ > > if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_MODE_BITMASK)) > > copy_mode = mode; > > if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_XATTRIBUTES_BITMASK)) > > copy_xattributes = xattributes; > > if ((optargs_bitmask & GUESTFS_COPY_ATTRIBUTES_OWNERSHIP_BITMASK)) > > copy_ownership = ownership; > > Isn't this doing basically the same of the snippet I used (the «if (all) > { ... }» one), short of the part that enables mode if neither all nor > mode were specified?Probably. This way was just easier for me to understand :-) Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/