Commit c26c1c4b3d5d4b7bd9f986ab67608419e7abefe1
1 parent
c032e2a9
Support for unidirectional pipes, by Ed Swierk.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2267 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
17 additions
and
6 deletions
vl.c
@@ -1297,12 +1297,23 @@ CharDriverState *qemu_chr_open_file_out(const char *file_out) | @@ -1297,12 +1297,23 @@ CharDriverState *qemu_chr_open_file_out(const char *file_out) | ||
1297 | 1297 | ||
1298 | CharDriverState *qemu_chr_open_pipe(const char *filename) | 1298 | CharDriverState *qemu_chr_open_pipe(const char *filename) |
1299 | { | 1299 | { |
1300 | - int fd; | ||
1301 | - | ||
1302 | - fd = open(filename, O_RDWR | O_BINARY); | ||
1303 | - if (fd < 0) | ||
1304 | - return NULL; | ||
1305 | - return qemu_chr_open_fd(fd, fd); | 1300 | + int fd_in, fd_out; |
1301 | + char filename_in[256], filename_out[256]; | ||
1302 | + | ||
1303 | + snprintf(filename_in, 256, "%s.in", filename); | ||
1304 | + snprintf(filename_out, 256, "%s.out", filename); | ||
1305 | + fd_in = open(filename_in, O_RDWR | O_BINARY); | ||
1306 | + fd_out = open(filename_out, O_RDWR | O_BINARY); | ||
1307 | + if (fd_in < 0 || fd_out < 0) { | ||
1308 | + if (fd_in >= 0) | ||
1309 | + close(fd_in); | ||
1310 | + if (fd_out >= 0) | ||
1311 | + close(fd_out); | ||
1312 | + fd_in = fd_out = open(filename, O_RDWR | O_BINARY); | ||
1313 | + if (fd_in < 0) | ||
1314 | + return NULL; | ||
1315 | + } | ||
1316 | + return qemu_chr_open_fd(fd_in, fd_out); | ||
1306 | } | 1317 | } |
1307 | 1318 | ||
1308 | 1319 |