Unified · Split
| @@ -7,7 +7,7 @@ int fdclose(ReadWriter*); · 6 unmodified lines | |||
| 7 | long fdread(ReadWriter*, void*, long, vlong); | 7 | long fdread(ReadWriter*, void*, long, vlong); |
| 8 | long fdwrite(ReadWriter*, void*, long, vlong); | 8 | long fdwrite(ReadWriter*, void*, long, vlong); |
| 9 | 9 | ||
| 10 | ReadWriter fdrdwr { | 10 | ReadWriter fdrdwr = { |
| 11 | .open = fdopen, | 11 | .open = fdopen, |
| 12 | .close = fdclose, | 12 | .close = fdclose, |
| 13 | .pread = fdread, | 13 | .pread = fdread, |
| @@ -54,6 +54,6 @@ fd2gio(int fd) · 40 unmodified lines | |||
| 54 | { | 54 | { |
| 55 | void *x = malloc(sizeof(int)); | 55 | void *x = malloc(sizeof(int)); |
| 56 | memcpy(x, &fd, sizeof(int)); | 56 | memcpy(x, &fd, sizeof(int)); |
| 57 | return gopen(fdrdwr, x); | 57 | return gopen(&fdrdwr, x); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| @@ -21,12 +21,13 @@ getnext(void) · 20 unmodified lines | |||
| 21 | ReadWriter* | 21 | ReadWriter* |
| 22 | getrdstruct(int fd) | 22 | getrdstruct(int fd) |
| 23 | { | 23 | { |
| 24 | rlock(giolock); | 24 | rlock(&giolock); |
| 25 | ReadWriter *rval; | 25 | ReadWriter *rval; |
| 26 | if(gio_filedes_st[fd] != 1) | 26 | if(gio_filedes_st[fd] != 1) |
| 27 | rval = nil; | 27 | rval = nil; |
| 28 | rval = gio_filedes[fd]; | 28 | rval = gio_filedes[fd]; |
| 29 | runlock(giolock); | 29 | runlock(&giolock); |
| 30 | return rval; | ||
| 30 | } | 31 | } |
| 31 | 32 | ||
| 32 | int | 33 | int |
| @@ -35,9 +36,9 @@ gopen(ReadWriter* rd, void *aux) · 2 unmodified lines | |||
| 35 | int pfd; | 36 | int pfd; |
| 36 | ReadWriter *buf; | 37 | ReadWriter *buf; |
| 37 | 38 | ||
| 38 | wlock(giolock); | 39 | wlock(&giolock); |
| 39 | if(pfd == -1){ | 40 | if(pfd == -1){ |
| 40 | wunlock(giolock); | 41 | wunlock(&giolock); |
| 41 | return -1; | 42 | return -1; |
| 42 | } | 43 | } |
| 43 | buf = malloc(sizeof(ReadWriter)); | 44 | buf = malloc(sizeof(ReadWriter)); |
| @@ -50,13 +51,13 @@ gopen(ReadWriter* rd, void *aux) · 6 unmodified lines | |||
| 50 | if((buf->open(buf)) != 0){ | 51 | if((buf->open(buf)) != 0){ |
| 51 | buf->close(buf); | 52 | buf->close(buf); |
| 52 | free(buf); | 53 | free(buf); |
| 53 | wunlock(giolock); | 54 | wunlock(&giolock); |
| 54 | return -1; | 55 | return -1; |
| 55 | } | 56 | } |
| 56 | } | 57 | } |
| 57 | gio_filedes[pfd] = buf; | 58 | gio_filedes[pfd] = buf; |
| 58 | gio_filedes_st[pfd] = 1; | 59 | gio_filedes_st[pfd] = 1; |
| 59 | wunlock(giolock); | 60 | wunlock(&giolock); |
| 60 | return pfd; | 61 | return pfd; |
| 61 | } | 62 | } |
| 62 | 63 | ||
| @@ -68,14 +69,14 @@ gclose(int fd) · 5 unmodified lines | |||
| 68 | 69 | ||
| 69 | if(gio_filedes_st[fd] == 0) | 70 | if(gio_filedes_st[fd] == 0) |
| 70 | return -1; | 71 | return -1; |
| 71 | wlock(giolock); | 72 | wlock(&giolock); |
| 72 | bf = gio_filedes[fd]; | 73 | bf = gio_filedes[fd]; |
| 73 | if(bf->close != nil) | 74 | if(bf->close != nil) |
| 74 | rval = bf->close(bf); | 75 | rval = bf->close(bf); |
| 75 | free(bf); | 76 | free(bf); |
| 76 | gio_filedes_st[fd] = 0; | 77 | gio_filedes_st[fd] = 0; |
| 77 | gio_filedes[fd] = nil; | 78 | gio_filedes[fd] = nil; |
| 78 | wunlock(giolock); | 79 | wunlock(&giolock); |
| 79 | return rval; | 80 | return rval; |
| 80 | } | 81 | } |
| 81 | 82 | ||