uml: userspace files should call libc directly

A number of files that were changed in the recent removal of tt mode
are userspace files which call the os_* wrappers instead of calling
libc directly.  A few other files were affected by this, through

This patch makes these call glibc directly.

There are also style fixes in the affected areas.

os_print_error has no remaining callers, so it is deleted.

There is a interface change to os_set_exec_close, eliminating a
parameter which was always the same.  The callers are fixed as well.

os_process_pc got its error path cleaned up.

Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Jeff Dike
2007-10-16 01:27:11 -07:00
committed by Linus Torvalds
parent b21d4b08b6
commit 512b6fb1c1
12 changed files with 138 additions and 121 deletions

View File

@@ -82,13 +82,6 @@ int os_access(const char* file, int mode)
return 0;
}
void os_print_error(int error, const char* str)
{
errno = error < 0 ? -error : error;
perror(str);
}
/* FIXME? required only by hostaudio (because it passes ioctls verbatim) */
int os_ioctl_generic(int fd, unsigned int cmd, unsigned long arg)
{
@@ -181,19 +174,19 @@ int os_file_mode(char *file, struct openflags *mode_out)
*mode_out = OPENFLAGS();
err = os_access(file, OS_ACC_W_OK);
if((err < 0) && (err != -EACCES))
return(err);
err = access(file, W_OK);
if(err && (errno != EACCES))
return -errno;
else if(!err)
*mode_out = of_write(*mode_out);
*mode_out = of_write(*mode_out);
err = access(file, R_OK);
if(err && (errno != EACCES))
return -errno;
else if(!err)
*mode_out = of_read(*mode_out);
err = os_access(file, OS_ACC_R_OK);
if((err < 0) && (err != -EACCES))
return(err);
*mode_out = of_read(*mode_out);
return(0);
return err;
}
int os_open_file(char *file, struct openflags flags, int mode)
@@ -212,15 +205,15 @@ int os_open_file(char *file, struct openflags flags, int mode)
fd = open64(file, f, mode);
if(fd < 0)
return(-errno);
return -errno;
if(flags.cl && fcntl(fd, F_SETFD, 1)){
err = -errno;
os_close_file(fd);
close(fd);
return err;
}
return(fd);
return fd;
}
int os_connect_socket(char *name)
@@ -292,31 +285,33 @@ int os_file_size(char *file, unsigned long long *size_out)
err = os_stat_file(file, &buf);
if(err < 0){
printk("Couldn't stat \"%s\" : err = %d\n", file, -err);
return(err);
return err;
}
if(S_ISBLK(buf.ust_mode)){
int fd;
long blocks;
fd = os_open_file(file, of_read(OPENFLAGS()), 0);
if(fd < 0){
printk("Couldn't open \"%s\", errno = %d\n", file, -fd);
return(fd);
fd = open(file, O_RDONLY, 0);
if(fd < 0) {
err = -errno;
printk("Couldn't open \"%s\", errno = %d\n", file,
errno);
return err;
}
if(ioctl(fd, BLKGETSIZE, &blocks) < 0){
err = -errno;
printk("Couldn't get the block size of \"%s\", "
"errno = %d\n", file, errno);
os_close_file(fd);
return(err);
close(fd);
return err;
}
*size_out = ((long long) blocks) * 512;
os_close_file(fd);
return(0);
close(fd);
}
*size_out = buf.ust_size;
return(0);
else *size_out = buf.ust_size;
return 0;
}
int os_file_modtime(char *file, unsigned long *modtime)
@@ -334,35 +329,28 @@ int os_file_modtime(char *file, unsigned long *modtime)
return 0;
}
int os_get_exec_close(int fd, int* close_on_exec)
int os_get_exec_close(int fd, int *close_on_exec)
{
int ret;
do {
ret = fcntl(fd, F_GETFD);
} while((ret < 0) && (errno == EINTR)) ;
CATCH_EINTR(ret = fcntl(fd, F_GETFD));
if(ret < 0)
return(-errno);
return -errno;
*close_on_exec = (ret&FD_CLOEXEC) ? 1 : 0;
return(ret);
*close_on_exec = (ret & FD_CLOEXEC) ? 1 : 0;
return ret;
}
int os_set_exec_close(int fd, int close_on_exec)
int os_set_exec_close(int fd)
{
int flag, err;
int err;
if(close_on_exec) flag = FD_CLOEXEC;
else flag = 0;
do {
err = fcntl(fd, F_SETFD, flag);
} while((err < 0) && (errno == EINTR)) ;
CATCH_EINTR(err = fcntl(fd, F_SETFD, FD_CLOEXEC));
if(err < 0)
return(-errno);
return(err);
return -errno;
return err;
}
int os_pipe(int *fds, int stream, int close_on_exec)
@@ -371,16 +359,16 @@ int os_pipe(int *fds, int stream, int close_on_exec)
err = socketpair(AF_UNIX, type, 0, fds);
if(err < 0)
return(-errno);
return -errno;
if(!close_on_exec)
return(0);
return 0;
err = os_set_exec_close(fds[0], 1);
err = os_set_exec_close(fds[0]);
if(err < 0)
goto error;
err = os_set_exec_close(fds[1], 1);
err = os_set_exec_close(fds[1]);
if(err < 0)
goto error;
@@ -388,9 +376,9 @@ int os_pipe(int *fds, int stream, int close_on_exec)
error:
printk("os_pipe : Setting FD_CLOEXEC failed, err = %d\n", -err);
os_close_file(fds[1]);
os_close_file(fds[0]);
return(err);
close(fds[1]);
close(fds[0]);
return err;
}
int os_set_fd_async(int fd, int owner)
@@ -537,7 +525,7 @@ int os_create_unix_socket(char *file, int len, int close_on_exec)
return -errno;
if(close_on_exec) {
err = os_set_exec_close(sock, 1);
err = os_set_exec_close(sock);
if(err < 0)
printk("create_unix_socket : close_on_exec failed, "
"err = %d", -err);