svn commit: r187396 - head/sys/gnu/fs/ext2fs

Bruce Evans brde at optusnet.com.au
Mon Jan 19 00:49:02 PST 2009


On Sun, 18 Jan 2009, Stanislav Sedov wrote:

> Log:
>  - Whitespace fixes.

svn diff or a mailer always mangles whitespace (examples quoted below),
so the whitespace fixes are hard to see in svn mail

>  - s_bmask field doesn't exist.
>  - Use correct flags in debug printf.

The flags are more broken than before, fatally so on 64-bit arches if the
code were actually used.

> Modified:
>  head/sys/gnu/fs/ext2fs/ext2_vfsops.c
>
> Modified: head/sys/gnu/fs/ext2fs/ext2_vfsops.c
> ==============================================================================
> --- head/sys/gnu/fs/ext2fs/ext2_vfsops.c	Sun Jan 18 14:04:56 2009	(r187395)
> +++ head/sys/gnu/fs/ext2fs/ext2_vfsops.c	Sun Jan 18 14:54:46 2009	(r187396)
> @@ -5,7 +5,7 @@
>  *  University of Utah, Department of Computer Science
>  */
> /*-
> - * Copyright (c) 1989, 1991, 1993, 1994
> + * Copyright (c) 1989, 1991, 1993, 1994
>  *	The Regents of the University of California.  All rights reserved.
>  *
>  * Redistribution and use in source and binary forms, with or without
> @@ -120,7 +120,7 @@ static int	compute_sb_data(struct vnode
> static const char *ext2_opts[] = { "from", "export", "acls", "noexec",
>     "noatime", "union", "suiddir", "multilabel", "nosymfollow",
>     "noclusterr", "noclusterw", "force", NULL };
> -
> +

The above diff shows null changes, presumably after dropping trailing
whitespace in the old version.

Oops, actually the diff is invalid since something dropped the leading
space in unchanged lines.

> @@ -318,7 +318,7 @@ static int ext2_check_descriptors (struc
>         {
> 		/* examine next descriptor block */
>                 if ((i % EXT2_DESC_PER_BLOCK(sb)) == 0)
> -                        gdp = (struct ext2_group_desc *)
> +                        gdp = (struct ext2_group_desc *)
> 				sb->s_group_desc[desc_block++]->b_data;
>                 if (gdp->bg_block_bitmap < block ||
>                     gdp->bg_block_bitmap >= block + EXT2_BLOCKS_PER_GROUP(sb))

Here most leading tabs are corrupt in both the new and old versions.  Please
fix all whitespace on a line if fixing any.

> @@ -398,19 +398,19 @@ static int compute_sb_data(devvp, es, fs
>     int logic_sb_block = 1;	/* XXX for now */
>
> #if 1
> -#define V(v)
> +#define V(v)
> #else
> #define V(v)  printf(#v"= %d\n", fs->v);
> #endif

The existence of this macro is a bug, since it can only work for one type,
but fields of different type need to be printed.  Most fields don't have
type int (the first one printed is s_blocksize which (especially bogusly
on 64-bit machines) has type u_long, so the non-'#if 1' case would cause
lots of errors.

> @@ -1000,7 +1000,7 @@ ext2_vget(mp, ino, flags, vpp)
>
> 	/* Read in the disk contents for the inode, copy into the inode. */
> #if 0
> -printf("ext2_vget(%d) dbn= %d ", ino, fsbtodb(fs, ino_to_fsba(fs, ino)));
> +printf("ext2_vget(%d) dbn= %lu ", ino, fsbtodb(fs, ino_to_fsba(fs, ino)));
> #endif
> 	if ((error = bread(ump->um_devvp, fsbtodb(fs, ino_to_fsba(fs, ino)),
> 	    (int)fs->s_blocksize, NOCRED, &bp)) != 0) {

ino has type ino_t, so it cannot be printed portably without using a
cast.  Its actual type is uint32_t.  If this code were actually, this
would give the following printf format errors on various supported
machines:

old: sign mismatch only, since plain int happens to have the same size as
      ino_t on all supported machines.  gcc doesn't even warn about this
      error, so this error would be non-fatal

new: now a size mismatch on machines with 64-bit longs (amd64, ia64, sparc64
      at least.  gcc warns about this error, so the code is now fatally
      broken on many supported machines, except it is never actually used.

Bruce


More information about the svn-src-head mailing list