42
42
#include <signal.h>
45
#include <libvolume_id.h>
47
47
#include "libhal/libhal.h"
48
48
#include "partutil/partutil.h"
49
49
#include "linux_dvd_rw_utils.h"
50
50
#include "../../logger.h"
52
static void vid_log(int priority, const char *file, int line, const char *format, ...)
57
va_start(args, format);
58
vsnprintf(log_str, sizeof(log_str), format, args);
59
logger_forward_debug("%s:%i %s\n", file, line, log_str);
64
53
strdup_valid_utf8 (const char *str)
102
91
dbus_error_init (&error);
104
if (!volume_id_get_usage(vid, &usage))
93
if (blkid_probe_lookup_value(pr, "USAGE", &usage, NULL))
106
95
libhal_changeset_set_property_string (cs, "volume.fsusage", usage);
107
96
HAL_DEBUG (("volume.fsusage = '%s'", usage));
109
if (!volume_id_get_type(vid, &type))
98
if (blkid_probe_lookup_value(pr, "TYPE", &type, NULL))
111
if (!libhal_changeset_set_property_string (cs, "volume.fstype", type))
100
if (libhal_changeset_set_property_string (cs, "volume.fstype", type))
112
101
libhal_changeset_set_property_string (cs, "volume.fstype", "");
113
102
HAL_DEBUG(("volume.fstype = '%s'", type));
115
if (!volume_id_get_type_version(vid, &type_version))
104
if (blkid_probe_lookup_value(pr, "VERSION", &type_version, NULL))
116
105
type_version = "";
117
106
libhal_changeset_set_property_string (cs, "volume.fsversion", type_version);
118
107
HAL_DEBUG(("volume.fsversion = '%s'", type_version));
120
if (!volume_id_get_uuid(vid, &uuid))
109
if (blkid_probe_lookup_value(pr, "UUID", &uuid, NULL))
122
111
libhal_changeset_set_property_string (cs, "volume.uuid", uuid);
123
112
HAL_DEBUG(("volume.uuid = '%s'", uuid));
125
if (!volume_id_get_label(vid, &label))
114
if (blkid_probe_lookup_value(pr, "LABEL", &label, NULL))
128
117
if (label[0] != '\0') {
633
619
/* probe for file system */
634
vid = volume_id_open_fd (fd);
637
HAL_INFO (("invoking volume_id_probe_all, offset=%d, size=%d", vol_probe_offset, vol_size));
638
vid_ret = volume_id_probe_all (vid, vol_probe_offset, vol_size);
639
HAL_INFO (("volume_id_probe_all returned %d", vid_ret));
641
if (vid_ret != 0 && is_disc && vol_probe_offset != 0) {
620
pr = blkid_new_probe ();
624
blkid_probe_set_request (pr, BLKID_PROBREQ_LABEL | BLKID_PROBREQ_UUID |
625
BLKID_PROBREQ_TYPE | BLKID_PROBREQ_SECTYPE |
626
BLKID_PROBREQ_USAGE | BLKID_PROBREQ_VERSION);
628
HAL_INFO (("invoking blkid_do_safeprobe, offset=%d, size=%d", vol_probe_offset, vol_size));
629
bid_ret = blkid_probe_set_device (pr, fd, vol_probe_offset, vol_size);
631
bid_ret = blkid_do_safeprobe (pr);
632
HAL_INFO (("blkid_do_safeprobe returned %d", bid_ret));
635
if (bid_ret != 0 && is_disc && vol_probe_offset != 0) {
642
636
/* Some cd-rom drives report the offset of the session in the cd's TOC
643
637
* wrong. Fallback to probing at offset 0, just to be sure */
644
HAL_INFO (("invoking volume_id_probe_all, offset=0, size=%d", vol_size));
645
vid_ret = volume_id_probe_all (vid, 0 , vol_size);
646
HAL_INFO (("volume_id_probe_all returned %d", vid_ret));
638
HAL_INFO (("invoking blkid_do_safeprobe, offset=0, size=%d", vol_size));
639
bid_ret = blkid_probe_set_device (pr, fd, 0, vol_size);
641
bid_ret = blkid_do_safeprobe (pr);
642
HAL_INFO (("blkid_do_safeprobe returned %d", bid_ret));
650
set_volume_id_values(cs, vid);
646
set_blkid_values(cs, pr);
651
647
if (disc_may_have_data) {
652
648
libhal_changeset_set_property_bool (cs, "volume.disc.is_blank", FALSE);
653
649
libhal_changeset_set_property_bool (cs, "volume.disc.has_data", TRUE);
681
677
guint64 part_offset;
683
679
part_offset = part_table_entry_get_offset (p, i);
684
if (volume_id_probe_all (
685
vid, vol_probe_offset + part_offset, 0) == 0) {
687
set_volume_id_values(cs, vid);
680
if (blkid_probe_set_device (pr, fd,
681
vol_probe_offset + part_offset, 0) == 0 &&
682
blkid_do_safeprobe (pr) == 0)
683
set_blkid_values(cs, pr);
690
685
/* and we're done */