727
730
g_object_unref (file);
735
test_copy_preserve_mode (void)
739
GFileInfo *dest_info;
740
GFileIOStream *iostream;
741
GError *local_error = NULL;
742
GError **error = &local_error;
743
guint32 romode = S_IFREG | 0600;
746
tmpfile = g_file_new_tmp ("tmp-copy-preserve-modeXXXXXX",
748
g_assert_no_error (local_error);
749
g_io_stream_close ((GIOStream*)iostream, NULL, error);
750
g_assert_no_error (local_error);
751
g_clear_object (&iostream);
753
g_file_set_attribute (tmpfile, G_FILE_ATTRIBUTE_UNIX_MODE, G_FILE_ATTRIBUTE_TYPE_UINT32,
754
&romode, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
756
g_assert_no_error (local_error);
758
dest_tmpfile = g_file_new_tmp ("tmp-copy-preserve-modeXXXXXX",
760
g_assert_no_error (local_error);
761
g_io_stream_close ((GIOStream*)iostream, NULL, error);
762
g_assert_no_error (local_error);
763
g_clear_object (&iostream);
765
g_file_copy (tmpfile, dest_tmpfile, G_FILE_COPY_OVERWRITE | G_FILE_COPY_NOFOLLOW_SYMLINKS | G_FILE_COPY_ALL_METADATA,
766
NULL, NULL, NULL, error);
767
g_assert_no_error (local_error);
769
dest_info = g_file_query_info (dest_tmpfile, G_FILE_ATTRIBUTE_UNIX_MODE, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
771
g_assert_no_error (local_error);
773
dest_mode = g_file_info_get_attribute_uint32 (dest_info, G_FILE_ATTRIBUTE_UNIX_MODE);
775
g_assert_cmpint (dest_mode, ==, romode);
777
(void) g_file_delete (tmpfile, NULL, NULL);
778
(void) g_file_delete (dest_tmpfile, NULL, NULL);
780
g_clear_object (&tmpfile);
781
g_clear_object (&dest_tmpfile);
782
g_clear_object (&dest_info);
731
787
main (int argc, char *argv[])
746
802
g_test_add_func ("/file/replace-load", test_replace_load);
747
803
g_test_add_func ("/file/replace-cancel", test_replace_cancel);
748
804
g_test_add_func ("/file/async-delete", test_async_delete);
806
g_test_add_func ("/file/copy-preserve-mode", test_copy_preserve_mode);
750
809
return g_test_run ();