KIO

kmountpoint.h
1 /*
2  This file is part of the KDE libraries
3  SPDX-FileCopyrightText: 2003 Waldo Bastian <[email protected]>
4  SPDX-FileCopyrightText: 2007 David Faure <[email protected]>
5 
6  SPDX-License-Identifier: LGPL-2.0-only
7 */
8 
9 #ifndef KMOUNTPOINT_H
10 #define KMOUNTPOINT_H
11 
12 #include "kiocore_export.h"
13 
14 #include <QExplicitlySharedDataPointer>
15 #include <QStringList>
16 
17 #include <memory>
18 #include <sys/types.h> // dev_t among other definitions
19 
20 class KMountPointPrivate;
21 
22 /**
23  * @class KMountPoint kmountpoint.h <KMountPoint>
24  *
25  * The KMountPoint class provides information about mounted and unmounted disks.
26  * It provides a system independent interface to fstab.
27  *
28  * @author Waldo Bastian <[email protected]>
29  */
30 class KIOCORE_EXPORT KMountPoint : public QSharedData
31 {
32 public:
34 
35  /**
36  * List of mount points.
37  */
38  class KIOCORE_EXPORT List : public QList<Ptr>
39  {
40  public:
41  List();
42  /**
43  * Find the mountpoint on which resides @p path
44  * For instance if /home is a separate partition, findByPath("/home/user/blah")
45  * will return /home
46  * @param path the path to check
47  * @return the mount point of the given file
48  */
49  Ptr findByPath(const QString &path) const;
50 
51  /**
52  * Returns the mount point associated with @p device,
53  * i.e. the one where mountedFrom() == @p device
54  * (after symlink resolution).
55  * @return the mountpoint, or @c nullptr if this device doesn't exist or isn't mounted
56  */
57  Ptr findByDevice(const QString &device) const;
58  };
59 
60 public:
61  /**
62  * Flags that specify which additional details should be fetched for each mountpoint.
63  * @see DetailsNeededFlags
64  */
66  /**
67  * Only the basic details: mountedFrom, mountPoint, mountType.
68  */
69  BasicInfoNeeded = 0,
70  /**
71  * Also fetch the options used when mounting, see KMountPoint::mountOptions().
72  */
73  NeedMountOptions = 1,
74  /**
75  * Also fetch the device name (with symlinks resolved), see KMountPoint::realDeviceName().
76  */
77  NeedRealDeviceName = 2,
78  };
79  /**
80  * Stores a combination of #DetailsNeededFlag values.
81  */
83 
84  /**
85  * This function gives a list of all possible mountpoints. (fstab)
86  * @param infoNeeded Flags that specify which additional information
87  * should be fetched.
88  */
89  static List possibleMountPoints(DetailsNeededFlags infoNeeded = BasicInfoNeeded);
90 
91  /**
92  * Returns a list of all current mountpoints.
93  *
94  * @param infoNeeded Flags that specify which additional information
95  * should be fetched.
96  *
97  * @note This method will return an empty list on @c Android
98  */
99  static List currentMountPoints(DetailsNeededFlags infoNeeded = BasicInfoNeeded);
100 
101  /**
102  * Where this filesystem gets mounted from.
103  * This can refer to a device, a remote server or something else.
104  */
105  QString mountedFrom() const;
106 
107  /**
108  * Returns @c true if this mount point represents a network filesystem (e.g.\ NFS,
109  * CIFS, etc.), otherwise returns @c false.
110  *
111  * @since 5.86
112  */
113  bool isOnNetwork() const;
114 
115  /**
116  * Returns the device ID (dev_t, major, minor) of this mount point. This
117  * ID is unique per device (including network mounts).
118  *
119  * @since 5.86
120  */
121  dev_t deviceId() const;
122 
123  /**
124  * Canonical name of the device where the filesystem got mounted from.
125  * (Or empty, if not a device)
126  * Only available when the NeedRealDeviceName flag was set.
127  */
128  QString realDeviceName() const;
129 
130  /**
131  * Path where the filesystem is mounted (if you used @ref currentMountPoints()),
132  * or can be mounted (if you used @ref possibleMountPoints()).
133  */
134  QString mountPoint() const;
135 
136  /**
137  * Type of filesystem
138  */
139  QString mountType() const;
140 
141  /**
142  * Options used to mount the filesystem.
143  * Only available if the @ref NeedMountOptions flag was set.
144  */
145  QStringList mountOptions() const;
146 
147  /**
148  * Returns @c true if the filesystem is "probably" slow, e.g.\ a network mount,
149  * @c false otherwise.
150  */
151  bool probablySlow() const;
152 
153  enum FileSystemFlag {
154  SupportsChmod,
155  SupportsChown,
156  SupportsUTime,
157  SupportsSymlinks,
158  CaseInsensitive,
159  };
160 
161  /**
162  * Checks the capabilities of the filesystem.
163  * @param flag the flag to check
164  * @return true if the filesystem has that flag, false if not
165  *
166  * The available flags are:
167  * @li SupportsChmod: returns true if the filesystem supports chmod
168  * (e.g. msdos filesystems return false)
169  * @li SupportsChown: returns true if the filesystem supports chown
170  * (e.g. msdos filesystems return false)
171  * @li SupportsUtime: returns true if the filesystems supports utime
172  * (e.g. msdos filesystems return false)
173  * @li SupportsSymlinks: returns true if the filesystems supports symlinks
174  * (e.g. msdos filesystems return false)
175  * @li CaseInsensitive: returns true if the filesystem treats
176  * "foo" and "FOO" as being the same file (true for msdos filesystems)
177  *
178  */
179  bool testFileSystemFlag(FileSystemFlag flag) const;
180 
181  /**
182  * Destructor
183  */
184  ~KMountPoint();
185 
186 private:
187  /**
188  * Constructor
189  */
190  KIOCORE_NO_EXPORT KMountPoint();
191 
192  friend KIOCORE_EXPORT QDebug operator<<(QDebug debug, const Ptr &mp);
193 
194  friend KMountPointPrivate;
195  std::unique_ptr<KMountPointPrivate> d;
196 };
197 
198 KIOCORE_EXPORT QDebug operator<<(QDebug debug, const KMountPoint::Ptr &mp);
199 
200 Q_DECLARE_OPERATORS_FOR_FLAGS(KMountPoint::DetailsNeededFlags)
201 
202 #endif // KMOUNTPOINT_H
KCALENDARCORE_EXPORT QDataStream & operator<<(QDataStream &out, const KCalendarCore::Alarm::Ptr &)
List of mount points.
Definition: kmountpoint.h:38
DetailsNeededFlag
Flags that specify which additional details should be fetched for each mountpoint.
Definition: kmountpoint.h:65
QList< T > & operator<<(const T &value)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Thu Mar 23 2023 03:59:42 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.