const char * gnome_vfs_get_special_mime_type (GnomeVFSURI *uri) { GnomeVFSResult error; GnomeVFSFileInfo *info; const char *type; info = gnome_vfs_file_info_new (); type = NULL; /* Get file info and examine the type field to see if file is * one of the special kinds. */ error = gnome_vfs_get_file_info_uri (uri, info, GNOME_VFS_FILE_INFO_DEFAULT); if (error == GNOME_VFS_OK && info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) { switch (info->type) { case GNOME_VFS_FILE_TYPE_DIRECTORY: type = "x-directory/normal"; break; case GNOME_VFS_FILE_TYPE_CHARACTER_DEVICE: type = "x-special/device-char"; break; case GNOME_VFS_FILE_TYPE_BLOCK_DEVICE: type = "x-special/device-block"; break; case GNOME_VFS_FILE_TYPE_FIFO: type = "x-special/fifo"; break; case GNOME_VFS_FILE_TYPE_SOCKET: type = "x-special/socket"; break; default: break; } } gnome_vfs_file_info_unref (info); return type; }
static gboolean gst_gnome_vfs_src_get_size (GstBaseSrc * basesrc, guint64 * size) { GstGnomeVFSSrc *src; GnomeVFSFileInfo *info; GnomeVFSFileInfoOptions options; GnomeVFSResult res; src = GST_GNOME_VFS_SRC (basesrc); *size = -1; info = gnome_vfs_file_info_new (); options = GNOME_VFS_FILE_INFO_DEFAULT | GNOME_VFS_FILE_INFO_FOLLOW_LINKS; res = gnome_vfs_get_file_info_from_handle (src->handle, info, options); if (res == GNOME_VFS_OK) { if ((info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) != 0) { *size = info->size; GST_DEBUG_OBJECT (src, "from handle: %" G_GUINT64_FORMAT " bytes", *size); } else if (src->own_handle && gnome_vfs_uri_is_local (src->uri)) { GST_DEBUG_OBJECT (src, "file size not known, file local, trying fallback"); res = gnome_vfs_get_file_info_uri (src->uri, info, options); if (res == GNOME_VFS_OK && (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) != 0) { *size = info->size; GST_DEBUG_OBJECT (src, "from uri: %" G_GUINT64_FORMAT " bytes", *size); } } } else { GST_WARNING_OBJECT (src, "getting info failed: %s", gnome_vfs_result_to_string (res)); } gnome_vfs_file_info_unref (info); if (*size == (GnomeVFSFileSize) - 1) return FALSE; GST_DEBUG_OBJECT (src, "return size %" G_GUINT64_FORMAT, *size); return TRUE; }
gboolean mn_vfs_test (GnomeVFSURI *uri, GFileTest test) { GnomeVFSFileInfoOptions options; GnomeVFSFileInfo *file_info; gboolean status = FALSE; g_return_val_if_fail(uri != NULL, FALSE); options = GNOME_VFS_FILE_INFO_DEFAULT; if (! (test & G_FILE_TEST_IS_SYMLINK)) options |= GNOME_VFS_FILE_INFO_FOLLOW_LINKS; if (test & G_FILE_TEST_IS_EXECUTABLE) options |= GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS; file_info = gnome_vfs_file_info_new(); if (gnome_vfs_get_file_info_uri(uri, file_info, options) == GNOME_VFS_OK) { if (file_info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) { if (test & G_FILE_TEST_IS_REGULAR) status = file_info->type == GNOME_VFS_FILE_TYPE_REGULAR; if (! status && test & G_FILE_TEST_IS_SYMLINK) status = file_info->type == GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK; if (! status && test & G_FILE_TEST_IS_DIR) status = file_info->type == GNOME_VFS_FILE_TYPE_DIRECTORY; } if (file_info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS) { if (! status && test & G_FILE_TEST_IS_EXECUTABLE) status = file_info->permissions & GNOME_VFS_PERM_ACCESS_EXECUTABLE; } if (! status && test & G_FILE_TEST_EXISTS) status = TRUE; /* gnome_vfs_get_file_info() succeeded, so the file exists */ } gnome_vfs_file_info_unref(file_info); return status; }
int main (int argc, char **argv) { GnomeVFSResult result; char *text_uri; GnomeVFSURI *src, *dest; GnomeVFSFileInfo *info; if (argc != 3) { printf ("Usage: %s <src> <dest>\n", argv[0]); return 1; } if (!gnome_vfs_init ()) { fprintf (stderr, "Cannot initialize gnome-vfs.\n"); return 1; } command_line_authentication_init (); text_uri = gnome_vfs_make_uri_from_shell_arg (argv[1]); src = gnome_vfs_uri_new (text_uri); g_free (text_uri); text_uri = gnome_vfs_make_uri_from_shell_arg (argv[2]); dest = gnome_vfs_uri_new (text_uri); g_free (text_uri); if (src == NULL || dest == NULL) { result = GNOME_VFS_ERROR_INVALID_URI; goto out; } info = gnome_vfs_file_info_new (); result = gnome_vfs_get_file_info_uri (dest, info, GNOME_VFS_FILE_INFO_DEFAULT); if (result != GNOME_VFS_OK && result != GNOME_VFS_ERROR_NOT_FOUND) { gnome_vfs_file_info_unref (info); goto out; } /* If the target is a directory do not overwrite it but copy the source into the directory! (This is like cp does it) */ if (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE && info->type == GNOME_VFS_FILE_TYPE_DIRECTORY) { char *name; GnomeVFSURI *new_dest; name = gnome_vfs_uri_extract_short_path_name (src); new_dest = gnome_vfs_uri_append_string (dest, name); gnome_vfs_uri_unref (dest); g_free (name); dest = new_dest; } gnome_vfs_file_info_unref (info); result = gnome_vfs_xfer_uri (src, dest, GNOME_VFS_XFER_RECURSIVE, GNOME_VFS_XFER_ERROR_MODE_ABORT, GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE, NULL, NULL); out: if (src) { gnome_vfs_uri_unref (src); } if (dest) { gnome_vfs_uri_unref (dest); } if (result != GNOME_VFS_OK) { fprintf (stderr, "Failed to copy %s to %s\nReason: %s\n", argv[1], argv[2], gnome_vfs_result_to_string (result)); return 1; } return 0; }