diff options
author | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 13:57:50 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 13:57:50 +0000 |
commit | b3d92ba9a95013d985efd58cf1dbb2a61cc718b0 (patch) | |
tree | 4f680ce98ef073f5b740b1cdd3e7ca3cf40b19a2 /daemon | |
parent | 2c4aa53f53174bddaeafce332c709a4e0869275d (diff) | |
download | gvfs-b3d92ba9a95013d985efd58cf1dbb2a61cc718b0.tar.gz |
Check for unsupported operations and return error instead of crashing,
Original git commit by Alexander Larsson <alexl@redhat.com> at 1183457271 +0200
svn path=/trunk/; revision=604
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/gvfsjobcloseread.c | 9 | ||||
-rw-r--r-- | daemon/gvfsjobclosewrite.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobenumerate.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobgetfsinfo.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobgetinfo.c | 8 | ||||
-rw-r--r-- | daemon/gvfsjobmount.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobmountmountable.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobopenforread.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobopenforwrite.c | 21 | ||||
-rw-r--r-- | daemon/gvfsjobread.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobseekread.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobseekwrite.c | 7 | ||||
-rw-r--r-- | daemon/gvfsjobwrite.c | 7 |
13 files changed, 107 insertions, 1 deletions
diff --git a/daemon/gvfsjobcloseread.c b/daemon/gvfsjobcloseread.c index 22658a06..7ab8b206 100644 --- a/daemon/gvfsjobcloseread.c +++ b/daemon/gvfsjobcloseread.c @@ -83,7 +83,14 @@ run (GVfsJob *job) { GVfsJobCloseRead *op_job = G_VFS_JOB_CLOSE_READ (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); - + + if (class->close_read == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->close_read (op_job->backend, op_job, op_job->handle); diff --git a/daemon/gvfsjobclosewrite.c b/daemon/gvfsjobclosewrite.c index c4c2c67b..94156179 100644 --- a/daemon/gvfsjobclosewrite.c +++ b/daemon/gvfsjobclosewrite.c @@ -83,6 +83,13 @@ run (GVfsJob *job) { GVfsJobCloseWrite *op_job = G_VFS_JOB_CLOSE_WRITE (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + + if (class->close_write == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } class->close_write (op_job->backend, op_job, diff --git a/daemon/gvfsjobenumerate.c b/daemon/gvfsjobenumerate.c index f1dd6924..c36bd798 100644 --- a/daemon/gvfsjobenumerate.c +++ b/daemon/gvfsjobenumerate.c @@ -176,6 +176,13 @@ run (GVfsJob *job) GVfsJobEnumerate *op_job = G_VFS_JOB_ENUMERATE (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + if (class->enumerate == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->enumerate (op_job->backend, op_job, op_job->filename, diff --git a/daemon/gvfsjobgetfsinfo.c b/daemon/gvfsjobgetfsinfo.c index de17ba28..9cb17d7e 100644 --- a/daemon/gvfsjobgetfsinfo.c +++ b/daemon/gvfsjobgetfsinfo.c @@ -101,6 +101,13 @@ run (GVfsJob *job) GVfsJobGetFsInfo *op_job = G_VFS_JOB_GET_FS_INFO (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + if (class->get_fs_info == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->get_fs_info (op_job->backend, op_job, op_job->filename, diff --git a/daemon/gvfsjobgetinfo.c b/daemon/gvfsjobgetinfo.c index 64aae474..1f935de7 100644 --- a/daemon/gvfsjobgetinfo.c +++ b/daemon/gvfsjobgetinfo.c @@ -1,3 +1,4 @@ + #include <config.h> #include <unistd.h> @@ -103,6 +104,13 @@ run (GVfsJob *job) { GVfsJobGetInfo *op_job = G_VFS_JOB_GET_INFO (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + + if (class->get_info == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } class->get_info (op_job->backend, op_job, diff --git a/daemon/gvfsjobmount.c b/daemon/gvfsjobmount.c index 76b51e0e..beb67b48 100644 --- a/daemon/gvfsjobmount.c +++ b/daemon/gvfsjobmount.c @@ -76,6 +76,13 @@ run (GVfsJob *job) { GVfsJobMount *op_job = G_VFS_JOB_MOUNT (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + + if (class->mount == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } class->mount (op_job->backend, op_job, diff --git a/daemon/gvfsjobmountmountable.c b/daemon/gvfsjobmountmountable.c index d0c9e8d1..9cb926c0 100644 --- a/daemon/gvfsjobmountmountable.c +++ b/daemon/gvfsjobmountmountable.c @@ -119,6 +119,13 @@ run (GVfsJob *job) GVfsJobMountMountable *op_job = G_VFS_JOB_MOUNT_MOUNTABLE (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + if (class->mount_mountable == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->mount_mountable (op_job->backend, op_job, op_job->filename, diff --git a/daemon/gvfsjobopenforread.c b/daemon/gvfsjobopenforread.c index 2fdcbdb7..e5ff6951 100644 --- a/daemon/gvfsjobopenforread.c +++ b/daemon/gvfsjobopenforread.c @@ -102,6 +102,13 @@ run (GVfsJob *job) GVfsJobOpenForRead *op_job = G_VFS_JOB_OPEN_FOR_READ (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + if (class->open_for_read == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->open_for_read (op_job->backend, op_job, op_job->filename); diff --git a/daemon/gvfsjobopenforwrite.c b/daemon/gvfsjobopenforwrite.c index eb7f56c4..b05566bc 100644 --- a/daemon/gvfsjobopenforwrite.c +++ b/daemon/gvfsjobopenforwrite.c @@ -115,18 +115,39 @@ run (GVfsJob *job) if (op_job->mode == OPEN_FOR_WRITE_CREATE) { + if (class->create == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->create (op_job->backend, op_job, op_job->filename); } else if (op_job->mode == OPEN_FOR_WRITE_APPEND) { + if (class->append_to == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->append_to (op_job->backend, op_job, op_job->filename); } else if (op_job->mode == OPEN_FOR_WRITE_REPLACE) { + if (class->replace == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->replace (op_job->backend, op_job, op_job->filename, diff --git a/daemon/gvfsjobread.c b/daemon/gvfsjobread.c index 015187b5..aed24f80 100644 --- a/daemon/gvfsjobread.c +++ b/daemon/gvfsjobread.c @@ -92,6 +92,13 @@ run (GVfsJob *job) GVfsJobRead *op_job = G_VFS_JOB_READ (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + if (class->read == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->read (op_job->backend, op_job, op_job->handle, diff --git a/daemon/gvfsjobseekread.c b/daemon/gvfsjobseekread.c index 74346f19..93a0e965 100644 --- a/daemon/gvfsjobseekread.c +++ b/daemon/gvfsjobseekread.c @@ -91,6 +91,13 @@ run (GVfsJob *job) GVfsJobSeekRead *op_job = G_VFS_JOB_SEEK_READ (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + if (class->seek_on_read == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->seek_on_read (op_job->backend, op_job, op_job->handle, diff --git a/daemon/gvfsjobseekwrite.c b/daemon/gvfsjobseekwrite.c index 835c76f2..75980af0 100644 --- a/daemon/gvfsjobseekwrite.c +++ b/daemon/gvfsjobseekwrite.c @@ -91,6 +91,13 @@ run (GVfsJob *job) GVfsJobSeekWrite *op_job = G_VFS_JOB_SEEK_WRITE (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + if (class->seek_on_write == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->seek_on_write (op_job->backend, op_job, op_job->handle, diff --git a/daemon/gvfsjobwrite.c b/daemon/gvfsjobwrite.c index 0b69d3e1..7ed4445e 100644 --- a/daemon/gvfsjobwrite.c +++ b/daemon/gvfsjobwrite.c @@ -92,6 +92,13 @@ run (GVfsJob *job) GVfsJobWrite *op_job = G_VFS_JOB_WRITE (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); + if (class->write == NULL) + { + g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Operation not supported by backend")); + return; + } + class->write (op_job->backend, op_job, op_job->handle, |