xref: /haiku/docs/user/storage/Volume.dox (revision 9d5f5318a5648a58945bd6eb221493ddf39e70e5)
1*9d5f5318SJohn Scipione/*
2*9d5f5318SJohn Scipione * Copyright 2002-2013 Haiku Inc. All rights reserved.
3*9d5f5318SJohn Scipione * Distributed under the terms of the MIT License.
4*9d5f5318SJohn Scipione *
5*9d5f5318SJohn Scipione * Authors:
6*9d5f5318SJohn Scipione *		Tyler Dauwalder
7*9d5f5318SJohn Scipione *		Vincent Dominguez
8*9d5f5318SJohn Scipione *		John Scipione, jscipione@gmail.com
9*9d5f5318SJohn Scipione *		Ingo Weinhold, bonefish@users.sf.net
10*9d5f5318SJohn Scipione *
11*9d5f5318SJohn Scipione * Corresponds to:
12*9d5f5318SJohn Scipione *		headers/os/storage/Volume.h	hrev45306
13*9d5f5318SJohn Scipione *		src/kits/storage/Volume.cpp	hrev45306
14*9d5f5318SJohn Scipione */
15*9d5f5318SJohn Scipione
16*9d5f5318SJohn Scipione
17*9d5f5318SJohn Scipione/*!
18*9d5f5318SJohn Scipione	\file Volume.h
19*9d5f5318SJohn Scipione	\ingroup storage
20*9d5f5318SJohn Scipione	\ingroup libbe
21*9d5f5318SJohn Scipione	\brief Provides the BVolume class.
22*9d5f5318SJohn Scipione*/
23*9d5f5318SJohn Scipione
24*9d5f5318SJohn Scipione
25*9d5f5318SJohn Scipione/*!
26*9d5f5318SJohn Scipione	\class BVolume
27*9d5f5318SJohn Scipione	\ingroup storage
28*9d5f5318SJohn Scipione	\ingroup libbe
29*9d5f5318SJohn Scipione	\brief Provides an interface for querying information about a volume.
30*9d5f5318SJohn Scipione
31*9d5f5318SJohn Scipione	The class is a simple wrapper for a \c dev_t and the function
32*9d5f5318SJohn Scipione	fs_stat_dev(). The sole exception is the SetName() method which
33*9d5f5318SJohn Scipione	sets the name of the volume.
34*9d5f5318SJohn Scipione*/
35*9d5f5318SJohn Scipione
36*9d5f5318SJohn Scipione
37*9d5f5318SJohn Scipione/*!
38*9d5f5318SJohn Scipione	\fn BVolume::BVolume()
39*9d5f5318SJohn Scipione	\brief Creates an uninitialized BVolume object.
40*9d5f5318SJohn Scipione
41*9d5f5318SJohn Scipione	InitCheck() will return \c B_NO_INIT.
42*9d5f5318SJohn Scipione
43*9d5f5318SJohn Scipione	\see SetTo()
44*9d5f5318SJohn Scipione*/
45*9d5f5318SJohn Scipione
46*9d5f5318SJohn Scipione
47*9d5f5318SJohn Scipione/*!
48*9d5f5318SJohn Scipione	\fn BVolume::BVolume(dev_t device)
49*9d5f5318SJohn Scipione	\brief Creates a BVolume and initializes it to the volume specified
50*9d5f5318SJohn Scipione	       by the supplied device ID.
51*9d5f5318SJohn Scipione
52*9d5f5318SJohn Scipione	InitCheck() should be called afterwards to check if initialization was
53*9d5f5318SJohn Scipione	successful.
54*9d5f5318SJohn Scipione
55*9d5f5318SJohn Scipione	\param device The device ID of the volume.
56*9d5f5318SJohn Scipione*/
57*9d5f5318SJohn Scipione
58*9d5f5318SJohn Scipione
59*9d5f5318SJohn Scipione/*!
60*9d5f5318SJohn Scipione	\fn BVolume::BVolume(const BVolume &volume)
61*9d5f5318SJohn Scipione	\brief Creates a copy of the supplied BVolume object.
62*9d5f5318SJohn Scipione
63*9d5f5318SJohn Scipione	Afterwards the object refers to the same device the supplied object
64*9d5f5318SJohn Scipione	does. If the latter is not properly initialized, this result isn't
65*9d5f5318SJohn Scipione	either.
66*9d5f5318SJohn Scipione
67*9d5f5318SJohn Scipione	\param volume The volume object to be copied.
68*9d5f5318SJohn Scipione*/
69*9d5f5318SJohn Scipione
70*9d5f5318SJohn Scipione
71*9d5f5318SJohn Scipione/*!
72*9d5f5318SJohn Scipione	\fn BVolume::~BVolume()
73*9d5f5318SJohn Scipione	\brief Destroys the object and frees all associated resources.
74*9d5f5318SJohn Scipione*/
75*9d5f5318SJohn Scipione
76*9d5f5318SJohn Scipione
77*9d5f5318SJohn Scipione/*!
78*9d5f5318SJohn Scipione	\name Constructor helper methods
79*9d5f5318SJohn Scipione*/
80*9d5f5318SJohn Scipione
81*9d5f5318SJohn Scipione
82*9d5f5318SJohn Scipione//! @{
83*9d5f5318SJohn Scipione
84*9d5f5318SJohn Scipione
85*9d5f5318SJohn Scipione/*!
86*9d5f5318SJohn Scipione	\fn status_t BVolume::InitCheck(void) const
87*9d5f5318SJohn Scipione	\brief Returns the initialization status.
88*9d5f5318SJohn Scipione
89*9d5f5318SJohn Scipione	\return \c B_OK if the object was properly initialized, or an error code
90*9d5f5318SJohn Scipione	        otherwise.
91*9d5f5318SJohn Scipione*/
92*9d5f5318SJohn Scipione
93*9d5f5318SJohn Scipione
94*9d5f5318SJohn Scipione/*!
95*9d5f5318SJohn Scipione	\fn status_t BVolume::SetTo(dev_t device)
96*9d5f5318SJohn Scipione	\brief Initializes the object to refer to the volume specified by
97*9d5f5318SJohn Scipione	       the supplied device ID.
98*9d5f5318SJohn Scipione
99*9d5f5318SJohn Scipione	\param device The device ID of the volume to set.
100*9d5f5318SJohn Scipione	\return \c B_OK if the object was properly initialized, or an error code
101*9d5f5318SJohn Scipione	        otherwise.
102*9d5f5318SJohn Scipione*/
103*9d5f5318SJohn Scipione
104*9d5f5318SJohn Scipione
105*9d5f5318SJohn Scipione/*!
106*9d5f5318SJohn Scipione	\fn void BVolume::Unset()
107*9d5f5318SJohn Scipione	\brief Brings the BVolume object to an uninitialized state.
108*9d5f5318SJohn Scipione
109*9d5f5318SJohn Scipione	InitCheck() will return \c B_NO_INIT.
110*9d5f5318SJohn Scipione*/
111*9d5f5318SJohn Scipione
112*9d5f5318SJohn Scipione
113*9d5f5318SJohn Scipione//! @}
114*9d5f5318SJohn Scipione
115*9d5f5318SJohn Scipione
116*9d5f5318SJohn Scipione/*!
117*9d5f5318SJohn Scipione	\name Volume information methods
118*9d5f5318SJohn Scipione*/
119*9d5f5318SJohn Scipione
120*9d5f5318SJohn Scipione
121*9d5f5318SJohn Scipione//! @{
122*9d5f5318SJohn Scipione
123*9d5f5318SJohn Scipione
124*9d5f5318SJohn Scipione/*!
125*9d5f5318SJohn Scipione	\fn dev_t BVolume::Device() const
126*9d5f5318SJohn Scipione	\brief Returns the device ID of the volume the object refers to.
127*9d5f5318SJohn Scipione
128*9d5f5318SJohn Scipione	\return Returns the device ID of the volume the object refers to
129*9d5f5318SJohn Scipione			or -1 if the object was not properly initialized.
130*9d5f5318SJohn Scipione*/
131*9d5f5318SJohn Scipione
132*9d5f5318SJohn Scipione
133*9d5f5318SJohn Scipione/*!
134*9d5f5318SJohn Scipione	\fn status_t BVolume::GetRootDirectory(BDirectory *directory) const
135*9d5f5318SJohn Scipione	\brief Writes the root directory of the volume referred to by this
136*9d5f5318SJohn Scipione	       object into \a directory.
137*9d5f5318SJohn Scipione
138*9d5f5318SJohn Scipione	\param directory A pointer to a pre-allocated BDirectory to be initialized
139*9d5f5318SJohn Scipione		   to the volume's root directory.
140*9d5f5318SJohn Scipione
141*9d5f5318SJohn Scipione	\return A status code.
142*9d5f5318SJohn Scipione	\retval B_OK Everything went fine.
143*9d5f5318SJohn Scipione	\retval B_BAD_VALUE \a directory was \c NULL or the object was not properly
144*9d5f5318SJohn Scipione	        initialized.
145*9d5f5318SJohn Scipione*/
146*9d5f5318SJohn Scipione
147*9d5f5318SJohn Scipione
148*9d5f5318SJohn Scipione/*!
149*9d5f5318SJohn Scipione	\fn off_t BVolume::Capacity() const
150*9d5f5318SJohn Scipione	\brief Returns the total storage capacity of the volume.
151*9d5f5318SJohn Scipione
152*9d5f5318SJohn Scipione	\return The volume's total storage capacity (in bytes), or \c B_BAD_VALUE
153*9d5f5318SJohn Scipione	        if the object is not properly initialized.
154*9d5f5318SJohn Scipione*/
155*9d5f5318SJohn Scipione
156*9d5f5318SJohn Scipione
157*9d5f5318SJohn Scipione/*!
158*9d5f5318SJohn Scipione	\fn off_t BVolume::FreeBytes() const
159*9d5f5318SJohn Scipione	\brief Returns the amount of unused space on the volume (in bytes).
160*9d5f5318SJohn Scipione
161*9d5f5318SJohn Scipione	\return The amount of unused space on the volume (in bytes), or
162*9d5f5318SJohn Scipione	        \c B_BAD_VALUE if the object is not properly initialized.
163*9d5f5318SJohn Scipione*/
164*9d5f5318SJohn Scipione
165*9d5f5318SJohn Scipione
166*9d5f5318SJohn Scipione/*!
167*9d5f5318SJohn Scipione	\fn off_t BVolume::BlockSize() const
168*9d5f5318SJohn Scipione	\brief Returns the size of one block (in bytes). The meaning of this
169*9d5f5318SJohn Scipione	       depends on the underlying file system.
170*9d5f5318SJohn Scipione
171*9d5f5318SJohn Scipione	\return The block size in bytes, \c B_NO_INIT if the volume is not
172*9d5f5318SJohn Scipione	        initialized or other errors forwarded from the file system.
173*9d5f5318SJohn Scipione*/
174*9d5f5318SJohn Scipione
175*9d5f5318SJohn Scipione
176*9d5f5318SJohn Scipione//! @}
177*9d5f5318SJohn Scipione
178*9d5f5318SJohn Scipione
179*9d5f5318SJohn Scipione/*!
180*9d5f5318SJohn Scipione	\name Volume name methods
181*9d5f5318SJohn Scipione*/
182*9d5f5318SJohn Scipione
183*9d5f5318SJohn Scipione
184*9d5f5318SJohn Scipione//! @{
185*9d5f5318SJohn Scipione
186*9d5f5318SJohn Scipione
187*9d5f5318SJohn Scipione/*!
188*9d5f5318SJohn Scipione	\fn status_t BVolume::GetName(char* name) const
189*9d5f5318SJohn Scipione	\brief Writes the volume's name into the provided buffer.
190*9d5f5318SJohn Scipione
191*9d5f5318SJohn Scipione	\param name A pointer to a pre-allocated character buffer of size
192*9d5f5318SJohn Scipione	       \c B_FILE_NAME_LENGTH or larger into which the name of the
193*9d5f5318SJohn Scipione	       volume is written.
194*9d5f5318SJohn Scipione
195*9d5f5318SJohn Scipione	\return A status code.
196*9d5f5318SJohn Scipione	\retval B_OK Everything went fine.
197*9d5f5318SJohn Scipione	\retval B_BAD_VALUE \a name was \c NULL or the object was not properly
198*9d5f5318SJohn Scipione	        initialized.
199*9d5f5318SJohn Scipione*/
200*9d5f5318SJohn Scipione
201*9d5f5318SJohn Scipione
202*9d5f5318SJohn Scipione/*!
203*9d5f5318SJohn Scipione	\fn status_t BVolume::SetName(const char *name)
204*9d5f5318SJohn Scipione	\brief Sets the volume's name to \a name.
205*9d5f5318SJohn Scipione
206*9d5f5318SJohn Scipione	\note The R5 implementation checks if an entry with the volume's old name
207*9d5f5318SJohn Scipione	      exists in the root directory and renames that entry, if it is indeed
208*9d5f5318SJohn Scipione	      the mount point of the volume (or a link referring to it). In all
209*9d5f5318SJohn Scipione	      other cases, nothing is done (even if the mount point is named like
210*9d5f5318SJohn Scipione	      the volume, but lives in a different directory). We follow suit for
211*9d5f5318SJohn Scipione	      the time being.
212*9d5f5318SJohn Scipione
213*9d5f5318SJohn Scipione	\warning If the volume name is set to "boot" this method tries to rename
214*9d5f5318SJohn Scipione	         it to /boot, but is prevented by the kernel.
215*9d5f5318SJohn Scipione
216*9d5f5318SJohn Scipione	\param name The new name of the volume, must not be longer than
217*9d5f5318SJohn Scipione		   \c B_FILE_NAME_LENGTH (including the terminating \c NULL).
218*9d5f5318SJohn Scipione
219*9d5f5318SJohn Scipione	\return A status code.
220*9d5f5318SJohn Scipione	\retval B_OK Everything went fine.
221*9d5f5318SJohn Scipione	\retval B_BAD_VALUE \a name was \c NULL or the object was not properly
222*9d5f5318SJohn Scipione	        initialized.
223*9d5f5318SJohn Scipione*/
224*9d5f5318SJohn Scipione
225*9d5f5318SJohn Scipione
226*9d5f5318SJohn Scipione//! @}
227*9d5f5318SJohn Scipione
228*9d5f5318SJohn Scipione
229*9d5f5318SJohn Scipione/*!
230*9d5f5318SJohn Scipione	\name Volume icon methods
231*9d5f5318SJohn Scipione*/
232*9d5f5318SJohn Scipione
233*9d5f5318SJohn Scipione
234*9d5f5318SJohn Scipione//! @{
235*9d5f5318SJohn Scipione
236*9d5f5318SJohn Scipione
237*9d5f5318SJohn Scipione/*!
238*9d5f5318SJohn Scipione	\fn status_t BVolume::GetIcon(BBitmap *icon, icon_size which) const
239*9d5f5318SJohn Scipione	\brief Writes the volume's icon into the supplied BBitmap.
240*9d5f5318SJohn Scipione
241*9d5f5318SJohn Scipione	\param icon A pointer to a pre-allocated BBitmap of the correct dimension
242*9d5f5318SJohn Scipione		   to store the requested icon (16x16 for the mini and 32x32 for the
243*9d5f5318SJohn Scipione		   large icon).
244*9d5f5318SJohn Scipione
245*9d5f5318SJohn Scipione	\param which The icon size to be retrieved: \c B_MINI_ICON for the mini or
246*9d5f5318SJohn Scipione	       \c B_LARGE_ICON for the large icon.
247*9d5f5318SJohn Scipione*/
248*9d5f5318SJohn Scipione
249*9d5f5318SJohn Scipione
250*9d5f5318SJohn Scipione/*!
251*9d5f5318SJohn Scipione	\fn status_t BVolume::GetIcon(uint8** _data, size_t* _size,
252*9d5f5318SJohn Scipione		type_code* _type) const
253*9d5f5318SJohn Scipione	\brief Writes the volume's icon data into the supplied \c uint8 array.
254*9d5f5318SJohn Scipione
255*9d5f5318SJohn Scipione	\param _data A pointer to a pointer to a pre-allocated \c uint8 array of
256*9d5f5318SJohn Scipione	       the correct size to store the requested icon.
257*9d5f5318SJohn Scipione	\param _size The size of the retrieved icon (in bytes).
258*9d5f5318SJohn Scipione	\param _type The type code of the retrieve icon.
259*9d5f5318SJohn Scipione
260*9d5f5318SJohn Scipione	\returns A status code.
261*9d5f5318SJohn Scipione	\retval B_OK Everything went fine.
262*9d5f5318SJohn Scipione	\retval B_NO_INIT Object was not properly initialized.
263*9d5f5318SJohn Scipione
264*9d5f5318SJohn Scipione	\see fs_stat_dev() for more return codes.
265*9d5f5318SJohn Scipione	\see get_device_icon() for more return codes.
266*9d5f5318SJohn Scipione*/
267*9d5f5318SJohn Scipione
268*9d5f5318SJohn Scipione
269*9d5f5318SJohn Scipione//! @}
270*9d5f5318SJohn Scipione
271*9d5f5318SJohn Scipione
272*9d5f5318SJohn Scipione/*!
273*9d5f5318SJohn Scipione	\name Volume capability methods
274*9d5f5318SJohn Scipione*/
275*9d5f5318SJohn Scipione
276*9d5f5318SJohn Scipione
277*9d5f5318SJohn Scipione//! @{
278*9d5f5318SJohn Scipione
279*9d5f5318SJohn Scipione
280*9d5f5318SJohn Scipione/*!
281*9d5f5318SJohn Scipione	\fn bool BVolume::IsRemovable() const
282*9d5f5318SJohn Scipione	\brief Returns whether or not the volume is removable.
283*9d5f5318SJohn Scipione
284*9d5f5318SJohn Scipione	\return \c true, if the volume was properly initialized and is removable,
285*9d5f5318SJohn Scipione	        \c false otherwise.
286*9d5f5318SJohn Scipione*/
287*9d5f5318SJohn Scipione
288*9d5f5318SJohn Scipione
289*9d5f5318SJohn Scipione/*!
290*9d5f5318SJohn Scipione	\fn bool BVolume::IsReadOnly(void) const
291*9d5f5318SJohn Scipione	\brief Returns whether or not the volume is read-only.
292*9d5f5318SJohn Scipione
293*9d5f5318SJohn Scipione	\return \c true, if the volume was properly initialized and is read-only,
294*9d5f5318SJohn Scipione	        \c false otherwise.
295*9d5f5318SJohn Scipione*/
296*9d5f5318SJohn Scipione
297*9d5f5318SJohn Scipione
298*9d5f5318SJohn Scipione/*!
299*9d5f5318SJohn Scipione	\fn bool BVolume::IsPersistent(void) const
300*9d5f5318SJohn Scipione	\brief Returns whether or not the volume is persistent.
301*9d5f5318SJohn Scipione
302*9d5f5318SJohn Scipione	\return \c true, if the volume was properly initialized and is persistent,
303*9d5f5318SJohn Scipione	       \c false otherwise.
304*9d5f5318SJohn Scipione*/
305*9d5f5318SJohn Scipione
306*9d5f5318SJohn Scipione
307*9d5f5318SJohn Scipione/*!
308*9d5f5318SJohn Scipione	\fn bool BVolume::IsShared(void) const
309*9d5f5318SJohn Scipione	\brief Returns whether or not the volume is shared.
310*9d5f5318SJohn Scipione
311*9d5f5318SJohn Scipione	return \c true, if the volume was properly initialized and is shared,
312*9d5f5318SJohn Scipione	       \c false otherwise.
313*9d5f5318SJohn Scipione*/
314*9d5f5318SJohn Scipione
315*9d5f5318SJohn Scipione
316*9d5f5318SJohn Scipione/*!
317*9d5f5318SJohn Scipione	\fn bool BVolume::KnowsMime(void) const
318*9d5f5318SJohn Scipione	\brief Returns whether or not the volume supports MIME-types.
319*9d5f5318SJohn Scipione
320*9d5f5318SJohn Scipione	\return \c true, if the volume was properly initialized and supports
321*9d5f5318SJohn Scipione	        MIME-types, \c false otherwise.
322*9d5f5318SJohn Scipione*/
323*9d5f5318SJohn Scipione
324*9d5f5318SJohn Scipione
325*9d5f5318SJohn Scipione/*!
326*9d5f5318SJohn Scipione	\fn bool BVolume::KnowsAttr(void) const
327*9d5f5318SJohn Scipione	\brief Returns whether or not the volume supports attributes.
328*9d5f5318SJohn Scipione
329*9d5f5318SJohn Scipione	\return \c true, if the volume was properly initialized and supports
330*9d5f5318SJohn Scipione	        attributes, \c false otherwise.
331*9d5f5318SJohn Scipione*/
332*9d5f5318SJohn Scipione
333*9d5f5318SJohn Scipione
334*9d5f5318SJohn Scipione/*!
335*9d5f5318SJohn Scipione	\fn bool BVolume::KnowsQuery(void) const
336*9d5f5318SJohn Scipione	\brief Returns whether or not the volume supports queries.
337*9d5f5318SJohn Scipione
338*9d5f5318SJohn Scipione	\return \c true, if the volume was properly initialized and supports
339*9d5f5318SJohn Scipione	        queries, \c false otherwise.
340*9d5f5318SJohn Scipione*/
341*9d5f5318SJohn Scipione
342*9d5f5318SJohn Scipione
343*9d5f5318SJohn Scipione//! @}
344*9d5f5318SJohn Scipione
345*9d5f5318SJohn Scipione
346*9d5f5318SJohn Scipione/*!
347*9d5f5318SJohn Scipione	\name Operator overload methods
348*9d5f5318SJohn Scipione*/
349*9d5f5318SJohn Scipione
350*9d5f5318SJohn Scipione
351*9d5f5318SJohn Scipione//! @{
352*9d5f5318SJohn Scipione
353*9d5f5318SJohn Scipione
354*9d5f5318SJohn Scipione/*!
355*9d5f5318SJohn Scipione	\fn bool BVolume::operator==(const BVolume &volume) const
356*9d5f5318SJohn Scipione	\brief Returns whether or not the supplied BVolume object is equal to this
357*9d5f5318SJohn Scipione	       object.
358*9d5f5318SJohn Scipione
359*9d5f5318SJohn Scipione	Two volume objects are said to be equal if they are both uninitialized,
360*9d5f5318SJohn Scipione	or they are both initialized and refer to the same volume.
361*9d5f5318SJohn Scipione
362*9d5f5318SJohn Scipione	\param volume The volume to be tested for equality.
363*9d5f5318SJohn Scipione
364*9d5f5318SJohn Scipione	\return \c true, if the objects are equal, \c false otherwise.
365*9d5f5318SJohn Scipione*/
366*9d5f5318SJohn Scipione
367*9d5f5318SJohn Scipione
368*9d5f5318SJohn Scipione/*!
369*9d5f5318SJohn Scipione	\fn bool BVolume::operator!=(const BVolume &volume) const
370*9d5f5318SJohn Scipione	\brief Returns whether or not the supplied BVolume object is NOT equal to
371*9d5f5318SJohn Scipione	       this object.
372*9d5f5318SJohn Scipione
373*9d5f5318SJohn Scipione	Two volume objects are said to be unequal if one is initialized and the
374*9d5f5318SJohn Scipione	other is not or if they are both initialized and refer to the different
375*9d5f5318SJohn Scipione	volumes.
376*9d5f5318SJohn Scipione
377*9d5f5318SJohn Scipione	\param volume The volume to be tested for inequality.
378*9d5f5318SJohn Scipione
379*9d5f5318SJohn Scipione	\return \c true, if the objects and unequal, \c false otherwise.
380*9d5f5318SJohn Scipione*/
381*9d5f5318SJohn Scipione
382*9d5f5318SJohn Scipione
383*9d5f5318SJohn Scipione/*!
384*9d5f5318SJohn Scipione	\fn BVolume& BVolume::operator=(const BVolume &volume)
385*9d5f5318SJohn Scipione	\brief Assigns the supplied BVolume object to this volume, this object is
386*9d5f5318SJohn Scipione	       made to be an exact clone of the supplied one.
387*9d5f5318SJohn Scipione
388*9d5f5318SJohn Scipione	\param volume The volume to be assigned.
389*9d5f5318SJohn Scipione
390*9d5f5318SJohn Scipione	\return A reference to this object.
391*9d5f5318SJohn Scipione*/
392*9d5f5318SJohn Scipione
393*9d5f5318SJohn Scipione
394*9d5f5318SJohn Scipione//! @}
395