Revision 579a97f7 m68k-semi.c
b/m68k-semi.c | ||
---|---|---|
107 | 107 |
{ |
108 | 108 |
struct m68k_gdb_stat *p; |
109 | 109 |
|
110 |
p = lock_user(addr, sizeof(struct m68k_gdb_stat), 0); |
|
110 |
if (!(p = lock_user(VERIFY_WRITE, addr, sizeof(struct m68k_gdb_stat), 0))) |
|
111 |
/* FIXME - should this return an error code? */ |
|
112 |
return; |
|
111 | 113 |
p->gdb_st_dev = cpu_to_be32(s->st_dev); |
112 | 114 |
p->gdb_st_ino = cpu_to_be32(s->st_ino); |
113 | 115 |
p->gdb_st_mode = cpu_to_be32(s->st_mode); |
... | ... | |
168 | 170 |
ARG(2), ARG(3)); |
169 | 171 |
return; |
170 | 172 |
} else { |
171 |
p = lock_user_string(ARG(0)); |
|
172 |
result = open(p, translate_openflags(ARG(2)), ARG(3)); |
|
173 |
unlock_user(p, ARG(0), 0); |
|
173 |
if (!(p = lock_user_string(ARG(0)))) { |
|
174 |
/* FIXME - check error code? */ |
|
175 |
result = -1; |
|
176 |
} else { |
|
177 |
result = open(p, translate_openflags(ARG(2)), ARG(3)); |
|
178 |
unlock_user(p, ARG(0), 0); |
|
179 |
} |
|
174 | 180 |
} |
175 | 181 |
break; |
176 | 182 |
case HOSTED_CLOSE: |
... | ... | |
196 | 202 |
ARG(0), ARG(1), len); |
197 | 203 |
return; |
198 | 204 |
} else { |
199 |
p = lock_user(ARG(1), len, 0); |
|
200 |
result = read(ARG(0), p, len); |
|
201 |
unlock_user(p, ARG(1), len); |
|
205 |
if (!(p = lock_user(VERIFY_WRITE, ARG(1), len, 0))) { |
|
206 |
/* FIXME - check error code? */ |
|
207 |
result = -1; |
|
208 |
} else { |
|
209 |
result = read(ARG(0), p, len); |
|
210 |
unlock_user(p, ARG(1), len); |
|
211 |
} |
|
202 | 212 |
} |
203 | 213 |
break; |
204 | 214 |
case HOSTED_WRITE: |
... | ... | |
208 | 218 |
ARG(0), ARG(1), len); |
209 | 219 |
return; |
210 | 220 |
} else { |
211 |
p = lock_user(ARG(1), len, 1); |
|
212 |
result = write(ARG(0), p, len); |
|
213 |
unlock_user(p, ARG(0), 0); |
|
221 |
if (!(p = lock_user(VERIFY_READ, ARG(1), len, 1))) { |
|
222 |
/* FIXME - check error code? */ |
|
223 |
result = -1; |
|
224 |
} else { |
|
225 |
result = write(ARG(0), p, len); |
|
226 |
unlock_user(p, ARG(0), 0); |
|
227 |
} |
|
214 | 228 |
} |
215 | 229 |
break; |
216 | 230 |
case HOSTED_LSEEK: |
... | ... | |
237 | 251 |
} else { |
238 | 252 |
p = lock_user_string(ARG(0)); |
239 | 253 |
q = lock_user_string(ARG(2)); |
240 |
result = rename(p, q); |
|
254 |
if (!p || !q) { |
|
255 |
/* FIXME - check error code? */ |
|
256 |
result = -1; |
|
257 |
} else { |
|
258 |
result = rename(p, q); |
|
259 |
} |
|
241 | 260 |
unlock_user(p, ARG(0), 0); |
242 | 261 |
unlock_user(q, ARG(2), 0); |
243 | 262 |
} |
... | ... | |
248 | 267 |
ARG(0), (int)ARG(1)); |
249 | 268 |
return; |
250 | 269 |
} else { |
251 |
p = lock_user_string(ARG(0)); |
|
252 |
result = unlink(p); |
|
253 |
unlock_user(p, ARG(0), 0); |
|
270 |
if (!(p = lock_user_string(ARG(0)))) { |
|
271 |
/* FIXME - check error code? */ |
|
272 |
result = -1; |
|
273 |
} else { |
|
274 |
result = unlink(p); |
|
275 |
unlock_user(p, ARG(0), 0); |
|
276 |
} |
|
254 | 277 |
} |
255 | 278 |
break; |
256 | 279 |
case HOSTED_STAT: |
... | ... | |
260 | 283 |
return; |
261 | 284 |
} else { |
262 | 285 |
struct stat s; |
263 |
p = lock_user_string(ARG(0)); |
|
264 |
result = stat(p, &s); |
|
265 |
unlock_user(p, ARG(0), 0); |
|
286 |
if (!(p = lock_user_string(ARG(0)))) { |
|
287 |
/* FIXME - check error code? */ |
|
288 |
result = -1; |
|
289 |
} else { |
|
290 |
result = stat(p, &s); |
|
291 |
unlock_user(p, ARG(0), 0); |
|
292 |
} |
|
266 | 293 |
if (result == 0) { |
267 | 294 |
translate_stat(env, ARG(2), &s); |
268 | 295 |
} |
... | ... | |
291 | 318 |
struct gdb_timeval *p; |
292 | 319 |
result = qemu_gettimeofday(&tv); |
293 | 320 |
if (result != 0) { |
294 |
p = lock_user(ARG(0), sizeof(struct gdb_timeval), 0); |
|
295 |
p->tv_sec = cpu_to_be32(tv.tv_sec); |
|
296 |
p->tv_usec = cpu_to_be64(tv.tv_usec); |
|
297 |
unlock_user(p, ARG(0), sizeof(struct gdb_timeval)); |
|
321 |
if (!(p = lock_user(VERIFY_WRITE, |
|
322 |
ARG(0), sizeof(struct gdb_timeval), 0))) { |
|
323 |
/* FIXME - check error code? */ |
|
324 |
result = -1; |
|
325 |
} else { |
|
326 |
p->tv_sec = cpu_to_be32(tv.tv_sec); |
|
327 |
p->tv_usec = cpu_to_be64(tv.tv_usec); |
|
328 |
unlock_user(p, ARG(0), sizeof(struct gdb_timeval)); |
|
329 |
} |
|
298 | 330 |
} |
299 | 331 |
} |
300 | 332 |
break; |
... | ... | |
312 | 344 |
ARG(0), (int)ARG(1)); |
313 | 345 |
return; |
314 | 346 |
} else { |
315 |
p = lock_user_string(ARG(0)); |
|
316 |
result = system(p); |
|
317 |
unlock_user(p, ARG(0), 0); |
|
347 |
if (!(p = lock_user_string(ARG(0)))) { |
|
348 |
/* FIXME - check error code? */ |
|
349 |
result = -1; |
|
350 |
} else { |
|
351 |
result = system(p); |
|
352 |
unlock_user(p, ARG(0), 0); |
|
353 |
} |
|
318 | 354 |
} |
319 | 355 |
break; |
320 | 356 |
case HOSTED_INIT_SIM: |
Also available in: Unified diff