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

Side by Side Diff: webrtc/base/macutils.cc

Issue 2877023002: Move webrtc/{base => rtc_base} (Closed)
Patch Set: update presubmit.py and DEPS include rules Created 3 years, 5 months 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
« no previous file with comments | « webrtc/base/macutils.h ('k') | webrtc/base/macutils_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2007 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include <cstring>
12 #include <memory>
13 #include <sstream>
14
15 #include <sys/utsname.h>
16
17 #include "webrtc/base/checks.h"
18 #include "webrtc/base/logging.h"
19 #include "webrtc/base/macutils.h"
20 #include "webrtc/base/stringutils.h"
21
22 namespace rtc {
23
24 ///////////////////////////////////////////////////////////////////////////////
25
26 bool ToUtf8(const CFStringRef str16, std::string* str8) {
27 if ((nullptr == str16) || (nullptr == str8)) {
28 return false;
29 }
30 size_t maxlen = CFStringGetMaximumSizeForEncoding(CFStringGetLength(str16),
31 kCFStringEncodingUTF8) + 1;
32 std::unique_ptr<char[]> buffer(new char[maxlen]);
33 if (!buffer || !CFStringGetCString(str16, buffer.get(), maxlen,
34 kCFStringEncodingUTF8)) {
35 return false;
36 }
37 str8->assign(buffer.get());
38 return true;
39 }
40
41 bool ToUtf16(const std::string& str8, CFStringRef* str16) {
42 if (nullptr == str16) {
43 return false;
44 }
45 *str16 = CFStringCreateWithBytes(kCFAllocatorDefault,
46 reinterpret_cast<const UInt8*>(str8.data()),
47 str8.length(), kCFStringEncodingUTF8,
48 false);
49 return nullptr != *str16;
50 }
51
52 void DecodeFourChar(UInt32 fc, std::string* out) {
53 std::stringstream ss;
54 ss << '\'';
55 bool printable = true;
56 for (int i = 3; i >= 0; --i) {
57 char ch = (fc >> (8 * i)) & 0xFF;
58 if (isprint(static_cast<unsigned char>(ch))) {
59 ss << ch;
60 } else {
61 printable = false;
62 break;
63 }
64 }
65 if (printable) {
66 ss << '\'';
67 } else {
68 ss.str("");
69 ss << "0x" << std::hex << fc;
70 }
71 out->append(ss.str());
72 }
73
74 static bool GetOSVersion(int* major, int* minor, int* bugfix) {
75 RTC_DCHECK(major && minor && bugfix);
76 struct utsname uname_info;
77 if (uname(&uname_info) != 0)
78 return false;
79
80 if (strcmp(uname_info.sysname, "Darwin") != 0)
81 return false;
82 *major = 10;
83
84 // The market version of macOS is always 4 lower than the internal version.
85 int minor_version = atoi(uname_info.release);
86 RTC_CHECK(minor_version >= 6);
87 *minor = minor_version - 4;
88
89 const char* dot = ::strchr(uname_info.release, '.');
90 if (!dot)
91 return false;
92 *bugfix = atoi(dot + 1);
93 return true;
94 }
95
96 MacOSVersionName GetOSVersionName() {
97 int major = 0, minor = 0, bugfix = 0;
98 if (!GetOSVersion(&major, &minor, &bugfix)) {
99 return kMacOSUnknown;
100 }
101 if (major > 10) {
102 return kMacOSNewer;
103 }
104 if ((major < 10) || (minor < 3)) {
105 return kMacOSOlder;
106 }
107 switch (minor) {
108 case 3:
109 return kMacOSPanther;
110 case 4:
111 return kMacOSTiger;
112 case 5:
113 return kMacOSLeopard;
114 case 6:
115 return kMacOSSnowLeopard;
116 case 7:
117 return kMacOSLion;
118 case 8:
119 return kMacOSMountainLion;
120 case 9:
121 return kMacOSMavericks;
122 }
123 return kMacOSNewer;
124 }
125 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/macutils.h ('k') | webrtc/base/macutils_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698