Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


paranoid check
Jack Lange [Thu, 18 Nov 2010 19:18:16 +0000 (13:18 -0600)]
palacios/src/devices/keyboard.c

index 375a625..554e9d1 100644 (file)
@@ -266,7 +266,7 @@ static int push_to_output_queue(struct vm_device * dev, uint8_t value, uint8_t c
        q = &(state->kbd_queue);
     }
 
-    if (q->count == QUEUE_SIZE) {
+    if (q->count >= QUEUE_SIZE) {
        return 0;
     }
 
@@ -276,7 +276,14 @@ static int push_to_output_queue(struct vm_device * dev, uint8_t value, uint8_t c
        state->status.cmd = 0;
     }
 
-    q->queue[q->end++] = value;
+    q->queue[q->end] = value;
+
+    if (q->end >= (QUEUE_SIZE - 1)) {
+       q->end = 0;
+    } else {
+       q->end++;
+    }
+
     q->count++;
 
 
@@ -304,7 +311,14 @@ static int pull_from_output_queue(struct vm_device * dev, uint8_t * value) {
        return 0;
     }
 
-    *value = q->queue[q->start++];
+    *value = q->queue[q->start];
+
+    if (q->start >= (QUEUE_SIZE - 1)) {
+       q->start = 0;
+    } else {
+       q->start++;
+    }
+
     q->count--;
 
 
@@ -1021,6 +1035,8 @@ static int keyboard_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) {
 
     keyboard_state = (struct keyboard_internal *)V3_Malloc(sizeof(struct keyboard_internal));
 
+    memset(keyboard_state, 0, sizeof(struct keyboard_internal));
+
     keyboard_state->mouse_queue.start = 0;
     keyboard_state->mouse_queue.end = 0;
     keyboard_state->mouse_queue.count = 0;