mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-06-09 14:20:06 +02:00
Add new GFileCopyFlag
svn path=/trunk/; revision=7526
This commit is contained in:
parent
0fcfcb3a91
commit
811fcbcd95
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
2008-09-22 Nelson Benítez León <nbenitez@svn.gnome.org>
|
||||||
|
|
||||||
|
* gio/gioenums.h: Add new GFileCopyFlag, to leave target file with
|
||||||
|
default perms, instead of setting the source file perms, in a copy
|
||||||
|
operation.
|
||||||
|
|
||||||
|
* gio/gfile.c (g_file_copy_attributes)
|
||||||
|
(build_attribute_list_for_copy)
|
||||||
|
(should_copy): Not copy "unix::mode" attribute if we have received
|
||||||
|
G_FILE_COPY_TARGET_DEFAULT_PERMS flag.
|
||||||
|
|
||||||
2008-09-19 Hans Petter Jansson <hpj@novell.com>
|
2008-09-19 Hans Petter Jansson <hpj@novell.com>
|
||||||
|
|
||||||
Rewrite most of GHashTable to use open addressing with quadratic
|
Rewrite most of GHashTable to use open addressing with quadratic
|
||||||
|
17
gio/gfile.c
17
gio/gfile.c
@ -2056,8 +2056,12 @@ open_source_for_copy (GFile *source,
|
|||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
should_copy (GFileAttributeInfo *info,
|
should_copy (GFileAttributeInfo *info,
|
||||||
gboolean as_move)
|
gboolean as_move,
|
||||||
|
gboolean skip_perms)
|
||||||
{
|
{
|
||||||
|
if (skip_perms && strcmp(info->name, "unix::mode") == 0)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (as_move)
|
if (as_move)
|
||||||
return info->flags & G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED;
|
return info->flags & G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED;
|
||||||
return info->flags & G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE;
|
return info->flags & G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE;
|
||||||
@ -2066,7 +2070,8 @@ should_copy (GFileAttributeInfo *info,
|
|||||||
static char *
|
static char *
|
||||||
build_attribute_list_for_copy (GFileAttributeInfoList *attributes,
|
build_attribute_list_for_copy (GFileAttributeInfoList *attributes,
|
||||||
GFileAttributeInfoList *namespaces,
|
GFileAttributeInfoList *namespaces,
|
||||||
gboolean as_move)
|
gboolean as_move,
|
||||||
|
gboolean skip_perms)
|
||||||
{
|
{
|
||||||
GString *s;
|
GString *s;
|
||||||
gboolean first;
|
gboolean first;
|
||||||
@ -2079,7 +2084,7 @@ build_attribute_list_for_copy (GFileAttributeInfoList *attributes,
|
|||||||
{
|
{
|
||||||
for (i = 0; i < attributes->n_infos; i++)
|
for (i = 0; i < attributes->n_infos; i++)
|
||||||
{
|
{
|
||||||
if (should_copy (&attributes->infos[i], as_move))
|
if (should_copy (&attributes->infos[i], as_move, skip_perms))
|
||||||
{
|
{
|
||||||
if (first)
|
if (first)
|
||||||
first = FALSE;
|
first = FALSE;
|
||||||
@ -2095,7 +2100,7 @@ build_attribute_list_for_copy (GFileAttributeInfoList *attributes,
|
|||||||
{
|
{
|
||||||
for (i = 0; i < namespaces->n_infos; i++)
|
for (i = 0; i < namespaces->n_infos; i++)
|
||||||
{
|
{
|
||||||
if (should_copy (&namespaces->infos[i], as_move))
|
if (should_copy (&namespaces->infos[i], as_move, FALSE))
|
||||||
{
|
{
|
||||||
if (first)
|
if (first)
|
||||||
first = FALSE;
|
first = FALSE;
|
||||||
@ -2142,9 +2147,11 @@ g_file_copy_attributes (GFile *source,
|
|||||||
GFileInfo *info;
|
GFileInfo *info;
|
||||||
gboolean as_move;
|
gboolean as_move;
|
||||||
gboolean source_nofollow_symlinks;
|
gboolean source_nofollow_symlinks;
|
||||||
|
gboolean skip_perms;
|
||||||
|
|
||||||
as_move = flags & G_FILE_COPY_ALL_METADATA;
|
as_move = flags & G_FILE_COPY_ALL_METADATA;
|
||||||
source_nofollow_symlinks = flags & G_FILE_COPY_NOFOLLOW_SYMLINKS;
|
source_nofollow_symlinks = flags & G_FILE_COPY_NOFOLLOW_SYMLINKS;
|
||||||
|
skip_perms = flags & G_FILE_COPY_TARGET_DEFAULT_PERMS != 0;
|
||||||
|
|
||||||
/* Ignore errors here, if the target supports no attributes there is nothing to copy */
|
/* Ignore errors here, if the target supports no attributes there is nothing to copy */
|
||||||
attributes = g_file_query_settable_attributes (destination, cancellable, NULL);
|
attributes = g_file_query_settable_attributes (destination, cancellable, NULL);
|
||||||
@ -2153,7 +2160,7 @@ g_file_copy_attributes (GFile *source,
|
|||||||
if (attributes == NULL && namespaces == NULL)
|
if (attributes == NULL && namespaces == NULL)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
attrs_to_read = build_attribute_list_for_copy (attributes, namespaces, as_move);
|
attrs_to_read = build_attribute_list_for_copy (attributes, namespaces, as_move, skip_perms);
|
||||||
|
|
||||||
/* Ignore errors here, if we can't read some info (e.g. if it doesn't exist)
|
/* Ignore errors here, if we can't read some info (e.g. if it doesn't exist)
|
||||||
* we just don't copy it.
|
* we just don't copy it.
|
||||||
|
@ -198,6 +198,7 @@ typedef enum {
|
|||||||
* @G_FILE_COPY_NOFOLLOW_SYMLINKS: Don't follow symlinks.
|
* @G_FILE_COPY_NOFOLLOW_SYMLINKS: Don't follow symlinks.
|
||||||
* @G_FILE_COPY_ALL_METADATA: Copy all file metadata instead of just default set used for copy (see #GFileInfo).
|
* @G_FILE_COPY_ALL_METADATA: Copy all file metadata instead of just default set used for copy (see #GFileInfo).
|
||||||
* @G_FILE_COPY_NO_FALLBACK_FOR_MOVE: Don't use copy and delete fallback if native move not supported.
|
* @G_FILE_COPY_NO_FALLBACK_FOR_MOVE: Don't use copy and delete fallback if native move not supported.
|
||||||
|
* @G_FILE_COPY_TARGET_DEFAULT_PERMS: Leaves target file with default perms, instead of setting the source file perms.
|
||||||
*
|
*
|
||||||
* Flags used when copying or moving files.
|
* Flags used when copying or moving files.
|
||||||
*/
|
*/
|
||||||
@ -207,7 +208,8 @@ typedef enum {
|
|||||||
G_FILE_COPY_BACKUP = (1 << 1),
|
G_FILE_COPY_BACKUP = (1 << 1),
|
||||||
G_FILE_COPY_NOFOLLOW_SYMLINKS = (1 << 2),
|
G_FILE_COPY_NOFOLLOW_SYMLINKS = (1 << 2),
|
||||||
G_FILE_COPY_ALL_METADATA = (1 << 3),
|
G_FILE_COPY_ALL_METADATA = (1 << 3),
|
||||||
G_FILE_COPY_NO_FALLBACK_FOR_MOVE = (1 << 4)
|
G_FILE_COPY_NO_FALLBACK_FOR_MOVE = (1 << 4),
|
||||||
|
G_FILE_COPY_TARGET_DEFAULT_PERMS = (1 << 5)
|
||||||
} GFileCopyFlags;
|
} GFileCopyFlags;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user