#define DETL "31" /* for format strings */
#define NUM_LENGTH 21 /* python says: len(str(2**64)) == 20 */
#define NUML "20" /* for format strings */
+#define VMFLAGS_LENGTH 81 /* There are 27 posible 2 character vmflags
+ as of this patch */
struct listnode {
char description[DETAIL_LENGTH];
detail_desc[DETAIL_LENGTH], value_str[NUM_LENGTH],
start[NUM_LENGTH], end[NUM_LENGTH],
offset[NUM_LENGTH], inode[NUM_LENGTH],
- dev[64], fmt_str[64];
- int maxw1=0, maxw2=0, maxw3=0, maxw4=0, maxw5=0;
+ dev[64], fmt_str[64],
+ vmflags[VMFLAGS_LENGTH];
+ int maxw1=0, maxw2=0, maxw3=0, maxw4=0, maxw5=0, maxwv=0;
int nfields, firstmapping, footer_gap, i;
unsigned KLONG value;
char *ret;
char c;
+ char has_vmflags = 0;
ret = fgets(mapbuf, sizeof mapbuf, f);
firstmapping = 1;
nfields = sscanf(mapbuf, "%"DETL"[^:]: %"NUML"[0-9] kB %c",
detail_desc, value_str, &c);
}
+
+ /* === GET VMFLAGS === */
+ nfields = sscanf(mapbuf, "VmFlags: %[a-z ]", vmflags);
+ if (nfields == 1) {
+ if (! has_vmflags) has_vmflags = 1;
+ ret = fgets(mapbuf, sizeof mapbuf, f);
+ if (strlen(vmflags) > maxwv) maxwv = strlen(vmflags);
+ }
+
/* === PRINT THIS MAPPING === */
/* Print header */
if (firstmapping && !q_option) {
if (strlen("Offset") > maxw3) maxw3 = strlen("Offset");
if (strlen("Device") > maxw4) maxw4 = strlen("Device");
if (strlen("Inode") > maxw5) maxw5 = strlen("Inode");
+ if (has_vmflags && strlen("VmFlags") > maxwv) maxwv = strlen("VmFlags");
sprintf(fmt_str, "%%%ds %%%ds %%%ds %%%ds %%%ds",
maxw1, maxw2, maxw3, maxw4, maxw5);
printf(fmt_str, "Address", "Flags", "Offset", "Device", "Inode");
sprintf(fmt_str, " %%%ds", listnode->max_width);
printf(fmt_str, listnode->description);
}
+
+ if (has_vmflags) {
+ sprintf(fmt_str, " %%%ds", maxwv);
+ printf(fmt_str, "VmFlags");
+ }
+
printf(" %s\n", "Description");
}
/* Print data */
sprintf(fmt_str, " %%%ds", listnode->max_width);
printf(fmt_str, listnode->value_str);
}
+
+ if (has_vmflags) {
+ sprintf(fmt_str, " %%%ds", maxwv);
+ printf(fmt_str, vmflags);
+ }
+
printf(" %s\n", map_desc);
firstmapping = 0;