Reland 28629004: adding new AEC dump start interface for chrome.
This is required because we are not allow to pass CRT objects across dll boundaries, that says, when we pass a file descriptor from chrome dll to libpeerconnection dll, the file descriptor will become invalid immediate, more information can be found here:
http://msdn.microsoft.com/en-us/library/ms235460.aspx
R=andresp@webrtc.org, andrew@webrtc.org, bjornv@webrtc.org, henrike@webrtc.org, henrikg@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/30629004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@7418 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/base/BUILD.gn b/webrtc/base/BUILD.gn
index 3be8a3a..be53e40 100644
--- a/webrtc/base/BUILD.gn
+++ b/webrtc/base/BUILD.gn
@@ -111,6 +111,8 @@
"md5.cc",
"md5.h",
"md5digest.h",
+ "platform_file.cc",
+ "platform_file.h",
"stringencode.cc",
"stringencode.h",
"stringutils.cc",
diff --git a/webrtc/base/base.gyp b/webrtc/base/base.gyp
index 07f4c0b..569db74 100644
--- a/webrtc/base/base.gyp
+++ b/webrtc/base/base.gyp
@@ -46,6 +46,8 @@
'md5.cc',
'md5.h',
'md5digest.h',
+ 'platform_file.cc',
+ 'platform_file.h',
'stringencode.cc',
'stringencode.h',
'stringutils.cc',
diff --git a/webrtc/base/fileutils.cc b/webrtc/base/fileutils.cc
index 06d76d2..24375c9 100644
--- a/webrtc/base/fileutils.cc
+++ b/webrtc/base/fileutils.cc
@@ -10,13 +10,6 @@
#include <assert.h>
-#if defined(WEBRTC_WIN)
-// TODO(grunell): Remove io.h includes when Chromium has started
-// to use AEC in each source. http://crbug.com/264611.
-#include <io.h>
-#include "webrtc/base/win32.h"
-#endif
-
#include "webrtc/base/pathutils.h"
#include "webrtc/base/fileutils.h"
#include "webrtc/base/stringutils.h"
@@ -279,28 +272,4 @@
return true;
}
-// Taken from Chromium's base/platform_file_*.cc.
-// TODO(grunell): Remove when Chromium has started to use AEC in each source.
-// http://crbug.com/264611.
-FILE* FdopenPlatformFileForWriting(PlatformFile file) {
-#if defined(WEBRTC_WIN)
- if (file == kInvalidPlatformFileValue)
- return NULL;
- int fd = _open_osfhandle(reinterpret_cast<intptr_t>(file), 0);
- if (fd < 0)
- return NULL;
- return _fdopen(fd, "w");
-#else
- return fdopen(file, "w");
-#endif
-}
-
-bool ClosePlatformFile(PlatformFile file) {
-#if defined(WEBRTC_WIN)
- return CloseHandle(file) != 0;
-#else
- return close(file);
-#endif
-}
-
} // namespace rtc
diff --git a/webrtc/base/fileutils.h b/webrtc/base/fileutils.h
index 33ce457..9112952 100644
--- a/webrtc/base/fileutils.h
+++ b/webrtc/base/fileutils.h
@@ -13,9 +13,7 @@
#include <string>
-#if defined(WEBRTC_WIN)
-#include "webrtc/base/win32.h"
-#else
+#if !defined(WEBRTC_WIN)
#include <dirent.h>
#include <stdio.h>
#include <sys/stat.h>
@@ -25,6 +23,7 @@
#include "webrtc/base/basictypes.h"
#include "webrtc/base/common.h"
+#include "webrtc/base/platform_file.h"
#include "webrtc/base/scoped_ptr.h"
namespace rtc {
@@ -436,24 +435,6 @@
// process).
bool CreateUniqueFile(Pathname& path, bool create_empty);
-// Taken from Chromium's base/platform_file.h.
-// Don't use ClosePlatformFile to close a file opened with FdopenPlatformFile.
-// Use fclose instead.
-// TODO(grunell): Remove when Chromium has started to use AEC in each source.
-// http://crbug.com/264611.
-#if defined(WEBRTC_WIN)
-typedef HANDLE PlatformFile;
-const PlatformFile kInvalidPlatformFileValue = INVALID_HANDLE_VALUE;
-#elif defined(WEBRTC_POSIX)
-typedef int PlatformFile;
-const PlatformFile kInvalidPlatformFileValue = -1;
-#else
-#error Unsupported platform
-#endif
-
-FILE* FdopenPlatformFileForWriting(PlatformFile file);
-bool ClosePlatformFile(PlatformFile file);
-
} // namespace rtc
#endif // WEBRTC_BASE_FILEUTILS_H_
diff --git a/webrtc/base/platform_file.cc b/webrtc/base/platform_file.cc
new file mode 100644
index 0000000..d518b74
--- /dev/null
+++ b/webrtc/base/platform_file.cc
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2014 The WebRTC Project Authors. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "webrtc/base/platform_file.h"
+
+#if defined(WEBRTC_WIN)
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+namespace rtc {
+
+#if defined(WEBRTC_WIN)
+const PlatformFile kInvalidPlatformFileValue = INVALID_HANDLE_VALUE;
+
+FILE* FdopenPlatformFileForWriting(PlatformFile file) {
+ if (file == kInvalidPlatformFileValue)
+ return NULL;
+ int fd = _open_osfhandle(reinterpret_cast<intptr_t>(file), 0);
+ if (fd < 0)
+ return NULL;
+
+ return _fdopen(fd, "w");
+}
+
+bool ClosePlatformFile(PlatformFile file) {
+ return CloseHandle(file) != 0;
+}
+#else
+const PlatformFile kInvalidPlatformFileValue = -1;
+
+FILE* FdopenPlatformFileForWriting(PlatformFile file) {
+ return fdopen(file, "w");
+}
+
+bool ClosePlatformFile(PlatformFile file) {
+ return close(file);
+}
+#endif
+
+} // namespace rtc
diff --git a/webrtc/base/platform_file.h b/webrtc/base/platform_file.h
new file mode 100644
index 0000000..12e08e9
--- /dev/null
+++ b/webrtc/base/platform_file.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2014 The WebRTC Project Authors. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef WEBRTC_BASE_PLATFORM_FILE_H_
+#define WEBRTC_BASE_PLATFORM_FILE_H_
+
+#include <stdio.h>
+
+#if defined(WEBRTC_WIN)
+#include <windows.h>
+#endif
+
+namespace rtc {
+
+#if defined(WEBRTC_WIN)
+typedef HANDLE PlatformFile;
+#elif defined(WEBRTC_POSIX)
+typedef int PlatformFile;
+#else
+#error Unsupported platform
+#endif
+
+extern const PlatformFile kInvalidPlatformFileValue;
+
+// Associates a standard FILE stream with an existing PlatformFile.
+// Note that after this function has returned a valid FILE stream,
+// the PlatformFile should no longer be used.
+FILE* FdopenPlatformFileForWriting(PlatformFile file);
+
+// Closes a PlatformFile.
+// Don't use ClosePlatformFile to close a file opened with FdopenPlatformFile.
+// Use fclose instead.
+bool ClosePlatformFile(PlatformFile file);
+
+} // namespace rtc
+
+#endif // WEBRTC_BASE_PLATFORM_FILE_H_