浏览代码

[Feat] [1.0.0] vmnet 使用 vmprocess 通信

xcbosa mbp16 2 月之前
父节点
当前提交
13560e8121
共有 1 个文件被更改,包括 12 次插入3 次删除
  1. 12 3
      post_sbin/getty.c

+ 12 - 3
post_sbin/getty.c

@@ -87,6 +87,7 @@ pthread_mutex_t vmnet_queue_lock;
 
 
 extern int vmnetproxy_main(void);
 extern int vmnetproxy_main(void);
 extern void tx_push(tx_command cmd);
 extern void tx_push(tx_command cmd);
+extern void log_message(const char *format, ...);
 
 
 void vmnet_queue_setup(void) {
 void vmnet_queue_setup(void) {
     vmnet_queue_front = NULL;
     vmnet_queue_front = NULL;
@@ -158,6 +159,8 @@ void vmnet_push_data(rx_command command) {
     }
     }
     bool has_next = command.tid == 21;
     bool has_next = command.tid == 21;
 
 
+    log_message("vmnet_push_data 162 has_next = %d", has_next);
+
     pthread_mutex_lock(&vmnet_queue_lock);
     pthread_mutex_lock(&vmnet_queue_lock);
 
 
     if (vmnet_queue_waiting_buffer == NULL) {
     if (vmnet_queue_waiting_buffer == NULL) {
@@ -166,24 +169,30 @@ void vmnet_push_data(rx_command command) {
 
 
     const int size = command.sstdin_len;
     const int size = command.sstdin_len;
     int approve_size = MIN(size, MAX_BUFFER_SIZE - vmnet_queue_waiting_buffer->length);
     int approve_size = MIN(size, MAX_BUFFER_SIZE - vmnet_queue_waiting_buffer->length);
-    if (approve_size >= 0) {
-        memcpy(&vmnet_queue_waiting_buffer->buffer[vmnet_queue_waiting_buffer->length], command.sstdin, approve_size);
+    log_message("vmnet_push_data 172 as=%d", approve_size);
+    if (approve_size > 0) {
+        memcpy(&vmnet_queue_waiting_buffer->buffer[vmnet_queue_waiting_buffer->length], &command.sstdin[0], approve_size);
         vmnet_queue_waiting_buffer->length += approve_size;
         vmnet_queue_waiting_buffer->length += approve_size;
     }
     }
 
 
+    log_message("vmnet_push_data 178 ns=%d", vmnet_queue_waiting_buffer->length);
+
     if (!has_next) {
     if (!has_next) {
         if (vmnet_queue_front == NULL) {
         if (vmnet_queue_front == NULL) {
-            vmnet_queue_front = vmnet_queue_waiting_buffer;
+            vmnet_queue_front = vmnet_queue_waiting_buffer;log_message("vmnet_push_data 182");
         }
         }
         else {
         else {
             vmnet_queue_elem *elem;
             vmnet_queue_elem *elem;
             for (elem = vmnet_queue_front; elem != NULL; elem = elem->next) ;
             for (elem = vmnet_queue_front; elem != NULL; elem = elem->next) ;
             elem->next = vmnet_queue_waiting_buffer;
             elem->next = vmnet_queue_waiting_buffer;
+            log_message("vmnet_push_data 188");
         }
         }
         vmnet_queue_waiting_buffer->next = NULL;
         vmnet_queue_waiting_buffer->next = NULL;
         vmnet_queue_waiting_buffer = NULL;
         vmnet_queue_waiting_buffer = NULL;
     }
     }
 
 
+    log_message("vmnet_push_data done");
+
     pthread_mutex_unlock(&vmnet_queue_lock);
     pthread_mutex_unlock(&vmnet_queue_lock);
 }
 }