diff options
author | Mark Kettenis <kettenis@gnu.org> | 2003-11-07 16:30:26 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2003-11-07 16:30:26 +0000 |
commit | 1763fba4a3d212192c2b37dbd016a4e91c952247 (patch) | |
tree | ddcc4557f323016f537bf36e32653bb6185662bc /gdb/fbsd-proc.c | |
parent | fc07cc2d45d7e610064fa280ab289d6ec2077bda (diff) | |
download | gdb-1763fba4a3d212192c2b37dbd016a4e91c952247.zip gdb-1763fba4a3d212192c2b37dbd016a4e91c952247.tar.gz gdb-1763fba4a3d212192c2b37dbd016a4e91c952247.tar.bz2 |
* fbsd-proc.c (read_mapping): Use sscanf and fgets instead of
fscanf.
Diffstat (limited to 'gdb/fbsd-proc.c')
-rw-r--r-- | gdb/fbsd-proc.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/gdb/fbsd-proc.c b/gdb/fbsd-proc.c index 07272b1..16813a9 100644 --- a/gdb/fbsd-proc.c +++ b/gdb/fbsd-proc.c @@ -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); } |