Changeset 2059:916b1d6f2b91 in roaraudio for libroar/vio.c
- Timestamp:
- 07/08/09 01:44:25 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/vio.c
r2054 r2059 280 280 } 281 281 282 283 int roar_vio_open_stdio (struct roar_vio_calls * calls, FILE * dst) {284 #ifndef ROAR_WITHOUT_VIO_STDIO285 if ( calls == NULL || dst == NULL )286 return -1;287 288 memset(calls, 0, sizeof(struct roar_vio_calls));289 290 calls->read = roar_vio_stdio_read;291 calls->write = roar_vio_stdio_write;292 calls->lseek = roar_vio_stdio_lseek;293 calls->sync = roar_vio_stdio_sync;294 calls->close = roar_vio_stdio_close;295 296 calls->inst = dst;297 298 return 0;299 #else300 return -1;301 #endif302 }303 304 FILE * roar_vio_to_stdio (struct roar_vio_calls * calls, int flags) {305 #ifdef ROAR_HAVE_FOPENCOOKIE306 cookie_io_functions_t foc_funcs;307 #endif308 309 if ( calls == NULL )310 return NULL;311 312 #if defined(ROAR_HAVE_FOPENCOOKIE)313 memset(&foc_funcs, 0, sizeof(cookie_io_functions_t));314 315 foc_funcs.close = roar_vio_to_stdio_close;316 foc_funcs.read = roar_vio_to_stdio_read;317 foc_funcs.write = roar_vio_to_stdio_write;318 319 return fopencookie((void*) calls, "rw", foc_funcs);320 #elif defined(ROAR_HAVE_FUNOPEN)321 return funopen((void*) calls, roar_vio_to_stdio_read, roar_vio_to_stdio_write,322 roar_vio_to_stdio_lseek, roar_vio_to_stdio_close);323 #else324 return NULL;325 #endif326 }327 328 #if defined(ROAR_HAVE_FOPENCOOKIE) || defined(ROAR_HAVE_FUNOPEN)329 int roar_vio_to_stdio_close (void *__cookie) {330 return roar_vio_close((struct roar_vio_calls *) __cookie);331 }332 333 #if defined(ROAR_HAVE_FOPENCOOKIE)334 __ssize_t roar_vio_to_stdio_read (void *__cookie, char *__buf, size_t __nbytes) {335 #elif defined(ROAR_HAVE_FUNOPEN)336 int roar_vio_to_stdio_read(void *__cookie, char *__buf, int __nbytes) {337 #endif338 return roar_vio_read((struct roar_vio_calls *) __cookie, __buf, __nbytes);339 }340 341 #if defined(ROAR_HAVE_FOPENCOOKIE)342 __ssize_t roar_vio_to_stdio_write (void *__cookie, __const char *__buf, size_t __n) {343 #elif defined(ROAR_HAVE_FUNOPEN)344 int roar_vio_to_stdio_write(void *__cookie, const char *__buf, int __n) {345 #endif346 return roar_vio_write((struct roar_vio_calls *) __cookie, (char *) __buf, __n);347 }348 349 #if defined(ROAR_HAVE_FOPENCOOKIE)350 int roar_vio_to_stdio_lseek (void *__cookie, _IO_off64_t *__pos, int __w);351 #elif defined(ROAR_HAVE_FUNOPEN)352 fpos_t roar_vio_to_stdio_lseek(void *__cookie, fpos_t __pos, int __w) {353 return roar_vio_lseek((struct roar_vio_calls *) __cookie, __pos, __w);354 }355 #endif356 #endif357 358 282 // VIOs: 359 283 … … 610 534 } 611 535 612 // stdio:613 #ifndef ROAR_WITHOUT_VIO_STDIO614 ssize_t roar_vio_stdio_read (struct roar_vio_calls * vio, void *buf, size_t count) {615 return fread(buf, 1, count, (FILE*)(vio->inst));616 }617 618 ssize_t roar_vio_stdio_write (struct roar_vio_calls * vio, void *buf, size_t count) {619 return fwrite(buf, 1, count, (FILE*)(vio->inst));620 }621 622 off_t roar_vio_stdio_lseek (struct roar_vio_calls * vio, off_t offset, int whence) {623 if ( fseek((FILE*)(vio->inst), offset, whence) == -1 )624 return -1;625 626 return ftell((FILE*)(vio->inst));627 }628 629 int roar_vio_stdio_sync (struct roar_vio_calls * vio) {630 return fflush((FILE*)(vio->inst));631 }632 633 int roar_vio_stdio_ctl (struct roar_vio_calls * vio, int cmd, void * data) {634 635 if ( vio == NULL || cmd == -1 )636 return -1;637 638 switch (cmd) {639 case ROAR_VIO_CTL_GET_FH:640 case ROAR_VIO_CTL_GET_READ_FH:641 case ROAR_VIO_CTL_GET_WRITE_FH:642 *(int*)data = fileno((FILE*)(vio->inst));643 return 0;644 break;645 }646 647 return -1;648 }649 650 int roar_vio_stdio_close (struct roar_vio_calls * vio) {651 return fclose((FILE*)(vio->inst));652 }653 #endif654 655 536 //ll
Note: See TracChangeset
for help on using the changeset viewer.