blob: 4b461391a7485b7d1d2d6a339c2027c5d89a1a77 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "sync/util/get_session_name_mac.h"
#import <Foundation/Foundation.h>
#import <SystemConfiguration/SCDynamicStoreCopySpecific.h>
#include <sys/sysctl.h> // sysctlbyname()
#include "base/mac/foundation_util.h"
#include "base/mac/mac_util.h"
#include "base/memory/scoped_nsobject.h"
#include "base/string_util.h"
#include "base/sys_info.h"
#include "base/sys_string_conversions.h"
@interface NSHost(SnowLeopardAPI)
- (NSString*)localizedName;
namespace browser_sync {
namespace internal {
std::string GetHardwareModelName() {
NSHost* myHost = [NSHost currentHost];
if ([myHost respondsToSelector:@selector(localizedName)])
return base::SysNSStringToUTF8([myHost localizedName]);
// Fallback for 10.5
scoped_nsobject<NSString> computerName(base::mac::CFToNSCast(
SCDynamicStoreCopyComputerName(NULL, NULL)));
if (computerName.get() != NULL)
return base::SysNSStringToUTF8(computerName.get());
// If all else fails, return to using a slightly nicer version of the
// hardware model.
char modelBuffer[256];
size_t length = sizeof(modelBuffer);
if (!sysctlbyname("hw.model", modelBuffer, &length, NULL, 0)) {
for (size_t i = 0; i < length; i++) {
if (IsAsciiDigit(modelBuffer[i]))
return std::string(modelBuffer, 0, i);
return std::string(modelBuffer, 0, length);
return "Unknown";
} // namespace internal
} // namespace browser_sync