Rev 2896 | Rev 2898 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2896 | Rev 2897 | ||
|---|---|---|---|
| Line 173... | Line 173... | ||
| 173 | unsigned buf_size; |
173 | unsigned buf_size; |
| 174 | void *buffer; |
174 | void *buffer; |
| 175 | size_t n; |
175 | size_t n; |
| 176 | int rc; |
176 | int rc; |
| 177 | 177 | ||
| - | 178 | uspace_addr = IPC_GET_ARG2(call->data); /* Destination address */ |
|
| - | 179 | buf_size = IPC_GET_ARG3(call->data); /* Dest. buffer size */ |
|
| - | 180 | ||
| - | 181 | /* |
|
| - | 182 | * Read thread list. Variable n will be filled with actual number |
|
| - | 183 | * of threads times thread-id size. |
|
| - | 184 | */ |
|
| 178 | rc = udebug_thread_read(&buffer, &n); |
185 | rc = udebug_thread_read(&buffer, buf_size, &n); |
| 179 | if (rc < 0) { |
186 | if (rc < 0) { |
| 180 | IPC_SET_RETVAL(call->data, rc); |
187 | IPC_SET_RETVAL(call->data, rc); |
| 181 | ipc_answer(&TASK->kernel_box, call); |
188 | ipc_answer(&TASK->kernel_box, call); |
| 182 | return; |
189 | return; |
| 183 | } |
190 | } |
| 184 | 191 | ||
| 185 | /* |
- | |
| 186 | * Make use of call->buffer to transfer data to caller's userspace |
- | |
| 187 | */ |
- | |
| 188 | - | ||
| 189 | uspace_addr = IPC_GET_ARG2(call->data); |
- | |
| 190 | buf_size = IPC_GET_ARG3(call->data); |
- | |
| 191 | - | ||
| 192 | total_bytes = n; |
192 | total_bytes = n; |
| 193 | 193 | ||
| - | 194 | /* Copy MAX(buf_size, total_bytes) bytes */ |
|
| - | 195 | ||
| 194 | if (buf_size > total_bytes) |
196 | if (buf_size > total_bytes) |
| 195 | to_copy = total_bytes; |
197 | to_copy = total_bytes; |
| 196 | else |
198 | else |
| 197 | to_copy = buf_size; |
199 | to_copy = buf_size; |
| 198 | 200 | ||
| - | 201 | /* |
|
| - | 202 | * Make use of call->buffer to transfer data to caller's userspace |
|
| - | 203 | */ |
|
| - | 204 | ||
| 199 | IPC_SET_RETVAL(call->data, 0); |
205 | IPC_SET_RETVAL(call->data, 0); |
| 200 | /* ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that |
206 | /* ARG1=dest, ARG2=size as in IPC_M_DATA_READ so that |
| 201 | same code in process_answer() can be used |
207 | same code in process_answer() can be used |
| 202 | (no way to distinguish method in answer) */ |
208 | (no way to distinguish method in answer) */ |
| 203 | IPC_SET_ARG1(call->data, uspace_addr); |
209 | IPC_SET_ARG1(call->data, uspace_addr); |