gparted/include/Proc_Partitions_Info.h
Mike Fleetwood 884cd5a352 Read partition names from /proc/partitions too (#131)
GParted already always reads /proc/partitions for whole disk device
names no matter whether it uses whole disk devices named on the command
line, from /proc/partitions or from libparted.  As /proc/partitions
lists all the block devices that the kernel knows about, and therefore
all the possible ones blkid could probe, so use it to provide partition
names and device to partition mapping.  See code comments for more
details about the assumptions the /proc/partition parsing code makes and
the fact that these are confirmed by examining the Linux kernel source.

This commit just adds debugging to print the existing vector of
validated devices GParted shows in the UI and the vector with all
partitions added, ready for but not yet passed to blkid.
    # ./gpartedbin
    ...
    DEBUG: device_paths=["/dev/sda","/dev/sdb"]
    DEBUG: device_and_partition_paths=["/dev/sda","/dev/sda1","/dev/sda2","/dev/sdb","/dev/sdb1"]

Also demonstrating that this continues to support named devices,
including file system image files [1].
    # truncate -s 256M /tmp/ext4.img
    # mkfs.ext4 /tmp/ext4.img
    # ./gpartedbin /dev/sda /tmp/ext4.img
    ...
    DEBUG: device_paths=["/dev/sda","/tmp/ext4.img"]
    DEBUG: device_and_partition_paths=["/dev/sda","/dev/sda1","/dev/sda2","/tmp/ext4.img"]

[1] e8f0504b13
    Make sure that FS_Info cache is loaded for all named paths (#787181)

Closes #131 - GParted hangs when non-named device is hung
2021-02-10 16:30:13 +00:00

59 lines
1.8 KiB
C++

/* Copyright (C) 2010 Curtis Gedak
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
/* Proc_Partitions_Info
*
* A persistent cache of information from the file /proc/partitions
* that helps to minimize the number of required disk reads.
*/
#ifndef GPARTED_PROC_PARTITIONS_INFO_H
#define GPARTED_PROC_PARTITIONS_INFO_H
#include "BlockSpecial.h"
#include <glibmm/ustring.h>
#include <vector>
namespace GParted
{
class Proc_Partitions_Info
{
public:
static void load_cache();
static const std::vector<Glib::ustring> & get_device_paths();
static std::vector<Glib::ustring> get_device_and_partition_paths_for(
const std::vector<Glib::ustring>& device_paths);
private:
static void initialize_if_required();
static void load_proc_partitions_info_cache();
static bool is_whole_disk_device_name(const Glib::ustring& name);
static std::vector<Glib::ustring> get_partition_paths_for(const Glib::ustring& name);
static bool is_partition_of_device(const Glib::ustring& partname, const Glib::ustring& devname);
static bool proc_partitions_info_cache_initialized ;
static std::vector<BlockSpecial> all_entries_cache;
static std::vector<Glib::ustring> device_paths_cache ;
};
}//GParted
#endif /* GPARTED_PROC_PARTITIONS_INFO_H */