summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--pmap.c9
2 files changed, 8 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 2209e61..f1bdf4a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
procps-ng-NEXT
* library
Re-add elogind support merge #151
+ * pmap: Dont reuse stdin filehandle issue #231
* ps: threads again display when -L is used with -q issue #234
* ps: proper aix format string behavior was restored
* sysctl: print dotted keys again
diff --git a/pmap.c b/pmap.c
index 1e20fe0..d4fe4c0 100644
--- a/pmap.c
+++ b/pmap.c
@@ -158,21 +158,25 @@ static void discover_shm_minor(void)
void *addr;
int shmid;
char mapbuf_b[256];
+ FILE *fp;
- if (!freopen("/proc/self/maps", "r", stdin))
+ if ( (fp = fopen("/proc/self/maps", "r")) == NULL)
return;
/* create */
shmid = shmget(IPC_PRIVATE, 42, IPC_CREAT | 0666);
if (shmid == -1)
+ {
/* failed; oh well */
+ fclose(fp);
return;
+ }
/* attach */
addr = shmat(shmid, NULL, SHM_RDONLY);
if (addr == (void *)-1)
goto out_destroy;
- while (fgets(mapbuf_b, sizeof mapbuf_b, stdin)) {
+ while (fgets(mapbuf_b, sizeof mapbuf_b, fp)) {
char perms[32];
/* to clean up unprintables */
char *tmp;
@@ -207,6 +211,7 @@ static void discover_shm_minor(void)
perror(_("shared memory detach"));
out_destroy:
+ fclose(fp);
if (shmctl(shmid, IPC_RMID, NULL) && errno != EINVAL)
perror(_("shared memory remove"));