Merge branch 'master'
[linux-2.6-block.git] / arch / um / os-Linux / uaccess.c
CommitLineData
bb578426
GS
1/*
2 * Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
3 * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
4 * Licensed under the GPL
5 */
6
7#include <setjmp.h>
8#include <string.h>
1d7173ba 9#include "longjmp.h"
bb578426
GS
10
11unsigned long __do_user_copy(void *to, const void *from, int n,
12 void **fault_addr, void **fault_catcher,
13 void (*op)(void *to, const void *from,
14 int n), int *faulted_out)
15{
16 unsigned long *faddrp = (unsigned long *) fault_addr, ret;
1d7173ba 17 int enable;
bb578426 18
ad28e029 19 jmp_buf jbuf;
bb578426 20 *fault_catcher = &jbuf;
ad28e029 21 if(UML_SETJMP(&jbuf, enable) == 0){
bb578426
GS
22 (*op)(to, from, n);
23 ret = 0;
24 *faulted_out = 0;
25 }
26 else {
27 ret = *faddrp;
28 *faulted_out = 1;
29 }
30 *fault_addr = NULL;
31 *fault_catcher = NULL;
32 return ret;
33}
34