Changeset a35b458 in mainline for uspace/lib/c/generic/clipboard.c
- Timestamp:
- 2018-03-02T20:10:49Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/clipboard.c
r3061bc1 ra35b458 60 60 service_id_t sid; 61 61 errno_t rc; 62 62 63 63 fibril_mutex_lock(&clip_mutex); 64 64 65 65 while (clip_sess == NULL) { 66 66 rc = loc_service_get_id(SERVICE_NAME_CLIPBOARD, &sid, … … 68 68 if (rc != EOK) 69 69 continue; 70 70 71 71 clip_sess = loc_service_connect(sid, INTERFACE_CLIPBOARD, 72 72 IPC_FLAG_BLOCKING); 73 73 } 74 74 75 75 fibril_mutex_unlock(&clip_mutex); 76 76 77 77 return async_exchange_begin(clip_sess); 78 78 } … … 101 101 { 102 102 size_t size = str_size(str); 103 103 104 104 if (size == 0) { 105 105 async_exch_t *exch = clip_exchange_begin(); … … 107 107 CLIPBOARD_TAG_NONE); 108 108 clip_exchange_end(exch); 109 109 110 110 return (errno_t) rc; 111 111 } else { … … 115 115 errno_t rc = async_data_write_start(exch, (void *) str, size); 116 116 clip_exchange_end(exch); 117 117 118 118 if (rc != EOK) { 119 119 errno_t rc_orig; … … 124 124 return (errno_t) rc_orig; 125 125 } 126 126 127 127 async_wait_for(req, &rc); 128 128 129 129 return (errno_t) rc; 130 130 } … … 145 145 while (true) { 146 146 async_exch_t *exch = clip_exchange_begin(); 147 147 148 148 sysarg_t size; 149 149 sysarg_t tag; 150 150 errno_t rc = async_req_0_2(exch, CLIPBOARD_CONTENT, &size, &tag); 151 151 152 152 clip_exchange_end(exch); 153 153 154 154 if (rc != EOK) 155 155 return (errno_t) rc; 156 156 157 157 char *sbuf; 158 158 159 159 switch (tag) { 160 160 case CLIPBOARD_TAG_NONE: … … 162 162 if (sbuf == NULL) 163 163 return ENOMEM; 164 164 165 165 sbuf[0] = 0; 166 166 *str = sbuf; … … 170 170 if (sbuf == NULL) 171 171 return ENOMEM; 172 172 173 173 exch = clip_exchange_begin(); 174 174 aid_t req = async_send_1(exch, CLIPBOARD_GET_DATA, tag, NULL); 175 175 rc = async_data_read_start(exch, (void *) sbuf, size); 176 176 clip_exchange_end(exch); 177 177 178 178 if ((errno_t) rc == EOVERFLOW) { 179 179 /* … … 183 183 break; 184 184 } 185 185 186 186 if (rc != EOK) { 187 187 errno_t rc_orig; … … 192 192 return (errno_t) rc_orig; 193 193 } 194 194 195 195 async_wait_for(req, &rc); 196 196 197 197 if (rc == EOK) { 198 198 sbuf[size] = 0; 199 199 *str = sbuf; 200 200 } 201 201 202 202 return rc; 203 203 default:
Note:
See TracChangeset
for help on using the changeset viewer.