~ubuntu-branches/debian/jessie/glib2.0/jessie

« back to all changes in this revision

Viewing changes to gio/gmount.c

  • Committer: Bazaar Package Importer
  • Author(s): Gustavo Noronha Silva
  • Date: 2009-02-15 13:00:43 UTC
  • mto: (1.4.3 upstream)
  • mto: This revision was merged to the branch mainline in revision 70.
  • Revision ID: james.westby@ubuntu.com-20090215130043-6snh45flhit8oalb
Tags: upstream-2.18.4
ImportĀ upstreamĀ versionĀ 2.18.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 
3
3
/* GIO - GLib Input, Output and Streaming Library
4
4
 * 
5
 
 * Copyright (C) 2006-2007 Red Hat, Inc.
 
5
 * Copyright (C) 2006-2008 Red Hat, Inc.
6
6
 *
7
7
 * This library is free software; you can redistribute it and/or
8
8
 * modify it under the terms of the GNU Lesser General Public
23
23
 *         David Zeuthen <davidz@redhat.com>
24
24
 */
25
25
 
26
 
#include <config.h>
 
26
#include "config.h"
27
27
 
28
28
#include <string.h>
29
29
 
30
30
#include "gmount.h"
31
31
#include "gmountprivate.h"
 
32
#include "gasyncresult.h"
32
33
#include "gsimpleasyncresult.h"
 
34
#include "gioerror.h"
33
35
#include "glibintl.h"
34
36
 
35
37
#include "gioalias.h"
68
70
GType
69
71
g_mount_get_type (void)
70
72
{
71
 
  static GType mount_type = 0;
 
73
  static volatile gsize g_define_type_id__volatile = 0;
72
74
 
73
 
  if (! mount_type)
 
75
  if (g_once_init_enter (&g_define_type_id__volatile))
74
76
    {
75
 
      static const GTypeInfo mount_info =
 
77
      const GTypeInfo mount_info =
76
78
      {
77
79
        sizeof (GMountIface), /* class_size */
78
80
        g_mount_base_init,   /* base_init */
84
86
        0,              /* n_preallocs */
85
87
        NULL
86
88
      };
87
 
 
88
 
      mount_type =
 
89
      GType g_define_type_id =
89
90
        g_type_register_static (G_TYPE_INTERFACE, I_("GMount"),
90
91
                                &mount_info, 0);
91
92
 
92
 
      g_type_interface_add_prerequisite (mount_type, G_TYPE_OBJECT);
 
93
      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
 
94
 
 
95
      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
93
96
    }
94
97
 
95
 
  return mount_type;
 
98
  return g_define_type_id__volatile;
96
99
}
97
100
 
