Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: base/win/registry.cc

Issue 5623004: Making a few RegKey methods that only read data, const.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/win/registry.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/win/registry.h" 5 #include "base/win/registry.h"
6 6
7 #include <shlwapi.h> 7 #include <shlwapi.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/thread_restrictions.h" 10 #include "base/thread_restrictions.h"
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 237
238 HKEY subkey = NULL; 238 HKEY subkey = NULL;
239 LONG result = RegOpenKeyEx(key_, name, 0, access, &subkey); 239 LONG result = RegOpenKeyEx(key_, name, 0, access, &subkey);
240 240
241 Close(); 241 Close();
242 242
243 key_ = subkey; 243 key_ = subkey;
244 return (result == ERROR_SUCCESS); 244 return (result == ERROR_SUCCESS);
245 } 245 }
246 246
247 DWORD RegKey::ValueCount() { 247 DWORD RegKey::ValueCount() const {
248 base::ThreadRestrictions::AssertIOAllowed(); 248 base::ThreadRestrictions::AssertIOAllowed();
249 DWORD count = 0; 249 DWORD count = 0;
250 HRESULT result = RegQueryInfoKey(key_, NULL, 0, NULL, NULL, NULL, 250 HRESULT result = RegQueryInfoKey(key_, NULL, 0, NULL, NULL, NULL,
251 NULL, &count, NULL, NULL, NULL, NULL); 251 NULL, &count, NULL, NULL, NULL, NULL);
252 return (result != ERROR_SUCCESS) ? 0 : count; 252 return (result != ERROR_SUCCESS) ? 0 : count;
253 } 253 }
254 254
255 bool RegKey::ReadName(int index, std::wstring* name) { 255 bool RegKey::ReadName(int index, std::wstring* name) const {
256 base::ThreadRestrictions::AssertIOAllowed(); 256 base::ThreadRestrictions::AssertIOAllowed();
257 wchar_t buf[256]; 257 wchar_t buf[256];
258 DWORD bufsize = arraysize(buf); 258 DWORD bufsize = arraysize(buf);
259 LRESULT r = ::RegEnumValue(key_, index, buf, &bufsize, NULL, NULL, 259 LRESULT r = ::RegEnumValue(key_, index, buf, &bufsize, NULL, NULL,
260 NULL, NULL); 260 NULL, NULL);
261 if (r != ERROR_SUCCESS) 261 if (r != ERROR_SUCCESS)
262 return false; 262 return false;
263 if (name) 263 if (name)
264 *name = buf; 264 *name = buf;
265 return true; 265 return true;
266 } 266 }
267 267
268 bool RegKey::ValueExists(const wchar_t* name) { 268 bool RegKey::ValueExists(const wchar_t* name) {
269 base::ThreadRestrictions::AssertIOAllowed(); 269 base::ThreadRestrictions::AssertIOAllowed();
270 if (!key_) 270 if (!key_)
271 return false; 271 return false;
272 HRESULT result = RegQueryValueEx(key_, name, 0, NULL, NULL, NULL); 272 HRESULT result = RegQueryValueEx(key_, name, 0, NULL, NULL, NULL);
273 return (result == ERROR_SUCCESS); 273 return (result == ERROR_SUCCESS);
274 } 274 }
275 275
276 bool RegKey::ReadValue(const wchar_t* name, void* data, 276 bool RegKey::ReadValue(const wchar_t* name, void* data,
277 DWORD* dsize, DWORD* dtype) { 277 DWORD* dsize, DWORD* dtype) const {
278 base::ThreadRestrictions::AssertIOAllowed(); 278 base::ThreadRestrictions::AssertIOAllowed();
279 if (!key_) 279 if (!key_)
280 return false; 280 return false;
281 HRESULT result = RegQueryValueEx(key_, name, 0, dtype, 281 HRESULT result = RegQueryValueEx(key_, name, 0, dtype,
282 reinterpret_cast<LPBYTE>(data), dsize); 282 reinterpret_cast<LPBYTE>(data), dsize);
283 return (result == ERROR_SUCCESS); 283 return (result == ERROR_SUCCESS);
284 } 284 }
285 285
286 bool RegKey::ReadValue(const wchar_t* name, std::wstring* value) { 286 bool RegKey::ReadValue(const wchar_t* name, std::wstring* value) const {
287 base::ThreadRestrictions::AssertIOAllowed(); 287 base::ThreadRestrictions::AssertIOAllowed();
288 DCHECK(value); 288 DCHECK(value);
289 const size_t kMaxStringLength = 1024; // This is after expansion. 289 const size_t kMaxStringLength = 1024; // This is after expansion.
290 // Use the one of the other forms of ReadValue if 1024 is too small for you. 290 // Use the one of the other forms of ReadValue if 1024 is too small for you.
291 wchar_t raw_value[kMaxStringLength]; 291 wchar_t raw_value[kMaxStringLength];
292 DWORD type = REG_SZ, size = sizeof(raw_value); 292 DWORD type = REG_SZ, size = sizeof(raw_value);
293 if (ReadValue(name, raw_value, &size, &type)) { 293 if (ReadValue(name, raw_value, &size, &type)) {
294 if (type == REG_SZ) { 294 if (type == REG_SZ) {
295 *value = raw_value; 295 *value = raw_value;
296 } else if (type == REG_EXPAND_SZ) { 296 } else if (type == REG_EXPAND_SZ) {
297 wchar_t expanded[kMaxStringLength]; 297 wchar_t expanded[kMaxStringLength];
298 size = ExpandEnvironmentStrings(raw_value, expanded, kMaxStringLength); 298 size = ExpandEnvironmentStrings(raw_value, expanded, kMaxStringLength);
299 // Success: returns the number of wchar_t's copied 299 // Success: returns the number of wchar_t's copied
300 // Fail: buffer too small, returns the size required 300 // Fail: buffer too small, returns the size required
301 // Fail: other, returns 0 301 // Fail: other, returns 0
302 if (size == 0 || size > kMaxStringLength) 302 if (size == 0 || size > kMaxStringLength)
303 return false; 303 return false;
304 *value = expanded; 304 *value = expanded;
305 } else { 305 } else {
306 // Not a string. Oops. 306 // Not a string. Oops.
307 return false; 307 return false;
308 } 308 }
309 return true; 309 return true;
310 } 310 }
311 311
312 return false; 312 return false;
313 } 313 }
314 314
315 bool RegKey::ReadValueDW(const wchar_t* name, DWORD* value) { 315 bool RegKey::ReadValueDW(const wchar_t* name, DWORD* value) const {
316 DCHECK(value); 316 DCHECK(value);
317 DWORD type = REG_DWORD; 317 DWORD type = REG_DWORD;
318 DWORD size = sizeof(DWORD); 318 DWORD size = sizeof(DWORD);
319 DWORD result = 0; 319 DWORD result = 0;
320 if (ReadValue(name, &result, &size, &type) && 320 if (ReadValue(name, &result, &size, &type) &&
321 (type == REG_DWORD || type == REG_BINARY) && 321 (type == REG_DWORD || type == REG_BINARY) &&
322 size == sizeof(DWORD)) { 322 size == sizeof(DWORD)) {
323 *value = result; 323 *value = result;
324 return true; 324 return true;
325 } 325 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 if (WaitForSingleObject(watch_event_, 0) == WAIT_OBJECT_0) { 407 if (WaitForSingleObject(watch_event_, 0) == WAIT_OBJECT_0) {
408 StartWatching(); 408 StartWatching();
409 return true; 409 return true;
410 } 410 }
411 } 411 }
412 return false; 412 return false;
413 } 413 }
414 414
415 } // namespace win 415 } // namespace win
416 } // namespace base 416 } // namespace base
OLDNEW
« no previous file with comments | « base/win/registry.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698