Ticket #8377: Fix page fault using user_memcpy

This commit is contained in:
Jerome Leveque
2012-03-17 20:54:41 +01:00
committed by Jérôme Duval
parent 362efe0c9f
commit be111e0787
+10 -1
View File
@@ -279,7 +279,7 @@ midi_read(void *cookie, off_t pos, void *buffer, size_t *num_bytes)
unsigned char *data; unsigned char *data;
unsigned int i; unsigned int i;
cpu_status status; cpu_status status __attribute__((unused));
status_t bestat; status_t bestat;
mpu401device *mpu_device = (mpu401device *)cookie; 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; *num_bytes = 1;
return B_INTERRUPTED; return B_INTERRUPTED;
} else { } else {
#ifdef __HAIKU__
if (user_memcpy(data+i, &(mpubuffer[mbuf_start]),
sizeof(unsigned char)) == B_OK) {
#else
status = lock(); status = lock();
*(data+i) = mpubuffer[mbuf_start]; *(data+i) = mpubuffer[mbuf_start];
#endif
i++; i++;
mbuf_start++; // pointer to data in ringbuffer mbuf_start++; // pointer to data in ringbuffer
if (mbuf_start >= (MBUF_ELEMENTS-1)) 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 *num_bytes = 1; // How many bytes are being returned in buffer
if (mbuf_bytes > 0) if (mbuf_bytes > 0)
mbuf_bytes--; // bytes read from buffer, so decrement buffer count mbuf_bytes--; // bytes read from buffer, so decrement buffer count
#ifdef __HAIKU__
}
#else
unlock(status); unlock(status);
#endif
//PRINT(("bytes in buffer: %d\n",mbuf_bytes)); //PRINT(("bytes in buffer: %d\n",mbuf_bytes));
} }