For over a year, ogg123 has been broken for pipe playback. I'm not sure why this easy bug was here so long, but I've finally fixed it. The patch is attached, and I've committed it to HEAD. This fixes Debian Bug#237187. It would be nice if Chris uploaded an updated package that closes this. jack. -------------- next part -------------- Index: ogg123/file_transport.c ==================================================================--- ogg123/file_transport.c (revision 9695) +++ ogg123/file_transport.c (working copy) @@ -26,6 +26,7 @@ typedef struct file_private_t { FILE *fp; data_source_stats_t stats; + int seekable; } file_private_t; @@ -51,6 +52,7 @@ source->transport = &file_transport; source->private = private; + private->seekable = 1; private->stats.transfer_rate = 0; private->stats.bytes_read = 0; private->stats.input_buffer_used = 0; @@ -60,9 +62,10 @@ } /* Open file */ - if (strcmp(source_string, "-") == 0) + if (strcmp(source_string, "-") == 0) { private->fp = stdin; - else + private->seekable = 0; + } else private->fp = fopen(source_string, "r"); if (private->fp == NULL) { @@ -84,6 +87,8 @@ int items; long start; + if (!private->seekable) return 0; + /* Record where we are */ start = ftell(fp); @@ -118,6 +123,8 @@ file_private_t *private = source->private; FILE *fp = private->fp; + if (!private->seekable) return -1; + return fseek(fp, offset, whence); } @@ -135,6 +142,8 @@ file_private_t *private = source->private; FILE *fp = private->fp; + if (!private->seekable) return -1; + return ftell(fp); }