diff options
author | Jeff Dike <jdike@addtoit.com> | 2007-02-10 04:44:20 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-11 13:51:23 -0500 |
commit | 73c8f4441f07dd3b9d198ec0e97ce83138a6224c (patch) | |
tree | 88af71fd8d091cab9c8f05994202221f9f42e2d4 /arch/um/os-Linux/start_up.c | |
parent | 9eae9b132cd2cebf98cc45550049d421302b9aba (diff) |
[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: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/um/os-Linux/start_up.c')
-rw-r--r-- | arch/um/os-Linux/start_up.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/arch/um/os-Linux/start_up.c b/arch/um/os-Linux/start_up.c index 537084fd834f..735d035a7f33 100644 --- a/arch/um/os-Linux/start_up.c +++ b/arch/um/os-Linux/start_up.c | |||
@@ -54,7 +54,7 @@ static int ptrace_child(void *arg) | |||
54 | perror("ptrace"); | 54 | perror("ptrace"); |
55 | os_kill_process(pid, 0); | 55 | os_kill_process(pid, 0); |
56 | } | 56 | } |
57 | os_stop_process(pid); | 57 | kill(pid, SIGSTOP); |
58 | 58 | ||
59 | /*This syscall will be intercepted by the parent. Don't call more than | 59 | /*This syscall will be intercepted by the parent. Don't call more than |
60 | * once, please.*/ | 60 | * once, please.*/ |
@@ -417,7 +417,7 @@ static inline void check_skas3_ptrace_ldt(void) | |||
417 | static inline void check_skas3_proc_mm(void) | 417 | static inline void check_skas3_proc_mm(void) |
418 | { | 418 | { |
419 | printf(" - /proc/mm..."); | 419 | printf(" - /proc/mm..."); |
420 | if (os_access("/proc/mm", OS_ACC_W_OK) < 0) { | 420 | if (access("/proc/mm", W_OK) < 0) { |
421 | proc_mm = 0; | 421 | proc_mm = 0; |
422 | printf("not found\n"); | 422 | printf("not found\n"); |
423 | } | 423 | } |
@@ -452,9 +452,9 @@ int can_do_skas(void) | |||
452 | int __init parse_iomem(char *str, int *add) | 452 | int __init parse_iomem(char *str, int *add) |
453 | { | 453 | { |
454 | struct iomem_region *new; | 454 | struct iomem_region *new; |
455 | struct uml_stat buf; | 455 | struct stat64 buf; |
456 | char *file, *driver; | 456 | char *file, *driver; |
457 | int fd, err, size; | 457 | int fd, size; |
458 | 458 | ||
459 | driver = str; | 459 | driver = str; |
460 | file = strchr(str,','); | 460 | file = strchr(str,','); |
@@ -464,15 +464,14 @@ int __init parse_iomem(char *str, int *add) | |||
464 | } | 464 | } |
465 | *file = '\0'; | 465 | *file = '\0'; |
466 | file++; | 466 | file++; |
467 | fd = os_open_file(file, of_rdwr(OPENFLAGS()), 0); | 467 | fd = open(file, O_RDWR, 0); |
468 | if(fd < 0){ | 468 | if(fd < 0){ |
469 | os_print_error(fd, "parse_iomem - Couldn't open io file"); | 469 | os_print_error(fd, "parse_iomem - Couldn't open io file"); |
470 | goto out; | 470 | goto out; |
471 | } | 471 | } |
472 | 472 | ||
473 | err = os_stat_fd(fd, &buf); | 473 | if(fstat64(fd, &buf) < 0){ |
474 | if(err < 0){ | 474 | perror("parse_iomem - cannot stat_fd file"); |
475 | os_print_error(err, "parse_iomem - cannot stat_fd file"); | ||
476 | goto out_close; | 475 | goto out_close; |
477 | } | 476 | } |
478 | 477 | ||
@@ -482,7 +481,7 @@ int __init parse_iomem(char *str, int *add) | |||
482 | goto out_close; | 481 | goto out_close; |
483 | } | 482 | } |
484 | 483 | ||
485 | size = (buf.ust_size + UM_KERN_PAGE_SIZE) & ~(UM_KERN_PAGE_SIZE - 1); | 484 | size = (buf.st_size + UM_KERN_PAGE_SIZE) & ~(UM_KERN_PAGE_SIZE - 1); |
486 | 485 | ||
487 | *new = ((struct iomem_region) { .next = iomem_regions, | 486 | *new = ((struct iomem_region) { .next = iomem_regions, |
488 | .driver = driver, | 487 | .driver = driver, |
@@ -495,7 +494,7 @@ int __init parse_iomem(char *str, int *add) | |||
495 | 494 | ||
496 | return 0; | 495 | return 0; |
497 | out_close: | 496 | out_close: |
498 | os_close_file(fd); | 497 | close(fd); |
499 | out: | 498 | out: |
500 | return 1; | 499 | return 1; |
501 | } | 500 | } |
@@ -528,6 +527,24 @@ static void openpty_cb(void *arg) | |||
528 | info->err = -errno; | 527 | info->err = -errno; |
529 | } | 528 | } |
530 | 529 | ||
530 | static int async_pty(int master, int slave) | ||
531 | { | ||
532 | int flags; | ||
533 | |||
534 | flags = fcntl(master, F_GETFL); | ||
535 | if(flags < 0) | ||
536 | return -errno; | ||
537 | |||
538 | if((fcntl(master, F_SETFL, flags | O_NONBLOCK | O_ASYNC) < 0) || | ||
539 | (fcntl(master, F_SETOWN, os_getpid()) < 0)) | ||
540 | return -errno; | ||
541 | |||
542 | if((fcntl(slave, F_SETFL, flags | O_NONBLOCK) < 0)) | ||
543 | return -errno; | ||
544 | |||
545 | return(0); | ||
546 | } | ||
547 | |||
531 | static void __init check_one_sigio(void (*proc)(int, int)) | 548 | static void __init check_one_sigio(void (*proc)(int, int)) |
532 | { | 549 | { |
533 | struct sigaction old, new; | 550 | struct sigaction old, new; |
@@ -553,7 +570,7 @@ static void __init check_one_sigio(void (*proc)(int, int)) | |||
553 | if (err < 0) | 570 | if (err < 0) |
554 | panic("check_sigio : __raw failed, errno = %d\n", -err); | 571 | panic("check_sigio : __raw failed, errno = %d\n", -err); |
555 | 572 | ||
556 | err = os_sigio_async(master, slave); | 573 | err = async_pty(master, slave); |
557 | if(err < 0) | 574 | if(err < 0) |
558 | panic("tty_fds : sigio_async failed, err = %d\n", -err); | 575 | panic("tty_fds : sigio_async failed, err = %d\n", -err); |
559 | 576 | ||