Changes in uspace/srv/hid/input/ctl/kbdev.c [cce8a83:3123d2a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/input/ctl/kbdev.c
rcce8a83 r3123d2a 68 68 /** Link to generic keyboard device */ 69 69 kbd_dev_t *kbd_dev; 70 70 71 71 /** Session with kbdev device */ 72 72 async_sess_t *sess; … … 75 75 static kbdev_t *kbdev_new(kbd_dev_t *kdev) 76 76 { 77 kbdev_t *kbdev; 78 79 kbdev = calloc(1, sizeof(kbdev_t)); 77 kbdev_t *kbdev = calloc(1, sizeof(kbdev_t)); 80 78 if (kbdev == NULL) 81 79 return NULL; 82 80 83 81 kbdev->kbd_dev = kdev; 84 82 … … 90 88 if (kbdev->sess != NULL) 91 89 async_hangup(kbdev->sess); 90 92 91 free(kbdev); 93 92 } … … 95 94 static int kbdev_ctl_init(kbd_dev_t *kdev) 96 95 { 97 async_sess_t *sess; 98 async_exch_t *exch; 99 kbdev_t *kbdev; 100 int rc; 101 102 sess = loc_service_connect(EXCHANGE_SERIALIZE, kdev->svc_id, 0); 96 async_sess_t *sess = loc_service_connect(EXCHANGE_SERIALIZE, 97 kdev->svc_id, 0); 103 98 if (sess == NULL) { 104 99 printf("%s: Failed starting session with '%s.'\n", NAME, 105 100 kdev->svc_name); 106 return -1;101 return ENOENT; 107 102 } 108 109 kbdev = kbdev_new(kdev);103 104 kbdev_t *kbdev = kbdev_new(kdev); 110 105 if (kbdev == NULL) { 111 106 printf("%s: Failed allocating device structure for '%s'.\n", 112 107 NAME, kdev->svc_name); 113 return -1; 108 async_hangup(sess); 109 return ENOMEM; 114 110 } 115 111 116 112 kbdev->sess = sess; 117 118 exch = async_exchange_begin(sess);113 114 async_exch_t *exch = async_exchange_begin(sess); 119 115 if (exch == NULL) { 120 116 printf("%s: Failed starting exchange with '%s'.\n", NAME, 121 117 kdev->svc_name); 122 118 kbdev_destroy(kbdev); 123 return -1;119 return ENOENT; 124 120 } 125 126 rc = async_connect_to_me(exch, 0, 0, 0, kbdev_callback_conn, kbdev);121 122 int rc = async_connect_to_me(exch, 0, 0, 0, kbdev_callback_conn, kbdev); 127 123 if (rc != EOK) { 128 124 printf("%s: Failed creating callback connection from '%s'.\n", … … 130 126 async_exchange_end(exch); 131 127 kbdev_destroy(kbdev); 132 return -1;128 return rc; 133 129 } 134 130 135 131 async_exchange_end(exch); 136 132 137 133 kdev->ctl_private = (void *) kbdev; 138 134 return 0; … … 141 137 static void kbdev_ctl_set_ind(kbd_dev_t *kdev, unsigned mods) 142 138 { 143 async_sess_t *sess; 144 async_exch_t *exch; 145 146 sess = ((kbdev_t *) kdev->ctl_private)->sess; 147 148 exch = async_exchange_begin(sess); 139 async_sess_t *sess = ((kbdev_t *) kdev->ctl_private)->sess; 140 async_exch_t *exch = async_exchange_begin(sess); 149 141 if (!exch) 150 142 return; 151 143 152 144 async_msg_1(exch, KBDEV_SET_IND, mods); 153 145 async_exchange_end(exch); … … 169 161 callid = async_get_call(&call); 170 162 if (!IPC_GET_IMETHOD(call)) { 171 /* XXX Handle hangup */163 kbdev_destroy(kbdev); 172 164 return; 173 165 }
Note:
See TracChangeset
for help on using the changeset viewer.