- FILE *fp; /* File pointer to process's proc maps file */
- char *line = NULL; /* Temporal storage for each line that is readed */
- ssize_t read; /* Number of bytes readed */
- size_t n = 0; /* Amount of bytes to read by getline */
- memory_map_t ret = NULL; /* The memory map to return */
-
-/* The following variables are used during the parsing of the file "maps" */
- s_map_region memreg; /* temporal map region used for creating the map */
- char *lfields[6], *tok, *endptr;
- int i;
-
-/* Open the actual process's proc maps file and create the memory_map_t */
-/* to be returned. */
- fp = fopen("/proc/self/maps","r");
-
- if(!fp)
- xbt_abort();
-
- ret = xbt_new0(s_memory_map_t,1);
-
- /* Read one line at the time, parse it and add it to the memory map to be returned */
- while((read = getline(&line, &n, fp)) != -1) {
+ /* Open the actual process's proc maps file and create the memory_map_t */
+ /* to be returned. */
+ char* path = bprintf("/proc/%i/maps", (int) pid);
+ FILE *fp = fopen(path, "r");
+ free(path);
+ if(fp == NULL)
+ perror("fopen failed");
+ xbt_assert(fp,
+ "Cannot open %s to investigate the memory map of the process.", path);
+ setbuf(fp, NULL);
+
+ memory_map_t ret = xbt_new0(s_memory_map_t, 1);
+
+ /* Read one line at the time, parse it and add it to the memory map to be returned */
+ ssize_t read; /* Number of bytes readed */
+ char* line = NULL;
+ size_t n = 0; /* Amount of bytes to read by xbt_getline */
+ while ((read = xbt_getline(&line, &n, fp)) != -1) {
+
+ //fprintf(stderr,"%s", line);