@@ -116,6 +116,8 @@ dword_result_t XamContentCreateEnumerator_entry(
116116}
117117DECLARE_XAM_EXPORT1 (XamContentCreateEnumerator, kContent , kImplemented );
118118
119+ enum class kDispositionState : uint32_t { Unknown = 0 , Create = 1 , Open = 2 };
120+
119121dword_result_t xeXamContentCreate (dword_t user_index, lpstring_t root_name,
120122 lpvoid_t content_data_ptr,
121123 dword_t content_data_size, dword_t flags,
@@ -143,40 +145,37 @@ dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name,
143145 content_data, disposition_ptr, license_mask_ptr](
144146 uint32_t & extended_error, uint32_t & length) -> X_RESULT {
145147 X_RESULT result = X_ERROR_INVALID_PARAMETER;
146- bool create = false ;
147- bool open = false ;
148+ kDispositionState disposition = kDispositionState ::Unknown;
148149 switch (flags & 0xF ) {
149150 case 1 : // CREATE_NEW
150151 // Fail if exists.
151152 if (content_manager->ContentExists (content_data)) {
152153 result = X_ERROR_ALREADY_EXISTS;
153154 } else {
154- create = true ;
155+ disposition = kDispositionState ::Create ;
155156 }
156157 break ;
157158 case 2 : // CREATE_ALWAYS
158159 // Overwrite existing, if any.
159160 if (content_manager->ContentExists (content_data)) {
160161 content_manager->DeleteContent (content_data);
161- create = true ;
162- } else {
163- create = true ;
164162 }
163+ disposition = kDispositionState ::Create;
165164 break ;
166165 case 3 : // OPEN_EXISTING
167166 // Open only if exists.
168167 if (!content_manager->ContentExists (content_data)) {
169168 result = X_ERROR_PATH_NOT_FOUND;
170169 } else {
171- open = true ;
170+ disposition = kDispositionState ::Open ;
172171 }
173172 break ;
174173 case 4 : // OPEN_ALWAYS
175174 // Create if needed.
176175 if (!content_manager->ContentExists (content_data)) {
177- create = true ;
176+ disposition = kDispositionState ::Create ;
178177 } else {
179- open = true ;
178+ disposition = kDispositionState ::Open ;
180179 }
181180 break ;
182181 case 5 : // TRUNCATE_EXISTING
@@ -185,35 +184,30 @@ dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name,
185184 result = X_ERROR_PATH_NOT_FOUND;
186185 } else {
187186 content_manager->DeleteContent (content_data);
188- create = true ;
187+ disposition = kDispositionState ::Create ;
189188 }
190189 break ;
191190 default :
192191 assert_unhandled_case (flags & 0xF );
193192 break ;
194193 }
195194
196- // creation result
197- // 0 = ?
198- // 1 = created
199- // 2 = opened
200- uint32_t disposition = create ? 1 : 2 ;
201- if (disposition_ptr) {
202- *disposition_ptr = disposition;
203- }
204-
205- if (create) {
195+ if (disposition == kDispositionState ::Create) {
206196 result = content_manager->CreateContent (root_name, content_data);
207- } else if (open ) {
197+ } else if (disposition == kDispositionState ::Open ) {
208198 result = content_manager->OpenContent (root_name, content_data);
209199 }
210200
201+ if (disposition_ptr) {
202+ *disposition_ptr = static_cast <uint32_t >(disposition);
203+ }
204+
211205 if (license_mask_ptr && XSUCCEEDED (result)) {
212206 *license_mask_ptr = 0 ; // Stub!
213207 }
214208
215209 extended_error = X_HRESULT_FROM_WIN32 (result);
216- length = disposition;
210+ length = static_cast < uint32_t >( disposition) ;
217211 return result;
218212 };
219213
0 commit comments