Commit 73c8f444 authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds

[PATCH] uml: libc-dependent code should call libc directly

We shouldn't be using the os wrappers from os code - we can use libc directly.
This patch replaces wrapper calls with libc calls.

It turns out that os_sigio_async had only one caller, which was in startup.c,
so that function is moved there and its name changed.
Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 9eae9b13
...@@ -137,7 +137,6 @@ extern int os_new_tty_pgrp(int fd, int pid); ...@@ -137,7 +137,6 @@ extern int os_new_tty_pgrp(int fd, int pid);
extern int os_get_ifname(int fd, char *namebuf); extern int os_get_ifname(int fd, char *namebuf);
extern int os_set_slip(int fd); extern int os_set_slip(int fd);
extern int os_set_owner(int fd, int pid); extern int os_set_owner(int fd, int pid);
extern int os_sigio_async(int master, int slave);
extern int os_mode_fd(int fd, int mode); extern int os_mode_fd(int fd, int mode);
extern int os_seek_file(int fd, __u64 offset); extern int os_seek_file(int fd, __u64 offset);
......
...@@ -162,25 +162,6 @@ int os_set_owner(int fd, int pid) ...@@ -162,25 +162,6 @@ int os_set_owner(int fd, int pid)
return 0; return 0;
} }
/* FIXME? moved wholesale from sigio_user.c to get fcntls out of that file */
int os_sigio_async(int master, int slave)
{
int flags;
flags = fcntl(master, F_GETFL);
if(flags < 0)
return -errno;
if((fcntl(master, F_SETFL, flags | O_NONBLOCK | O_ASYNC) < 0) ||
(fcntl(master, F_SETOWN, os_getpid()) < 0))
return -errno;
if((fcntl(slave, F_SETFL, flags | O_NONBLOCK) < 0))
return -errno;
return(0);
}
int os_mode_fd(int fd, int mode) int os_mode_fd(int fd, int mode)
{ {
int err; int err;
......
...@@ -54,7 +54,7 @@ static int ptrace_child(void *arg) ...@@ -54,7 +54,7 @@ static int ptrace_child(void *arg)
perror("ptrace"); perror("ptrace");
os_kill_process(pid, 0); os_kill_process(pid, 0);
} }
os_stop_process(pid); kill(pid, SIGSTOP);
/*This syscall will be intercepted by the parent. Don't call more than /*This syscall will be intercepted by the parent. Don't call more than
* once, please.*/ * once, please.*/
...@@ -417,7 +417,7 @@ static inline void check_skas3_ptrace_ldt(void) ...@@ -417,7 +417,7 @@ static inline void check_skas3_ptrace_ldt(void)
static inline void check_skas3_proc_mm(void) static inline void check_skas3_proc_mm(void)
{ {
printf(" - /proc/mm..."); printf(" - /proc/mm...");
if (os_access("/proc/mm", OS_ACC_W_OK) < 0) { if (access("/proc/mm", W_OK) < 0) {
proc_mm = 0; proc_mm = 0;
printf("not found\n"); printf("not found\n");
} }
...@@ -452,9 +452,9 @@ int can_do_skas(void) ...@@ -452,9 +452,9 @@ int can_do_skas(void)
int __init parse_iomem(char *str, int *add) int __init parse_iomem(char *str, int *add)
{ {
struct iomem_region *new; struct iomem_region *new;
struct uml_stat buf; struct stat64 buf;
char *file, *driver; char *file, *driver;
int fd, err, size; int fd, size;
driver = str; driver = str;
file = strchr(str,','); file = strchr(str,',');
...@@ -464,15 +464,14 @@ int __init parse_iomem(char *str, int *add) ...@@ -464,15 +464,14 @@ int __init parse_iomem(char *str, int *add)
} }
*file = '\0'; *file = '\0';
file++; file++;
fd = os_open_file(file, of_rdwr(OPENFLAGS()), 0); fd = open(file, O_RDWR, 0);
if(fd < 0){ if(fd < 0){
os_print_error(fd, "parse_iomem - Couldn't open io file"); os_print_error(fd, "parse_iomem - Couldn't open io file");
goto out; goto out;
} }
err = os_stat_fd(fd, &buf); if(fstat64(fd, &buf) < 0){
if(err < 0){ perror("parse_iomem - cannot stat_fd file");
os_print_error(err, "parse_iomem - cannot stat_fd file");
goto out_close; goto out_close;
} }
...@@ -482,7 +481,7 @@ int __init parse_iomem(char *str, int *add) ...@@ -482,7 +481,7 @@ int __init parse_iomem(char *str, int *add)
goto out_close; goto out_close;
} }
size = (buf.ust_size + UM_KERN_PAGE_SIZE) & ~(UM_KERN_PAGE_SIZE - 1); size = (buf.st_size + UM_KERN_PAGE_SIZE) & ~(UM_KERN_PAGE_SIZE - 1);
*new = ((struct iomem_region) { .next = iomem_regions, *new = ((struct iomem_region) { .next = iomem_regions,
.driver = driver, .driver = driver,
...@@ -495,7 +494,7 @@ int __init parse_iomem(char *str, int *add) ...@@ -495,7 +494,7 @@ int __init parse_iomem(char *str, int *add)
return 0; return 0;
out_close: out_close:
os_close_file(fd); close(fd);
out: out:
return 1; return 1;
} }
...@@ -528,6 +527,24 @@ static void openpty_cb(void *arg) ...@@ -528,6 +527,24 @@ static void openpty_cb(void *arg)
info->err = -errno; info->err = -errno;
} }
static int async_pty(int master, int slave)
{
int flags;
flags = fcntl(master, F_GETFL);
if(flags < 0)
return -errno;
if((fcntl(master, F_SETFL, flags | O_NONBLOCK | O_ASYNC) < 0) ||
(fcntl(master, F_SETOWN, os_getpid()) < 0))
return -errno;
if((fcntl(slave, F_SETFL, flags | O_NONBLOCK) < 0))
return -errno;
return(0);
}
static void __init check_one_sigio(void (*proc)(int, int)) static void __init check_one_sigio(void (*proc)(int, int))
{ {
struct sigaction old, new; struct sigaction old, new;
...@@ -553,7 +570,7 @@ static void __init check_one_sigio(void (*proc)(int, int)) ...@@ -553,7 +570,7 @@ static void __init check_one_sigio(void (*proc)(int, int))
if (err < 0) if (err < 0)
panic("check_sigio : __raw failed, errno = %d\n", -err); panic("check_sigio : __raw failed, errno = %d\n", -err);
err = os_sigio_async(master, slave); err = async_pty(master, slave);
if(err < 0) if(err < 0)
panic("tty_fds : sigio_async failed, err = %d\n", -err); panic("tty_fds : sigio_async failed, err = %d\n", -err);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment