static mapinfo *load_maps(int pid) { char tmp[128]; FILE *fp; mapinfo *mi, *last, *ret; sprintf(tmp, "/proc/%d/maps", pid); fp = fopen(tmp, "r"); if(fp == 0) { LOGE("load_maps: unable to open maps file: %s", strerror(errno)); return NULL; } ret = NULL; last = NULL; mi = malloc(sizeof(mapinfo)); memset(mi, 0, sizeof(mapinfo)); while(!read_mapinfo(fp, mi)) { LOGD("load_maps: %"PRIxPTR" %s %s", mi->start, mi->perm, mi->name); mi->pid = pid; if (ret == NULL) ret = mi; if (last != NULL) last->next = mi; last = mi; mi = malloc(sizeof(mapinfo)); memset(mi, 0, sizeof(mapinfo)); } fclose(fp); free(mi); return ret; }
static void load_maps(int pid, stats_t* stats) { char tmp[128]; FILE *fp; sprintf(tmp, "/proc/%d/smaps", pid); fp = fopen(tmp, "r"); if (fp == 0) return; read_mapinfo(fp, stats); fclose(fp); }
static void load_maps(int pid, int *sharedPages, int *privatePages) { char tmp[128]; FILE *fp; sprintf(tmp, "/proc/%d/smaps", pid); fp = fopen(tmp, "r"); if (fp == 0) return; while (read_mapinfo(fp, sharedPages, privatePages) != 0) { // Do nothing } fclose(fp); }
mapinfo *load_maps(int pid, int verbose) { char tmp[128]; FILE *fp; mapinfo *milist = 0; mapinfo *mi; sprintf(tmp, "/proc/%d/smaps", pid); fp = fopen(tmp, "r"); if(fp == 0) return 0; while((mi = read_mapinfo(fp)) != 0) { /* if not verbose, coalesce mappings from the same entity */ if(!verbose && milist) { if((!strcmp(mi->name, milist->name) && (mi->name[0] != '[')) || !strcmp(mi->name,"[lib_bss]")) { milist->size += mi->size; milist->rss += mi->rss; milist->pss += mi->pss; milist->shared_clean += mi->shared_clean; milist->shared_dirty += mi->shared_dirty; milist->private_clean += mi->private_clean; milist->private_dirty += mi->private_dirty; milist->end = mi->end; free(mi); continue; } } mi->next = milist; milist = mi; } fclose(fp); return milist; }