VirtualBox

source: vbox/trunk/src/VBox/Main/HardDiskFormatImpl.cpp@ 13580

Last change on this file since 13580 was 13580, checked in by vboxsync, 16 years ago

Ported s2 branch (r37120:38456).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 6.4 KB
Line 
1/* $Id $ */
2
3/** @file
4 *
5 * VirtualBox COM class implementation
6 */
7
8/*
9 * Copyright (C) 2008 Sun Microsystems, Inc.
10 *
11 * This file is part of VirtualBox Open Source Edition (OSE), as
12 * available from http://www.virtualbox.org. This file is free software;
13 * you can redistribute it and/or modify it under the terms of the GNU
14 * General Public License (GPL) as published by the Free Software
15 * Foundation, in version 2 as it comes in the "COPYING" file of the
16 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
20 * Clara, CA 95054 USA or visit http://www.sun.com if you need
21 * additional information or have any questions.
22 */
23
24#include "HardDiskFormatImpl.h"
25#include "Logging.h"
26
27#include <VBox/VBoxHDD-new.h>
28
29// constructor / destructor
30/////////////////////////////////////////////////////////////////////////////
31
32DEFINE_EMPTY_CTOR_DTOR (HardDiskFormat)
33
34HRESULT HardDiskFormat::FinalConstruct()
35{
36 return S_OK;
37}
38
39void HardDiskFormat::FinalRelease()
40{
41 uninit();
42}
43
44// public initializer/uninitializer for internal purposes only
45/////////////////////////////////////////////////////////////////////////////
46
47/**
48 * Initializes the hard disk format object.
49 *
50 * @param aVDInfo Pointer to a backend info object.
51 */
52HRESULT HardDiskFormat::init (VDBACKENDINFO *aVDInfo)
53{
54 LogFlowThisFunc (("aVDInfo=%p\n", aVDInfo));
55
56 ComAssertRet (aVDInfo, E_INVALIDARG);
57
58 /* Enclose the state transition NotReady->InInit->Ready */
59 AutoInitSpan autoInitSpan (this);
60 AssertReturn (autoInitSpan.isOk(), E_UNEXPECTED);
61
62 /* The ID of the backend */
63 unconst (mData.id) = aVDInfo->pszBackend;
64 /* The capabilities of the backend */
65 unconst (mData.capabilities) = aVDInfo->uBackendCaps;
66 /* Save the supported file extensions in a list */
67 if (aVDInfo->papszFileExtensions)
68 {
69 const char *const *papsz = aVDInfo->papszFileExtensions;
70 while (*papsz != NULL)
71 {
72 unconst (mData.fileExtensions).push_back (*papsz);
73 ++ papsz;
74 }
75 }
76
77 /* Confirm a successful initialization */
78 autoInitSpan.setSucceeded();
79
80 return S_OK;
81}
82
83/**
84 * Uninitializes the instance and sets the ready flag to FALSE.
85 * Called either from FinalRelease() or by the parent when it gets destroyed.
86 */
87void HardDiskFormat::uninit()
88{
89 LogFlowThisFunc (("\n"));
90
91 /* Enclose the state transition Ready->InUninit->NotReady */
92 AutoUninitSpan autoUninitSpan (this);
93 if (autoUninitSpan.uninitDone())
94 return;
95
96 unconst (mData.fileExtensions).clear();
97 unconst (mData.capabilities) = 0;
98 unconst (mData.id).setNull();
99}
100
101// IHardDiskFormat properties
102/////////////////////////////////////////////////////////////////////////////
103
104STDMETHODIMP HardDiskFormat::COMGETTER(Id)(BSTR *aId)
105{
106 if (!aId)
107 return E_POINTER;
108
109 AutoCaller autoCaller (this);
110 CheckComRCReturnRC (autoCaller.rc());
111
112 /* mData.id is const, no need to lock */
113
114 mData.id.cloneTo (aId);
115
116 return S_OK;
117}
118
119STDMETHODIMP HardDiskFormat::
120COMGETTER(FileExtensions)(ComSafeArrayOut (BSTR, aFileExtensions))
121{
122 if (ComSafeArrayOutIsNull (aFileExtensions))
123 return E_POINTER;
124
125 AutoCaller autoCaller (this);
126 CheckComRCReturnRC (autoCaller.rc());
127
128 /* mData.fileExtensions is const, no need to lock */
129
130 com::SafeArray <BSTR> fileExtentions (mData.fileExtensions.size());
131 int i = 0;
132 for (BstrList::const_iterator it = mData.fileExtensions.begin();
133 it != mData.fileExtensions.end(); ++ it, ++ i)
134 (*it).cloneTo (&fileExtentions [i]);
135 fileExtentions.detachTo (ComSafeArrayOutArg (aFileExtensions));
136
137 return S_OK;
138}
139
140STDMETHODIMP HardDiskFormat::COMGETTER(SupportUuid)(BOOL *aBool)
141{
142 if (!aBool)
143 return E_POINTER;
144
145 AutoCaller autoCaller (this);
146 CheckComRCReturnRC (autoCaller.rc());
147
148 /* mData.capabilities is const, no need to lock */
149
150 *aBool = mData.capabilities & VD_CAP_UUID;
151
152 return S_OK;
153}
154
155STDMETHODIMP HardDiskFormat::COMGETTER(SupportCreateFixed)(BOOL *aBool)
156{
157 if (!aBool)
158 return E_POINTER;
159
160 AutoCaller autoCaller (this);
161 CheckComRCReturnRC (autoCaller.rc());
162
163 /* mData.capabilities is const, no need to lock */
164
165 *aBool = mData.capabilities & VD_CAP_CREATE_FIXED;
166
167 return S_OK;
168}
169
170STDMETHODIMP HardDiskFormat::COMGETTER(SupportCreateDynamic)(BOOL *aBool)
171{
172 if (!aBool)
173 return E_POINTER;
174
175 AutoCaller autoCaller (this);
176 CheckComRCReturnRC (autoCaller.rc());
177
178 /* mData.capabilities is const, no need to lock */
179
180 *aBool = mData.capabilities & VD_CAP_CREATE_DYNAMIC;
181
182 return S_OK;
183}
184
185STDMETHODIMP HardDiskFormat::COMGETTER(SupportCreateSplit2G)(BOOL *aBool)
186{
187 if (!aBool)
188 return E_POINTER;
189
190 AutoCaller autoCaller (this);
191 CheckComRCReturnRC (autoCaller.rc());
192
193 /* mData.capabilities is const, no need to lock */
194
195 *aBool = mData.capabilities & VD_CAP_CREATE_SPLIT_2G;
196
197 return S_OK;
198}
199
200STDMETHODIMP HardDiskFormat::COMGETTER(SupportDiff)(BOOL *aBool)
201{
202 if (!aBool)
203 return E_POINTER;
204
205 AutoCaller autoCaller (this);
206 CheckComRCReturnRC (autoCaller.rc());
207
208 /* mData.capabilities is const, no need to lock */
209
210 *aBool = mData.capabilities & VD_CAP_DIFF;
211
212 return S_OK;
213}
214
215STDMETHODIMP HardDiskFormat::COMGETTER(SupportASync)(BOOL *aBool)
216{
217 if (!aBool)
218 return E_POINTER;
219
220 AutoCaller autoCaller (this);
221 CheckComRCReturnRC (autoCaller.rc());
222
223 /* mData.capabilities is const, no need to lock */
224
225 *aBool = mData.capabilities & VD_CAP_ASYNC;
226
227 return S_OK;
228}
229
230STDMETHODIMP HardDiskFormat::COMGETTER(SupportFile)(BOOL *aBool)
231{
232 if (!aBool)
233 return E_POINTER;
234
235 AutoCaller autoCaller (this);
236 CheckComRCReturnRC (autoCaller.rc());
237
238 /* mData.capabilities is const, no need to lock */
239
240 *aBool = mData.capabilities & VD_CAP_FILE;
241
242 return S_OK;
243}
244
245STDMETHODIMP HardDiskFormat::COMGETTER(SupportConfig)(BOOL *aBool)
246{
247 if (!aBool)
248 return E_POINTER;
249
250 AutoCaller autoCaller (this);
251 CheckComRCReturnRC (autoCaller.rc());
252
253 /* mData.capabilities is const, no need to lock */
254
255 *aBool = mData.capabilities & VD_CAP_CONFIG;
256
257 return S_OK;
258}
259
260// IHardDiskFormat methods
261/////////////////////////////////////////////////////////////////////////////
262
263// public methods only for internal purposes
264/////////////////////////////////////////////////////////////////////////////
265
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette