From c59c0c98472505a12424ae536a6bff5ff1e1b483 Mon Sep 17 00:00:00 2001 From: moritz Date: Sun, 30 Aug 2009 21:46:15 +0000 Subject: [PATCH] Support reading playlists from standard input. git-svn-id: https://svn.xiph.org/trunk/ezstream@16536 0101bb08-14d6-0310-b084-bc0e0c8e3800 --- src/ezstream.h | 4 ++++ src/playlist.c | 24 +++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/ezstream.h b/src/ezstream.h index d76de68..63086c3 100644 --- a/src/ezstream.h +++ b/src/ezstream.h @@ -49,6 +49,10 @@ # include #endif +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif /* !STDIN_FILENO */ + #ifndef _PATH_DEVNULL # ifdef WIN32 # define _PATH_DEVNULL "nul" diff --git a/src/playlist.c b/src/playlist.c index 7234283..a0e1c62 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -131,12 +131,22 @@ playlist_read(const char *filename) FILE *filep; char buf[PATH_MAX]; - pl = playlist_create(filename); + if (filename != NULL) { + pl = playlist_create(filename); - if ((filep = fopen(filename, "r")) == NULL) { - printf("%s: %s: %s\n", __progname, filename, strerror(errno)); - playlist_free(&pl); - return (NULL); + if ((filep = fopen(filename, "r")) == NULL) { + printf("%s: %s: %s\n", __progname, filename, strerror(errno)); + playlist_free(&pl); + return (NULL); + } + } else { + pl = playlist_create("stdin"); + + if ((filep = fdopen(STDIN_FILENO, "r")) == NULL) { + printf("%s: stdin: %s\n", __progname, strerror(errno)); + playlist_free(&pl); + return (NULL); + } } line = 0; @@ -147,7 +157,7 @@ playlist_read(const char *filename) char skip_buf[2]; printf("%s[%lu]: File or path name too long\n", - filename, line); + pl->filename, line); /* Discard any excess chars in that line. */ while (fgets(skip_buf, (int)sizeof(skip_buf), filep) != NULL) { if (skip_buf[0] == '\n') @@ -181,7 +191,7 @@ playlist_read(const char *filename) } if (ferror(filep)) { printf("%s: playlist_read(): Error while reading %s: %s\n", - __progname, filename, strerror(errno)); + __progname, pl->filename, strerror(errno)); fclose(filep); playlist_free(&pl); return (NULL);