Ticket #8377: Fix page fault using user_memcpy

This commit is contained in:
Jerome Leveque 2012-03-13 22:59:23 +00:00 committed by Jérôme Duval
parent 362efe0c9f
commit be111e0787
1 changed files with 10 additions and 1 deletions

View File

@ -279,7 +279,7 @@ midi_read(void *cookie, off_t pos, void *buffer, size_t *num_bytes)
unsigned char *data;
unsigned int i;
cpu_status status;
cpu_status status __attribute__((unused));
status_t bestat;
mpu401device *mpu_device = (mpu401device *)cookie;
@ -298,8 +298,13 @@ midi_read(void *cookie, off_t pos, void *buffer, size_t *num_bytes)
*num_bytes = 1;
return B_INTERRUPTED;
} else {
#ifdef __HAIKU__
if (user_memcpy(data+i, &(mpubuffer[mbuf_start]),
sizeof(unsigned char)) == B_OK) {
#else
status = lock();
*(data+i) = mpubuffer[mbuf_start];
#endif
i++;
mbuf_start++; // pointer to data in ringbuffer
if (mbuf_start >= (MBUF_ELEMENTS-1))
@ -307,7 +312,11 @@ midi_read(void *cookie, off_t pos, void *buffer, size_t *num_bytes)
*num_bytes = 1; // How many bytes are being returned in buffer
if (mbuf_bytes > 0)
mbuf_bytes--; // bytes read from buffer, so decrement buffer count
#ifdef __HAIKU__
}
#else
unlock(status);
#endif
//PRINT(("bytes in buffer: %d\n",mbuf_bytes));
}