2004-10-14 03:24:56

by Eshwar

[permalink] [raw]
Subject: Re: Write USB Device Driver entry not called

I agree but the return value from the vfs_write should not be the -EBADF
(Bad File descriptor) it might be -EACCES (premission denied)... Correct me
if I am wrong...

this can be code in fs/read_write.c vfs_write()

if (!(file->f_mode & FMODE_WRITE))
return -EACCES;

Eshwar

----- Original Message -----
From: "Alan Cox" <[email protected]>
To: "eshwar" <[email protected]>
Cc: "Raj" <[email protected]>; "Linux Kernel Mailing List"
<[email protected]>
Sent: Wednesday, October 13, 2004 4:07 PM
Subject: Re: Write USB Device Driver entry not called


> On Iau, 2004-10-21 at 18:52, eshwar wrote:
> > Open is sucessfull.... I don't think the problem the flags of open
>
> I do. See any book on C/Unix style file opening. For an existing file
> you want
> open("foo", O_flags)
>
> for a new file possibly
>
> open("foo", O_CREAT|o_flags, S_Iblah)
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/


2004-10-14 03:39:39

by Raj

[permalink] [raw]
Subject: Re: Write USB Device Driver entry not called

On Sat, 23 Oct 2004 07:12:56 +0530, eshwar <[email protected]> wrote:
> I agree but the return value from the vfs_write should not be the -EBADF
> (Bad File descriptor) it might be -EACCES (premission denied)... Correct me
> if I am wrong...
>
> this can be code in fs/read_write.c vfs_write()
>
> if (!(file->f_mode & FMODE_WRITE))
> return -EACCES;

Wrong. You are confused between file perms & mode of access to files.
If you cannot open a file due to insufficient perms, then EACCESS is
what you get.
If you opened a file for reading, but you tried to write, the you get a EBADF.

Run the following code, after you create two files, 'foo' ( perms 0400
) and 'bar' ( 0700 ).

#include <fcntl.h>

int main()
{
int fd;

fd = open("foo",O_WRONLY);

if(fd < 0)
perror("Opening foo:");
else
close (fd);

fd = open("bar",O_RDONLY);

if(fd < 0)
perror("Opening bar: ");
else {
if(write(fd,'a',1) < 0)
perror("Write to bar failed: ");
close(fd);
}

}

Output would be:
Opening foo:: Permission denied
Write to bar failed: : Bad file descriptor
--
######
raj
######