ceph/src/common/fd.cc
Lucian Petrut 61227dfbaf common: stub certain modules and functions on Windows
We're going to stub certain modules and functions for Windows builds.
Some of them will be implemented in subsequent commits, some are platform
specific and will be skipped.

Modules:
* module.c
* subprocess.cc
* blkdev.cc
* dns_resolve.cc
* numa.cc
* syslog.h
* statvfs.h
* libblk
* neorados

Functions:
x signal functions
x fork
x chown
* socketpair_cloexec
* dump_open_fds
* run_cmd
* is_symlink
* CInode::d_type
* nbd commands

Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
2020-06-04 15:52:16 +00:00

60 lines
1.4 KiB
C++

// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
*
* Copyright (C) 2004-2012 Inktank
*
* This is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software
* Foundation. See file COPYING.
*
*/
#include "include/compat.h"
#include "debug.h"
#include "errno.h"
#ifndef _WIN32
void dump_open_fds(CephContext *cct)
{
#ifdef __APPLE__
const char *fn = "/dev/fd";
#else
const char *fn = PROCPREFIX "/proc/self/fd";
#endif
DIR *d = opendir(fn);
if (!d) {
lderr(cct) << "dump_open_fds unable to open " << fn << dendl;
return;
}
struct dirent *de = nullptr;
int n = 0;
while ((de = ::readdir(d))) {
if (de->d_name[0] == '.')
continue;
char path[PATH_MAX];
snprintf(path, sizeof(path), "%s/%s", fn, de->d_name);
char target[PATH_MAX];
ssize_t r = readlink(path, target, sizeof(target) - 1);
if (r < 0) {
r = -errno;
lderr(cct) << "dump_open_fds unable to readlink " << path << ": " << cpp_strerror(r) << dendl;
continue;
}
target[r] = 0;
lderr(cct) << "dump_open_fds " << de->d_name << " -> " << target << dendl;
n++;
}
lderr(cct) << "dump_open_fds dumped " << n << " open files" << dendl;
closedir(d);
}
#else
void dump_open_fds(CephContext *cct)
{
}
#endif