2008-03-27 17:35:24

by Adrian Bunk

[permalink] [raw]
Subject: cifs_mount() contains strange code

This looks somehow fishy (note the "rc" settings):

<-- snip -->

...
int
cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
char *mount_data, const char *devname)
{
...
/* BB check if this works for exactly length
* three strings */
if ((strchr(volume_info.UNC + 3, '\\') == NULL)
&& (strchr(volume_info.UNC + 3, '/') ==
NULL)) {
rc = connect_to_dfs_path(xid, pSesInfo,
"", cifs_sb->local_nls,
cifs_sb->mnt_cifs_flags &
CIFS_MOUNT_MAP_SPECIAL_CHR);
rc = -ENODEV;
goto out;

<-- snip -->

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed


2008-03-27 21:54:18

by Dave Jones

[permalink] [raw]
Subject: Re: cifs_mount() contains strange code

On Thu, Mar 27, 2008 at 07:34:58PM +0200, Adrian Bunk wrote:
> This looks somehow fishy (note the "rc" settings):
>
> <-- snip -->
>
> ...
> int
> cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
> char *mount_data, const char *devname)
> {
> ...
> /* BB check if this works for exactly length
> * three strings */
> if ((strchr(volume_info.UNC + 3, '\\') == NULL)
> && (strchr(volume_info.UNC + 3, '/') ==
> NULL)) {
> rc = connect_to_dfs_path(xid, pSesInfo,
> "", cifs_sb->local_nls,
> cifs_sb->mnt_cifs_flags &
> CIFS_MOUNT_MAP_SPECIAL_CHR);
> rc = -ENODEV;
> goto out;
>
> <-- snip -->

I've noticed a bunch of things like that from time to time, and wondered
how useful it would be to have sparse warn on double assignments of variables
without a read inbetween.

Dave

--
http://www.codemonkey.org.uk