Index: webrtc/base/linuxfdwalk.c |
diff --git a/webrtc/base/linuxfdwalk.c b/webrtc/base/linuxfdwalk.c |
deleted file mode 100644 |
index ae60cc524b445bed923384ab6e505b0ae59758fd..0000000000000000000000000000000000000000 |
--- a/webrtc/base/linuxfdwalk.c |
+++ /dev/null |
@@ -1,81 +0,0 @@ |
-/* |
- * Copyright 2004 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 <sys/types.h> |
-#include <dirent.h> |
-#include <errno.h> |
-#include <stdlib.h> |
-#include <string.h> |
- |
-#include "webrtc/base/linuxfdwalk.h" |
- |
-// Parses a file descriptor number in base 10, requiring the strict format used |
-// in /proc/*/fd. Returns the value, or -1 if not a valid string. |
-static int parse_fd(const char *s) { |
- if (!*s) { |
- // Empty string is invalid. |
- return -1; |
- } |
- int val = 0; |
- do { |
- if (*s < '0' || *s > '9') { |
- // Non-numeric characters anywhere are invalid. |
- return -1; |
- } |
- int digit = *s++ - '0'; |
- val = val * 10 + digit; |
- } while (*s); |
- return val; |
-} |
- |
-int fdwalk(void (*func)(void *, int), void *opaque) { |
- DIR *dir = opendir("/proc/self/fd"); |
- if (!dir) { |
- return -1; |
- } |
- int opendirfd = dirfd(dir); |
- int parse_errors = 0; |
- struct dirent *ent; |
- // Have to clear errno to distinguish readdir() completion from failure. |
- while (errno = 0, (ent = readdir(dir)) != NULL) { |
- if (strcmp(ent->d_name, ".") == 0 || |
- strcmp(ent->d_name, "..") == 0) { |
- continue; |
- } |
- // We avoid atoi or strtol because those are part of libc and they involve |
- // locale stuff, which is probably not safe from a post-fork context in a |
- // multi-threaded app. |
- int fd = parse_fd(ent->d_name); |
- if (fd < 0) { |
- parse_errors = 1; |
- continue; |
- } |
- if (fd != opendirfd) { |
- (*func)(opaque, fd); |
- } |
- } |
- int saved_errno = errno; |
- if (closedir(dir) < 0) { |
- if (!saved_errno) { |
- // Return the closedir error. |
- return -1; |
- } |
- // Else ignore it because we have a more relevant error to return. |
- } |
- if (saved_errno) { |
- errno = saved_errno; |
- return -1; |
- } else if (parse_errors) { |
- errno = EBADF; |
- return -1; |
- } else { |
- return 0; |
- } |
-} |