98
101
static void
110
113
    {
111
114
     /**
112
115
      * GMount::changed:
 
116
      * @mount: the object on which the signal is emitted
113
117
      * 
114
118
      * Emitted when the mount has been changed.
115
119
      **/
123
127
 
124
128
     /**
125
129
      * GMount::unmounted:
 
130
      * @mount: the object on which the signal is emitted
126
131
      * 
127
132
      * This signal is emitted when the #GMount have been
128
133
      * unmounted. If the recipient is holding references to the
147
152
 * 
148
153
 * Gets the root directory on @mount.
149
154
 * 
150
 
 * Returns: a #GFile.
 
155
 * Returns: a #GFile. 
 
156
 *      The returned object should be unreffed with 
 
157
 *      g_object_unref() when no longer needed.
151
158
 **/
152
159
GFile *
153
160
g_mount_get_root (GMount *mount)
167
174
 * 
168
175
 * Gets the name of @mount.
169
176
 * 
170
 
 * Returns: the name for the given @mount. The returned string should 
171
 
 * be freed when no longer needed.
 
177
 * Returns: the name for the given @mount. 
 
178
 *     The returned string should be freed with g_free()
 
179
 *     when no longer needed.
172
180
 **/
173
181
char *
174
182
g_mount_get_name (GMount *mount)
189
197
 * Gets the icon for @mount.
190
198
 * 
191
199
 * Returns: a #GIcon.
 
200
 *      The returned object should be unreffed with 
 
201
 *      g_object_unref() when no longer needed.
192
202
 **/
193
203
GIcon *
194
204
g_mount_get_icon (GMount *mount)
212
222
 * available.
213
223
 * 
214
224
 * Returns: the UUID for @mount or %NULL if no UUID can be computed.
 
225
 *     The returned string should be freed with g_free()
 
226
 *     when no longer needed.
215
227
 **/
216
228
char *
217
229
g_mount_get_uuid (GMount *mount)
232
244
 * Gets the volume for the @mount.
233
245
 * 
234
246
 * Returns: a #GVolume or %NULL if @mount is not associated with a volume.
 
247
 *      The returned object should be unreffed with 
 
248
 *      g_object_unref() when no longer needed.
235
249
 **/
236
250
GVolume *
237
251
g_mount_get_volume (GMount *mount)
255
269
 * using that object to get the #GDrive.
256
270
 * 
257
271
 * Returns: a #GDrive or %NULL if @mount is not associated with a volume or a drive.
 
272
 *      The returned object should be unreffed with 
 
273
 *      g_object_unref() when no longer needed.
258
274
 **/
259
275
GDrive *
260
276
g_mount_get_drive (GMount *mount)
318
334
 * 
319
335
 * Unmounts a mount. This is an asynchronous operation, and is 
320
336
 * finished by calling g_mount_unmount_finish() with the @mount 
321
 
 * and #GAsyncResults data returned in the @callback.
 
337
 * and #GAsyncResult data returned in the @callback.
322
338
 **/
323
339
void
324
 
g_mount_unmount (GMount *mount,
325
 
                 GMountUnmountFlags flags,
326
 
                 GCancellable *cancellable,
327
 
                 GAsyncReadyCallback callback,
328
 
                 gpointer user_data)
 
340
g_mount_unmount (GMount              *mount,
 
341
                 GMountUnmountFlags   flags,
 
342
                 GCancellable        *cancellable,
 
343
                 GAsyncReadyCallback  callback,
 
344
                 gpointer             user_data)
329
345
{
330
346
  GMountIface *iface;
331
347
 
354
370
 * @mount: a #GMount.
355
371
 * @result: a #GAsyncResult.
356
372
 * @error: a #GError location to store the error occuring, or %NULL to 
357
 
 * ignore.
 
373
 *     ignore.
358
374
 * 
359
375
 * Finishes unmounting a mount. If any errors occurred during the operation, 
360
376
 * @error will be set to contain the errors and %FALSE will be returned.
362
378
 * Returns: %TRUE if the mount was successfully unmounted. %FALSE otherwise.
363
379
 **/
364
380
gboolean
365
 
g_mount_unmount_finish (GMount       *mount,
 
381
g_mount_unmount_finish (GMount        *mount,
366
382
                        GAsyncResult  *result,
367
383
                        GError       **error)
368
384
{
393
409
 * 
394
410
 * Ejects a mount. This is an asynchronous operation, and is 
395
411
 * finished by calling g_mount_eject_finish() with the @mount 
396
 
 * and #GAsyncResults data returned in the @callback.
 
412
 * and #GAsyncResult data returned in the @callback.
397
413
 **/
398
414
void
399
 
g_mount_eject (GMount *mount,
400
 
               GMountUnmountFlags flags,
401
 
               GCancellable *cancellable,
402
 
               GAsyncReadyCallback callback,
403
 
               gpointer user_data)
 
415
g_mount_eject (GMount              *mount,
 
416
               GMountUnmountFlags   flags,
 
417
               GCancellable        *cancellable,
 
418
               GAsyncReadyCallback  callback,
 
419
               gpointer             user_data)
404
420
{
405
421
  GMountIface *iface;
406
422
 
429
445
 * @mount: a #GMount.
430
446
 * @result: a #GAsyncResult.
431
447
 * @error: a #GError location to store the error occuring, or %NULL to 
432
 
 * ignore.
 
448
 *     ignore.
433
449
 * 
434
450
 * Finishes ejecting a mount. If any errors occurred during the operation, 
435
451
 * @error will be set to contain the errors and %FALSE will be returned.
437
453
 * Returns: %TRUE if the mount was successfully ejected. %FALSE otherwise.
438
454
 **/
439
455
gboolean
440
 
g_mount_eject_finish (GMount       *mount,
 
456
g_mount_eject_finish (GMount        *mount,
441
457
                      GAsyncResult  *result,
442
458
                      GError       **error)
443
459
{
477
493
 * unmounted.
478
494
 **/
479
495
void
480
 
g_mount_remount (GMount *mount,
481
 
                 GMountMountFlags flags,
482
 
                 GMountOperation *mount_operation,
483
 
                 GCancellable *cancellable,
484
 
                 GAsyncReadyCallback callback,
485
 
                 gpointer user_data)
 
496
g_mount_remount (GMount              *mount,
 
497
                 GMountMountFlags     flags,
 
498
                 GMountOperation     *mount_operation,
 
499
                 GCancellable        *cancellable,
 
500
                 GAsyncReadyCallback  callback,
 
501
                 gpointer             user_data)
486
502
{
487
503
  GMountIface *iface;
488
504
 
492
508
 
493
509
  if (iface->remount == NULL)
494
510
    { 
495
 
     g_simple_async_report_error_in_idle (G_OBJECT (mount),
 
511
      g_simple_async_report_error_in_idle (G_OBJECT (mount),
496
512
                                           callback, user_data,
497
513
                                           G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
498
514
                                           /* Translators: This is an error
511
527
 * @mount: a #GMount.
512
528
 * @result: a #GAsyncResult.
513
529
 * @error: a #GError location to store the error occuring, or %NULL to 
514
 
 * ignore.
 
530
 *     ignore.
515
531
 * 
516
532
 * Finishes remounting a mount. If any errors occurred during the operation, 
517
533
 * @error will be set to contain the errors and %FALSE will be returned.
519
535
 * Returns: %TRUE if the mount was successfully remounted. %FALSE otherwise.
520
536
 **/
521
537
gboolean
522
 
g_mount_remount_finish (GMount       *mount,
 
538
g_mount_remount_finish (GMount        *mount,
523
539
                        GAsyncResult  *result,
524
540
                        GError       **error)
525
541
{
539
555
  return (* iface->remount_finish) (mount, result, error);
540
556
}
541
557
 
 
558
/**
 
559
 * g_mount_guess_content_type:
 
560
 * @mount: a #GMount
 
561
 * @force_rescan: Whether to force a rescan of the content. 
 
562
 *     Otherwise a cached result will be used if available
 
563
 * @cancellable: optional #GCancellable object, %NULL to ignore
 
564
 * @callback: a #GAsyncReadyCallback
 
565
 * @user_data: user data passed to @callback
 
566
 * 
 
567
 * Tries to guess the type of content stored on @mount. Returns one or
 
568
 * more textual identifiers of well-known content types (typically
 
569
 * prefixed with "x-content/"), e.g. x-content/image-dcf for camera 
 
570
 * memory cards. See the <ulink url="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">shared-mime-info</ulink>
 
571
 * specification for more on x-content types.
 
572
 *
 
573
 * This is an asynchronous operation (see
 
574
 * g_mount_guess_content_type_sync() for the synchronous version), and
 
575
 * is finished by calling g_mount_guess_content_type_finish() with the
 
576
 * @mount and #GAsyncResult data returned in the @callback.
 
577
 *
 
578
 * Since: 2.18
 
579
 */
 
580
void
 
581
g_mount_guess_content_type (GMount              *mount,
 
582
                            gboolean             force_rescan,
 
583
                            GCancellable        *cancellable,
 
584
                            GAsyncReadyCallback  callback,
 
585
                            gpointer             user_data)
 
586
{
 
587
  GMountIface *iface;
 
588
 
 
589
  g_return_if_fail (G_IS_MOUNT (mount));
 
590
 
 
591
  iface = G_MOUNT_GET_IFACE (mount);
 
592
 
 
593
  if (iface->guess_content_type == NULL)
 
594
    {
 
595
      g_simple_async_report_error_in_idle (G_OBJECT (mount),
 
596
                                           callback, user_data,
 
597
                                           G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
 
598
                                           /* Translators: This is an error
 
599
                                            * message for mount objects that
 
600
                                            * don't implement content type guessing. */
 
601
                                           _("mount doesn't implement content type guessing"));
 
602
 
 
603
      return;
 
604
    }
 
605
  
 
606
  (* iface->guess_content_type) (mount, force_rescan, cancellable, callback, user_data);
 
607
}
 
608
 
 
609
/**
 
610
 * g_mount_guess_content_type_finish:
 
611
 * @mount: a #GMount
 
612
 * @result: a #GAsyncResult
 
613
 * @error: a #GError location to store the error occuring, or %NULL to 
 
614
 *     ignore
 
615
 * 
 
616
 * Finishes guessing content types of @mount. If any errors occured
 
617
 * during the operation, @error will be set to contain the errors and
 
618
 * %FALSE will be returned. In particular, you may get an 
 
619
 * %G_IO_ERROR_NOT_SUPPORTED if the mount does not support content 
 
620
 * guessing.
 
621
 * 
 
622
 * Returns: a %NULL-terminated array of content types or %NULL on error. 
 
623
 *     Caller should free this array with g_strfreev() when done with it.
 
624
 *
 
625
 * Since: 2.18
 
626
 **/
 
627
gchar **
 
628
g_mount_guess_content_type_finish (GMount        *mount,
 
629
                                   GAsyncResult  *result,
 
630
                                   GError       **error)
 
631
{
 
632
  GMountIface *iface;
 
633
 
 
634
  g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
 
635
  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
 
636
 
 
637
  if (G_IS_SIMPLE_ASYNC_RESULT (result))
 
638
    {
 
639
      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
 
640
      if (g_simple_async_result_propagate_error (simple, error))
 
641
        return FALSE;
 
642
    }
 
643
  
 
644
  iface = G_MOUNT_GET_IFACE (mount);
 
645
  return (* iface->guess_content_type_finish) (mount, result, error);
 
646
}
 
647
 
 
648
/**
 
649
 * g_mount_guess_content_type_sync:
 
650
 * @mount: a #GMount
 
651
 * @force_rescan: Whether to force a rescan of the content.
 
652
 *     Otherwise a cached result will be used if available
 
653
 * @cancellable: optional #GCancellable object, %NULL to ignore
 
654
 * @error: a #GError location to store the error occuring, or %NULL to
 
655
 *     ignore
 
656
 *
 
657
 * Tries to guess the type of content stored on @mount. Returns one or
 
658
 * more textual identifiers of well-known content types (typically
 
659
 * prefixed with "x-content/"), e.g. x-content/image-dcf for camera 
 
660
 * memory cards. See the <ulink url="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">shared-mime-info</ulink>
 
661
 * specification for more on x-content types.
 
662
 *
 
663
 * This is an synchronous operation and as such may block doing IO;
 
664
 * see g_mount_guess_content_type() for the asynchronous version.
 
665
 *
 
666
 * Returns: a %NULL-terminated array of content types or %NULL on error.
 
667
 *     Caller should free this array with g_strfreev() when done with it.
 
668
 *
 
669
 * Since: 2.18
 
670
 */
 
671
char **
 
672
g_mount_guess_content_type_sync (GMount              *mount,
 
673
                                 gboolean             force_rescan,
 
674
                                 GCancellable        *cancellable,
 
675
                                 GError             **error)
 
676
{
 
677
  GMountIface *iface;
 
678
 
 
679
  g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
 
680
 
 
681
  iface = G_MOUNT_GET_IFACE (mount);
 
682
 
 
683
  if (iface->guess_content_type_sync == NULL)
 
684
    {
 
685
      g_set_error_literal (error,
 
686
                           G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
 
687
                           /* Translators: This is an error
 
688
                            * message for mount objects that
 
689
                            * don't implement content type guessing. */
 
690
                           _("mount doesn't implement synchronous content type guessing"));
 
691
 
 
692
      return NULL;
 
693
    }
 
694
 
 
695
  return (* iface->guess_content_type_sync) (mount, force_rescan, cancellable, error);
 
696
}
542
697
 
543
698
#define __G_MOUNT_C__
544
699
#include "gioaliasdef.c"