* fbsd-proc.c (read_mapping): Use sscanf and fgets instead of
authorMark Kettenis <kettenis@gnu.org>
Fri, 7 Nov 2003 16:30:26 +0000 (16:30 +0000)
committerMark Kettenis <kettenis@gnu.org>
Fri, 7 Nov 2003 16:30:26 +0000 (16:30 +0000)
fscanf.

gdb/ChangeLog
gdb/fbsd-proc.c

index 259ac8a91413065cc33bf6b10ef4733aceada291..7f69024e5c024598cba543eac2e7f5d05b6c45bb 100644 (file)
@@ -1,3 +1,8 @@
+2003-11-07  Mark Kettenis  <kettenis@gnu.org>
+
+       * fbsd-proc.c (read_mapping): Use sscanf and fgets instead of
+       fscanf.
+
 2003-11-07  Mark Kettenis  <kettenis@gnu.org>
 
        * fbsd-proc.c: Fix formatting.
index 07272b19863b41203ec1385c19dfea58c94082db..16813a9a1c8a67ad51de36592a2e1fa84b6f4862 100644 (file)
@@ -52,20 +52,19 @@ static int
 read_mapping (FILE *mapfile, unsigned long *start, unsigned long *end,
              char *protection)
 {
+  /* FreeBSD 5.1-RELEASE uses a 256-byte buffer.  */
+  char buf[256];
   int resident, privateresident;
   unsigned long obj;
-  int ref_count, shadow_count;
-  unsigned flags;
-  char cow[5], access[4];
-  char type[8];
-  int ret;
-
-  /* The layout is described in /usr/src/miscfs/procfs/procfs_map.c.  */
-  ret = fscanf (mapfile, "%lx %lx %d %d %lx %s %d %d %x %s %s %s\n",
-               start, end,
-               &resident, &privateresident, &obj,
-               protection,
-               &ref_count, &shadow_count, &flags, cow, access, type);
+  int ret = EOF;
+
+  /* As of FreeBSD 5.0-RELEASE, the layout is described in
+     /usr/src/sys/fs/procfs/procfs_map.c.  Somewhere in 5.1-CURRENT a
+     new column was added to the procfs map.  Therefore we can't use
+     fscanf since we need to support older releases too.  */
+  if (fgets (buf, sizeof buf, mapfile) != NULL)
+    ret = sscanf (buf, "%lx %lx %d %d %lx %s", start, end,
+                 &resident, &privateresident, &obj, protection);
 
   return (ret != 0 && ret != EOF);
 }