12345678910111213141516171819202122232425262728293031323334 |
- /*
- * Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
- * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
- * Licensed under the GPL
- */
- #include <setjmp.h>
- #include <string.h>
- #include "longjmp.h"
- unsigned long __do_user_copy(void *to, const void *from, int n,
- void **fault_addr, void **fault_catcher,
- void (*op)(void *to, const void *from,
- int n), int *faulted_out)
- {
- unsigned long *faddrp = (unsigned long *) fault_addr, ret;
- int enable;
- sigjmp_buf jbuf;
- *fault_catcher = &jbuf;
- if(UML_SIGSETJMP(&jbuf, enable) == 0){
- (*op)(to, from, n);
- ret = 0;
- *faulted_out = 0;
- }
- else {
- ret = *faddrp;
- *faulted_out = 1;
- }
- *fault_addr = NULL;
- *fault_catcher = NULL;
- return ret;
- }
|