mirror of
https://github.com/emmanuel-marty/lzsa.git
synced 2024-11-21 14:31:01 +00:00
Allow piping files to stdin and stdout
This commit is contained in:
parent
c0259a77b4
commit
c1a2e9a82c
29
src/stream.c
29
src/stream.c
@ -34,6 +34,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <io.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Close file stream
|
* Close file stream
|
||||||
@ -98,7 +102,30 @@ static int lzsa_filestream_eof(lzsa_stream_t *stream) {
|
|||||||
* @return 0 for success, nonzero for failure
|
* @return 0 for success, nonzero for failure
|
||||||
*/
|
*/
|
||||||
int lzsa_filestream_open(lzsa_stream_t *stream, const char *pszInFilename, const char *pszMode) {
|
int lzsa_filestream_open(lzsa_stream_t *stream, const char *pszInFilename, const char *pszMode) {
|
||||||
stream->obj = (void*)fopen(pszInFilename, pszMode);
|
const char* stdInOutFile = "-";
|
||||||
|
const char* stdInMode = "rb";
|
||||||
|
const char* stdOutMode = "wb";
|
||||||
|
int result;
|
||||||
|
|
||||||
|
if (!strncmp(pszInFilename, stdInOutFile, 1)) {
|
||||||
|
if (!strncmp(pszMode, stdInMode, 2)) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
result = _setmode(_fileno(stdin), _O_BINARY);
|
||||||
|
#endif
|
||||||
|
stream->obj = stdin;
|
||||||
|
} else if (!strncmp(pszMode, stdOutMode, 2)) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
result = _setmode(_fileno(stdout), _O_BINARY);
|
||||||
|
#endif
|
||||||
|
stream->obj = stdout;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
stream->obj = (void*)fopen(pszInFilename, pszMode);
|
||||||
|
}
|
||||||
|
|
||||||
if (stream->obj) {
|
if (stream->obj) {
|
||||||
stream->read = lzsa_filestream_read;
|
stream->read = lzsa_filestream_read;
|
||||||
stream->write = lzsa_filestream_write;
|
stream->write = lzsa_filestream_write;
|
||||||
|
Loading…
Reference in New Issue
Block a user