Commit 5134d8fe authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds

uml: style fixes in arch/um/os-Linux

Style changes under arch/um/os-Linux:
	include trimming
	CodingStyle fixes
	some printks needed severity indicators

make_tempfile turns out not to be used outside of mem.c, so it is now static.
Its declaration in tempfile.h is no longer needed, and tempfile.h itself is no
longer needed.

create_tmp_file was also made static.

checkpatch moans about an EXPORT_SYMBOL in user_syms.c which is part of a
macro definition - this is copying a bit of kernel infrastructure into the
libc side of UML because the kernel headers can't be included there.
Signed-off-by: default avatarJeff Dike <jdike@linux.intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 536788fe
/*
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
* Licensed under the GPL
*/
#ifndef __TEMPFILE_H__
#define __TEMPFILE_H__
extern int make_tempfile(const char *template, char **tempname, int do_unlink);
#endif
...@@ -142,7 +142,7 @@ static int do_not_aio(struct aio_thread_req *req) ...@@ -142,7 +142,7 @@ static int do_not_aio(struct aio_thread_req *req)
if (actual != req->offset) if (actual != req->offset)
return -errno; return -errno;
switch(req->type) { switch (req->type) {
case AIO_READ: case AIO_READ:
n = read(req->io_fd, req->buf, req->len); n = read(req->io_fd, req->buf, req->len);
break; break;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Licensed under the GPL. * Licensed under the GPL.
*/ */
#include "linux/init.h" #include <linux/init.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include "etap.h" #include "etap.h"
#include "net_kern.h" #include "net_kern.h"
...@@ -30,10 +30,10 @@ static void etap_init(struct net_device *dev, void *data) ...@@ -30,10 +30,10 @@ static void etap_init(struct net_device *dev, void *data)
epri->control_fd = -1; epri->control_fd = -1;
epri->dev = dev; epri->dev = dev;
printk("ethertap backend - %s", epri->dev_name); printk(KERN_INFO "ethertap backend - %s", epri->dev_name);
if (epri->gate_addr != NULL) if (epri->gate_addr != NULL)
printk(", IP = %s", epri->gate_addr); printk(KERN_CONT ", IP = %s", epri->gate_addr);
printk("\n"); printk(KERN_CONT "\n");
} }
static int etap_read(int fd, struct sk_buff *skb, struct uml_net_private *lp) static int etap_read(int fd, struct sk_buff *skb, struct uml_net_private *lp)
......
...@@ -29,10 +29,10 @@ static void tuntap_init(struct net_device *dev, void *data) ...@@ -29,10 +29,10 @@ static void tuntap_init(struct net_device *dev, void *data)
tpri->fd = -1; tpri->fd = -1;
tpri->dev = dev; tpri->dev = dev;
printk("TUN/TAP backend - "); printk(KERN_INFO "TUN/TAP backend - ");
if (tpri->gate_addr != NULL) if (tpri->gate_addr != NULL)
printk("IP = %s", tpri->gate_addr); printk(KERN_CONT "IP = %s", tpri->gate_addr);
printk("\n"); printk(KERN_CONT "\n");
} }
static int tuntap_read(int fd, struct sk_buff *skb, struct uml_net_private *lp) static int tuntap_read(int fd, struct sk_buff *skb, struct uml_net_private *lp)
......
/* /*
* Copyright (C) 2002 Jeff Dike (jdike@karaya.com) * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
...@@ -9,14 +9,3 @@ ...@@ -9,14 +9,3 @@
#define DEV_NULL "/dev/null" #define DEV_NULL "/dev/null"
#endif #endif
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-file-style: "linux"
* End:
*/
/*
* Copyright (C) 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <stddef.h> #include <stddef.h>
#include <stdarg.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <string.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/types.h> #include <string.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/statfs.h> #include <sys/param.h>
#include "user.h"
#include "mem_user.h"
#include "init.h" #include "init.h"
#include "os.h"
#include "tempfile.h"
#include "kern_constants.h" #include "kern_constants.h"
#include "os.h"
#include <sys/param.h> #include "user.h"
/* Modified by which_tmpdir, which is called during early boot */ /* Modified by which_tmpdir, which is called during early boot */
static char *default_tmpdir = "/tmp"; static char *default_tmpdir = "/tmp";
...@@ -33,18 +32,19 @@ static void __init find_tempdir(void) ...@@ -33,18 +32,19 @@ static void __init find_tempdir(void)
int i; int i;
char *dir = NULL; char *dir = NULL;
if(tempdir != NULL) /* We've already been called */ if (tempdir != NULL)
/* We've already been called */
return; return;
for(i = 0; dirs[i]; i++){ for (i = 0; dirs[i]; i++) {
dir = getenv(dirs[i]); dir = getenv(dirs[i]);
if((dir != NULL) && (*dir != '\0')) if ((dir != NULL) && (*dir != '\0'))
break; break;
} }
if((dir == NULL) || (*dir == '\0')) if ((dir == NULL) || (*dir == '\0'))
dir = default_tmpdir; dir = default_tmpdir;
tempdir = malloc(strlen(dir) + 2); tempdir = malloc(strlen(dir) + 2);
if(tempdir == NULL){ if (tempdir == NULL) {
fprintf(stderr, "Failed to malloc tempdir, " fprintf(stderr, "Failed to malloc tempdir, "
"errno = %d\n", errno); "errno = %d\n", errno);
return; return;
...@@ -53,7 +53,8 @@ static void __init find_tempdir(void) ...@@ -53,7 +53,8 @@ static void __init find_tempdir(void)
strcat(tempdir, "/"); strcat(tempdir, "/");
} }
/* This will return 1, with the first character in buf being the /*
* This will return 1, with the first character in buf being the
* character following the next instance of c in the file. This will * character following the next instance of c in the file. This will
* read the file as needed. If there's an error, -errno is returned; * read the file as needed. If there's an error, -errno is returned;
* if the end of the file is reached, 0 is returned. * if the end of the file is reached, 0 is returned.
...@@ -64,11 +65,11 @@ static int next(int fd, char *buf, size_t size, char c) ...@@ -64,11 +65,11 @@ static int next(int fd, char *buf, size_t size, char c)
size_t len; size_t len;
char *ptr; char *ptr;
while((ptr = strchr(buf, c)) == NULL){ while ((ptr = strchr(buf, c)) == NULL) {
n = read(fd, buf, size - 1); n = read(fd, buf, size - 1);
if(n == 0) if (n == 0)
return 0; return 0;
else if(n < 0) else if (n < 0)
return -errno; return -errno;
buf[n] = '\0'; buf[n] = '\0';
...@@ -78,11 +79,12 @@ static int next(int fd, char *buf, size_t size, char c) ...@@ -78,11 +79,12 @@ static int next(int fd, char *buf, size_t size, char c)
len = strlen(ptr); len = strlen(ptr);
memmove(buf, ptr, len + 1); memmove(buf, ptr, len + 1);
/* Refill the buffer so that if there's a partial string that we care /*
* Refill the buffer so that if there's a partial string that we care
* about, it will be completed, and we can recognize it. * about, it will be completed, and we can recognize it.
*/ */
n = read(fd, &buf[len], size - len - 1); n = read(fd, &buf[len], size - len - 1);
if(n < 0) if (n < 0)
return -errno; return -errno;
buf[len + n] = '\0'; buf[len + n] = '\0';
...@@ -92,7 +94,8 @@ static int next(int fd, char *buf, size_t size, char c) ...@@ -92,7 +94,8 @@ static int next(int fd, char *buf, size_t size, char c)
/* which_tmpdir is called only during early boot */ /* which_tmpdir is called only during early boot */
static int checked_tmpdir = 0; static int checked_tmpdir = 0;
/* Look for a tmpfs mounted at /dev/shm. I couldn't find a cleaner /*
* Look for a tmpfs mounted at /dev/shm. I couldn't find a cleaner
* way to do this than to parse /proc/mounts. statfs will return the * way to do this than to parse /proc/mounts. statfs will return the
* same filesystem magic number and fs id for both /dev and /dev/shm * same filesystem magic number and fs id for both /dev and /dev/shm
* when they are both tmpfs, so you can't tell if they are different * when they are both tmpfs, so you can't tell if they are different
...@@ -107,7 +110,7 @@ static void which_tmpdir(void) ...@@ -107,7 +110,7 @@ static void which_tmpdir(void)
int fd, found; int fd, found;
char buf[128] = { '\0' }; char buf[128] = { '\0' };
if(checked_tmpdir) if (checked_tmpdir)
return; return;
checked_tmpdir = 1; checked_tmpdir = 1;
...@@ -115,28 +118,28 @@ static void which_tmpdir(void) ...@@ -115,28 +118,28 @@ static void which_tmpdir(void)
printf("Checking for tmpfs mount on /dev/shm..."); printf("Checking for tmpfs mount on /dev/shm...");
fd = open("/proc/mounts", O_RDONLY); fd = open("/proc/mounts", O_RDONLY);
if(fd < 0){ if (fd < 0) {
printf("failed to open /proc/mounts, errno = %d\n", errno); printf("failed to open /proc/mounts, errno = %d\n", errno);
return; return;
} }
while(1){ while (1) {
found = next(fd, buf, ARRAY_SIZE(buf), ' '); found = next(fd, buf, ARRAY_SIZE(buf), ' ');
if(found != 1) if (found != 1)
break; break;
if(!strncmp(buf, "/dev/shm", strlen("/dev/shm"))) if (!strncmp(buf, "/dev/shm", strlen("/dev/shm")))
goto found; goto found;
found = next(fd, buf, ARRAY_SIZE(buf), '\n'); found = next(fd, buf, ARRAY_SIZE(buf), '\n');
if(found != 1) if (found != 1)
break; break;
} }
err: err:
if(found == 0) if (found == 0)
printf("nothing mounted on /dev/shm\n"); printf("nothing mounted on /dev/shm\n");
else if(found < 0) else if (found < 0)
printf("read returned errno %d\n", -found); printf("read returned errno %d\n", -found);
out: out:
...@@ -146,10 +149,10 @@ static void which_tmpdir(void) ...@@ -146,10 +149,10 @@ static void which_tmpdir(void)
found: found:
found = next(fd, buf, ARRAY_SIZE(buf), ' '); found = next(fd, buf, ARRAY_SIZE(buf), ' ');
if(found != 1) if (found != 1)
goto err; goto err;
if(strncmp(buf, "tmpfs", strlen("tmpfs"))){ if (strncmp(buf, "tmpfs", strlen("tmpfs"))) {
printf("not tmpfs\n"); printf("not tmpfs\n");
goto out; goto out;
} }
...@@ -164,7 +167,7 @@ static void which_tmpdir(void) ...@@ -164,7 +167,7 @@ static void which_tmpdir(void)
* (file: kernel/tt/ptproxy/proxy.c, proc: start_debugger). * (file: kernel/tt/ptproxy/proxy.c, proc: start_debugger).
* So it isn't 'static' yet. * So it isn't 'static' yet.
*/ */
int __init make_tempfile(const char *template, char **out_tempname, static int __init make_tempfile(const char *template, char **out_tempname,
int do_unlink) int do_unlink)
{ {
char *tempname; char *tempname;
...@@ -182,16 +185,16 @@ int __init make_tempfile(const char *template, char **out_tempname, ...@@ -182,16 +185,16 @@ int __init make_tempfile(const char *template, char **out_tempname,
tempname[0] = '\0'; tempname[0] = '\0';
strncat(tempname, template, MAXPATHLEN-1-strlen(tempname)); strncat(tempname, template, MAXPATHLEN-1-strlen(tempname));
fd = mkstemp(tempname); fd = mkstemp(tempname);
if(fd < 0){ if (fd < 0) {
fprintf(stderr, "open - cannot create %s: %s\n", tempname, fprintf(stderr, "open - cannot create %s: %s\n", tempname,
strerror(errno)); strerror(errno));
goto out; goto out;
} }
if(do_unlink && (unlink(tempname) < 0)){ if (do_unlink && (unlink(tempname) < 0)) {
perror("unlink"); perror("unlink");
goto out; goto out;
} }
if(out_tempname){ if (out_tempname) {
*out_tempname = tempname; *out_tempname = tempname;
} else { } else {
free(tempname); free(tempname);
...@@ -204,27 +207,23 @@ int __init make_tempfile(const char *template, char **out_tempname, ...@@ -204,27 +207,23 @@ int __init make_tempfile(const char *template, char **out_tempname,
#define TEMPNAME_TEMPLATE "vm_file-XXXXXX" #define TEMPNAME_TEMPLATE "vm_file-XXXXXX"
/* static int __init create_tmp_file(unsigned long long len)
* This proc is used in start_up.c
* So it isn't 'static'.
*/
int __init create_tmp_file(unsigned long long len)
{ {
int fd, err; int fd, err;
char zero; char zero;
fd = make_tempfile(TEMPNAME_TEMPLATE, NULL, 1); fd = make_tempfile(TEMPNAME_TEMPLATE, NULL, 1);
if(fd < 0) { if (fd < 0)
exit(1); exit(1);
}
err = fchmod(fd, 0777); err = fchmod(fd, 0777);
if(err < 0){ if (err < 0) {
perror("fchmod"); perror("fchmod");
exit(1); exit(1);
} }
/* Seek to len - 1 because writing a character there will /*
* Seek to len - 1 because writing a character there will
* increase the file size by one byte, to the desired length. * increase the file size by one byte, to the desired length.
*/ */
if (lseek64(fd, len - 1, SEEK_SET) < 0) { if (lseek64(fd, len - 1, SEEK_SET) < 0) {
...@@ -235,7 +234,7 @@ int __init create_tmp_file(unsigned long long len) ...@@ -235,7 +234,7 @@ int __init create_tmp_file(unsigned long long len)
zero = 0; zero = 0;
err = write(fd, &zero, 1); err = write(fd, &zero, 1);
if(err != 1){ if (err != 1) {
perror("write"); perror("write");
exit(1); exit(1);
} }
...@@ -250,7 +249,7 @@ int __init create_mem_file(unsigned long long len) ...@@ -250,7 +249,7 @@ int __init create_mem_file(unsigned long long len)
fd = create_tmp_file(len); fd = create_tmp_file(len);
err = os_set_exec_close(fd); err = os_set_exec_close(fd);
if(err < 0){ if (err < 0) {
errno = -err; errno = -err;
perror("exec_close"); perror("exec_close");
} }
...@@ -267,11 +266,11 @@ void __init check_tmpexec(void) ...@@ -267,11 +266,11 @@ void __init check_tmpexec(void)
PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, fd, 0); PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, fd, 0);
printf("Checking PROT_EXEC mmap in %s...",tempdir); printf("Checking PROT_EXEC mmap in %s...",tempdir);
fflush(stdout); fflush(stdout);
if(addr == MAP_FAILED){ if (addr == MAP_FAILED) {
err = errno; err = errno;
perror("failed"); perror("failed");
close(fd); close(fd);
if(err == EPERM) if (err == EPERM)
printf("%s must be not mounted noexec\n",tempdir); printf("%s must be not mounted noexec\n",tempdir);
exit(1); exit(1);
} }
......
...@@ -224,7 +224,7 @@ int __init can_drop_memory(void) ...@@ -224,7 +224,7 @@ int __init can_drop_memory(void)
goto out_unmap; goto out_unmap;
} }
printk("OK\n"); printk(UM_KERN_CONT "OK\n");
ok = 1; ok = 1;
out_unmap: out_unmap:
......
...@@ -237,7 +237,7 @@ void unblock_signals(void) ...@@ -237,7 +237,7 @@ void unblock_signals(void)
* interrupts may have arrived and we need to re-enable them and * interrupts may have arrived and we need to re-enable them and
* recheck signals_pending. * recheck signals_pending.
*/ */
while(1) { while (1) {
/* /*
* Save and reset save_pending after enabling signals. This * Save and reset save_pending after enabling signals. This
* way, signals_pending won't be changed while we're reading it. * way, signals_pending won't be changed while we're reading it.
......
...@@ -341,7 +341,7 @@ void userspace(struct uml_pt_regs *regs) ...@@ -341,7 +341,7 @@ void userspace(struct uml_pt_regs *regs)
int local_using_sysemu; int local_using_sysemu;
if (getitimer(ITIMER_VIRTUAL, &timer)) if (getitimer(ITIMER_VIRTUAL, &timer))
printk("Failed to get itimer, errno = %d\n", errno); printk(UM_KERN_ERR "Failed to get itimer, errno = %d\n", errno);
nsecs = timer.it_value.tv_sec * UM_NSEC_PER_SEC + nsecs = timer.it_value.tv_sec * UM_NSEC_PER_SEC +
timer.it_value.tv_usec * UM_NSEC_PER_USEC; timer.it_value.tv_usec * UM_NSEC_PER_USEC;
nsecs += os_nsecs(); nsecs += os_nsecs();
...@@ -388,7 +388,7 @@ void userspace(struct uml_pt_regs *regs) ...@@ -388,7 +388,7 @@ void userspace(struct uml_pt_regs *regs)
if (WIFSTOPPED(status)) { if (WIFSTOPPED(status)) {
int sig = WSTOPSIG(status); int sig = WSTOPSIG(status);
switch(sig) { switch (sig) {
case SIGSEGV: case SIGSEGV:
if (PTRACE_FULL_FAULTINFO || if (PTRACE_FULL_FAULTINFO ||
!ptrace_faultinfo) { !ptrace_faultinfo) {
...@@ -641,7 +641,7 @@ int start_idle_thread(void *stack, jmp_buf *switch_buf) ...@@ -641,7 +641,7 @@ int start_idle_thread(void *stack, jmp_buf *switch_buf)
* after returning to the jumper. * after returning to the jumper.
*/ */
n = setjmp(initial_jmpbuf); n = setjmp(initial_jmpbuf);
switch(n) { switch (n) {
case INIT_JMP_NEW_THREAD: case INIT_JMP_NEW_THREAD:
(*switch_buf)[0].JB_IP = (unsigned long) new_thread_handler; (*switch_buf)[0].JB_IP = (unsigned long) new_thread_handler;
(*switch_buf)[0].JB_SP = (unsigned long) stack + (*switch_buf)[0].JB_SP = (unsigned long) stack +
......
...@@ -62,10 +62,10 @@ void arch_init_registers(int pid) ...@@ -62,10 +62,10 @@ void arch_init_registers(int pid)
int err; int err;
err = ptrace(PTRACE_GETFPXREGS, pid, 0, fpx_regs); err = ptrace(PTRACE_GETFPXREGS, pid, 0, fpx_regs);
if(!err) if (!err)
return; return;
if(errno != EIO) if (errno != EIO)
panic("check_ptrace : PTRACE_GETFPXREGS failed, errno = %d", panic("check_ptrace : PTRACE_GETFPXREGS failed, errno = %d",
errno); errno);
......
/* /*
* Copyright (C) 2006-2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) * Copyright (C) 2006 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
...@@ -7,31 +7,36 @@ ...@@ -7,31 +7,36 @@
#include <sys/ptrace.h> #include <sys/ptrace.h>
#define __FRAME_OFFSETS #define __FRAME_OFFSETS
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include "kern_constants.h"
#include "longjmp.h" #include "longjmp.h"
#include "user.h" #include "user.h"
int save_fp_registers(int pid, unsigned long *fp_regs) int save_fp_registers(int pid, unsigned long *fp_regs)
{ {
if(ptrace(PTRACE_GETFPREGS, pid, 0, fp_regs) < 0) if (ptrace(PTRACE_GETFPREGS, pid, 0, fp_regs) < 0)
return -errno; return -errno;
return 0; return 0;
} }
int restore_fp_registers(int pid, unsigned long *fp_regs) int restore_fp_registers(int pid, unsigned long *fp_regs)
{ {
if(ptrace(PTRACE_SETFPREGS, pid, 0, fp_regs) < 0) if (ptrace(PTRACE_SETFPREGS, pid, 0, fp_regs) < 0)
return -errno; return -errno;
return 0; return 0;
} }
unsigned long get_thread_reg(int reg, jmp_buf *buf) unsigned long get_thread_reg(int reg, jmp_buf *buf)
{ {
switch(reg){ switch (reg) {
case RIP: return buf[0]->__rip; case RIP:
case RSP: return buf[0]->__rsp; return buf[0]->__rip;
case RBP: return buf[0]->__rbp; case RSP:
return buf[0]->__rsp;
case RBP:
return buf[0]->__rbp;
default: default:
printk("get_thread_regs - unknown register %d\n", reg); printk(UM_KERN_ERR "get_thread_regs - unknown register %d\n",
reg);
return 0; return 0;
} }
} }
/* /*
* Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk) * Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
* Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com) * Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
...@@ -16,7 +16,7 @@ unsigned long __do_user_copy(void *to, const void *from, int n, ...@@ -16,7 +16,7 @@ unsigned long __do_user_copy(void *to, const void *from, int n,
jmp_buf jbuf; jmp_buf jbuf;
*fault_catcher = &jbuf; *fault_catcher = &jbuf;
if(UML_SETJMP(&jbuf) == 0){ if (UML_SETJMP(&jbuf) == 0) {
(*op)(to, from, n); (*op)(to, from, n);
ret = 0; ret = 0;
*faulted_out = 0; *faulted_out = 0;
......
/* /*
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com) * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h>
#include <limits.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/utsname.h>
#include <sys/param.h>
#include <sys/time.h>
#include "asm/types.h"
#include <ctype.h>
#include <signal.h>
#include <wait.h>
#include <errno.h> #include <errno.h>
#include <stdarg.h> #include <signal.h>
#include <sched.h>
#include <termios.h>
#include <string.h> #include <string.h>
#include "kern_util.h" #include <termios.h>
#include "user.h" #include <wait.h>
#include "mem_user.h" #include <sys/mman.h>
#include "init.h" #include <sys/utsname.h>
#include "ptrace_user.h"
#include "uml-config.h"
#include "os.h"
#include "longjmp.h"
#include "kern_constants.h" #include "kern_constants.h"
#include "os.h"
#include "user.h"
void stack_protections(unsigned long address) void stack_protections(unsigned long address)
{ {
if(mprotect((void *) address, UM_THREAD_SIZE, if (mprotect((void *) address, UM_THREAD_SIZE,
PROT_READ | PROT_WRITE | PROT_EXEC) < 0) PROT_READ | PROT_WRITE | PROT_EXEC) < 0)
panic("protecting stack failed, errno = %d", errno); panic("protecting stack failed, errno = %d", errno);
} }
...@@ -44,17 +29,19 @@ int raw(int fd) ...@@ -44,17 +29,19 @@ int raw(int fd)
int err; int err;
CATCH_EINTR(err = tcgetattr(fd, &tt)); CATCH_EINTR(err = tcgetattr(fd, &tt));
if(err < 0) if (err < 0)
return -errno; return -errno;
cfmakeraw(&tt); cfmakeraw(&tt);
CATCH_EINTR(err = tcsetattr(fd, TCSADRAIN, &tt)); CATCH_EINTR(err = tcsetattr(fd, TCSADRAIN, &tt));
if(err < 0) if (err < 0)
return -errno; return -errno;
/* XXX tcsetattr could have applied only some changes /*
* (and cfmakeraw() is a set of changes) */ * XXX tcsetattr could have applied only some changes
* (and cfmakeraw() is a set of changes)
*/
return 0; return 0;
} }
......
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