summaryrefslogtreecommitdiffstats
path: root/winsup/utils/pldd.c
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/utils/pldd.c')
-rw-r--r--winsup/utils/pldd.c145
1 files changed, 0 insertions, 145 deletions
diff --git a/winsup/utils/pldd.c b/winsup/utils/pldd.c
deleted file mode 100644
index ea99a8bac..000000000
--- a/winsup/utils/pldd.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* pldd.c
-
- Copyright 2012 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#define WIN32_LEAN_AND_MEAN
-#define UNICODE
-#include <errno.h>
-#include <error.h>
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/cygwin.h>
-#include <cygwin/version.h>
-#include <windows.h>
-#include <psapi.h>
-
-struct option longopts[] =
-{
- {"help", no_argument, NULL, '?'},
- {"version", no_argument, NULL, 'V'},
- {"usage", no_argument, NULL, 0},
- {0, no_argument, NULL, 0}
-};
-const char *opts = "?V";
-
-__attribute__((noreturn))
-static void
-print_help (void)
-{
- printf ("Usage: pldd [OPTION...] PID\n\n"
- "List dynamic shared objects loaded into a process.\n\n"
- " -?, --help Give this help list\n"
- " --usage Give a short usage message\n"
- " -V, --version Print program version\n");
- exit (EXIT_SUCCESS);
-}
-
-__attribute__((noreturn))
-static void
-print_usage (void)
-{
- printf ("Usage: pldd [-?V] [--help] [--usage] [--version] PID\n");
- exit (EXIT_SUCCESS);
-}
-
-__attribute__((noreturn))
-static void
-print_version ()
-{
- printf ("pldd (cygwin) %d.%d.%d\n"
- "List dynamic shared objects loaded into process.\n"
- "Copyright (C) 2012 Red Hat, Inc.\n\n"
- "This program comes with NO WARRANTY, to the extent permitted by law.\n"
- "You may redistribute copies of this program under the terms of\n"
- "the Cygwin license. Please consult the CYGWIN_LICENSE file for details.\n",
- CYGWIN_VERSION_DLL_MAJOR / 1000,
- CYGWIN_VERSION_DLL_MAJOR % 1000,
- CYGWIN_VERSION_DLL_MINOR);
- exit (EXIT_SUCCESS);
-}
-
-__attribute__((noreturn))
-static void
-print_nargs (void)
-{
- fprintf (stderr, "Exactly one parameter with process ID required.\n"
- "Try `pldd --help' or `pldd --usage' for more information.\n");
- exit (EXIT_FAILURE);
-}
-
-int
-main (int argc, char *argv[])
-{
- int optch, pid, winpid, i;
- char *pidfile, *exefile, *exename;
- FILE *fd;
- HANDLE hProcess;
- HMODULE hModules[1024];
- DWORD cbModules;
-
- while ((optch = getopt_long (argc, argv, opts, longopts, &optind)) != -1)
- switch (optch)
- {
- case '?':
- print_help ();
- break;
- case 'V':
- print_version ();
- break;
- case 0:
- if (strcmp ("usage", longopts[optind].name) == 0)
- print_usage ();
- break;
- default:
- break;
- }
-
- argc -= optind;
- argv += optind;
- if (argc != 1)
- print_nargs ();
-
- pid = atoi (argv[0]);
-
- if ((pid == 0))
- error (1, 0, "invalid process ID '%s'", argv[0]);
-
- pidfile = (char *) malloc (32);
- sprintf (pidfile, "/proc/%d/winpid", pid);
- fd = fopen (pidfile, "rb");
- if (!fd)
- error (1, ENOENT, "cannot open /proc/%d", pid);
- fscanf (fd, "%d", &winpid);
-
- exefile = (char *) malloc (32);
- exename = (char *) malloc (MAX_PATH);
- sprintf (exefile, "/proc/%d/exename", pid);
- fd = fopen (exefile, "rb");
- fscanf (fd, "%s", exename);
-
- hProcess = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, winpid);
- if (!hProcess)
- error (1, EPERM, "cannot attach to process %d", pid);
-
- printf ("%d:\t%s\n", pid, exename);
-
- EnumProcessModules (hProcess, hModules, sizeof (hModules), &cbModules);
- /* start at 1 to skip the executable itself */
- for (i = 1; i < (cbModules / sizeof (HMODULE)); i++)
- {
- TCHAR winname[MAX_PATH];
- char posixname[MAX_PATH];
- GetModuleFileNameEx (hProcess, hModules[i], winname, MAX_PATH);
- cygwin_conv_path (CCP_WIN_W_TO_POSIX, winname, posixname, MAX_PATH);
- printf ("%s\n", posixname);
- }
-
- return 0;
-}