fixes after reviews

This commit is contained in:
Stéphane Lesimple
2019-06-04 17:14:37 +02:00
committed by Stéphane Lesimple
parent f5dcd9b816
commit 9c5116661f
6 changed files with 60 additions and 94 deletions

View File

@@ -13,16 +13,39 @@
#include "compress.h"
#include "configure.h"
compress_mode_t compress_mode = 0;
long compress_level = -1;
#ifdef HAVE_zstd
# include "compress_zstd.h"
#endif
void set_compress_mode(compress_mode_t cm)
size_t (*fread_wrapper)(void *ptr, size_t size, size_t nmemb, FILE *stream) = fread;
size_t (*fwrite_wrapper)(const void *ptr, size_t size, size_t nmemb, FILE *stream) = fwrite;
int (*fclose_wrapper)(FILE *fp) = fclose;
static long compress_level = -1;
int set_compress_mode(compress_mode_t cm)
{
compress_mode = cm;
switch (cm)
{
case COMPRESS_NONE:
fread_wrapper = fread;
fwrite_wrapper = fwrite;
fclose_wrapper = fclose;
break;
#ifdef HAVE_zstd
case COMPRESS_ZSTD:
fread_wrapper = fread_wrapper_zstd;
fwrite_wrapper = fwrite_wrapper_zstd;
fclose_wrapper = fclose_wrapper_zstd;
break;
#endif
default:
fprintf(stderr, "ttyrec: unsupported compression mode\r\n");
return 1;
}
return 0;
}
@@ -36,64 +59,3 @@ long get_compress_level(void)
{
return compress_level;
}
size_t fread_wrapper(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
if (compress_mode == COMPRESS_NONE)
{
return fread(ptr, size, nmemb, stream);
}
#ifdef HAVE_zstd
else if (compress_mode == COMPRESS_ZSTD)
{
return fread_wrapper_zstd(ptr, size, nmemb, stream);
}
#endif
else
{
fprintf(stderr, "ttyrec: unsupported compression mode (%d)\r\n", compress_mode);
exit(1);
}
}
size_t fwrite_wrapper(const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
if (compress_mode == COMPRESS_NONE)
{
return fwrite(ptr, size, nmemb, stream);
}
#ifdef HAVE_zstd
else if (compress_mode == COMPRESS_ZSTD)
{
return fwrite_wrapper_zstd(ptr, size, nmemb, stream);
}
#endif
else
{
fprintf(stderr, "ttyrec: unsupported compression mode (%d)\r\n", compress_mode);
exit(1);
}
}
int fclose_wrapper(FILE *fp)
{
if (compress_mode == COMPRESS_NONE)
{
return fclose(fp);
}
#ifdef HAVE_zstd
else if (compress_mode == COMPRESS_ZSTD)
{
return fclose_wrapper_zstd(fp);
}
#endif
else
{
fprintf(stderr, "ttyrec: unsupported compression mode (%d)\r\n", compress_mode);
fclose(fp);
exit(1);
}
}

View File

@@ -4,9 +4,9 @@
#include <stdlib.h>
#include <stdio.h>
size_t fwrite_wrapper(const void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fread_wrapper(void *ptr, size_t size, size_t nmemb, FILE *stream);
int fclose_wrapper(FILE *fp);
extern size_t (*fwrite_wrapper)(const void *ptr, size_t size, size_t nmemb, FILE *stream);
extern size_t (*fread_wrapper)(void *ptr, size_t size, size_t nmemb, FILE *stream);
extern int (*fclose_wrapper)(FILE *fp);
typedef enum
{
@@ -14,7 +14,7 @@ typedef enum
COMPRESS_ZSTD = 1,
} compress_mode_t;
void set_compress_mode(compress_mode_t cm);
int set_compress_mode(compress_mode_t cm);
void set_compress_level(long level);
long get_compress_level(void);

View File

@@ -91,7 +91,7 @@ size_t fwrite_wrapper_zstd(const void *ptr, size_t size, size_t nmemb, FILE *str
//fprintf(stderr, "[zstd:rst]");
}
// otherwise, check for last sync time. if it's > X seconds, force zstd to flush its buffers
// and write to disk. we don't want to loose data from almost-idle sessions in case of server crash
// and write to disk. we don't want to lose data from almost-idle sessions in case of server crash
else if (last_sync + zstd_max_flush_seconds < time(NULL))
{
ZSTD_outBuffer output = { buffOut, buffOutSize, 0 };
@@ -132,8 +132,8 @@ int fclose_wrapper_zstd(FILE *fp)
size_t fread_wrapper_zstd(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
// input: compressed data read from file
// output: decompressed data from (a part of) buffin
// buffoutptr: pointing to decompressed not-yet-returned to caller data (remaining bytes is buffoutptrlen)
// output: decompressed data from (a part of) input.src
// buffOutPtr: pointing to decompressed not-yet-returned-to-caller data (remaining bytes is buffOutPtrLen)
static ZSTD_inBuffer input = { NULL, 0, 0 };
@@ -193,7 +193,7 @@ DECOMPRESS:
{
output.pos = 0;
output.size = buffOutSize;
toRead = ZSTD_decompressStream(dstream, &output, &input); /* toRead : size of next compressed block */
toRead = ZSTD_decompressStream(dstream, &output, &input); /* toRead: size of next compressed block */
if (ZSTD_isError(toRead))
{
fprintf(stderr, "ZSTD_decompressStream() error: %s\r\n", ZSTD_getErrorName(toRead));
@@ -203,7 +203,7 @@ DECOMPRESS:
buffOutPtrLen = output.pos;
if (buffOutPtrLen == 0)
{
// ok this is an empty frame (or beggining of zst stream), read again
// ok this is an empty frame (or beginning of zst stream), read again
goto DECOMPRESS;
}
goto GOTDATA;

View File

@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
.TH TTYREC "1" "June 2019" "ttyrec v1.1.5.0
.TH TTYREC "1" "June 2019" "ttyrec v1.1.6.0" "User Commands"
.SH NAME
.SH NAME
ttyrec \- manual page for ttyrec v1.1.6.0
.SH SYNOPSIS
.B ttyrec
[\fI\,options\/\fR] \fI\,-- <command> \/\fR[\fI\,command options\/\fR]

View File

@@ -192,6 +192,7 @@ int ttyread(FILE *fp, Header *h, char **buf)
if (*buf == NULL)
{
perror("malloc");
return 1;
}
if (fread_wrapper(*buf, 1, h->len, fp) == 0)
@@ -327,9 +328,9 @@ int main(int argc, char **argv)
while (1)
{
#ifdef HAVE_zstd
int ch = getopt(argc, argv, "s:npZ");
int ch = getopt(argc, argv, "hs:npZ");
#else
int ch = getopt(argc, argv, "s:np");
int ch = getopt(argc, argv, "hs:np");
#endif
if (ch == EOF)
{
@@ -360,6 +361,7 @@ int main(int argc, char **argv)
break;
#endif
case 'h':
default:
usage();
}

View File

@@ -297,6 +297,8 @@ int main(int argc, char **argv)
{ "name-format", 1, 0, 'F' },
{ "warn-before-lock", 1, 0, 0 },
{ "warn-before-kill", 1, 0, 0 },
{ "help", 0, 0, 'h' },
{ "usage", 0, 0, 'h' },
{ 0, 0, 0, 0 }
};
int option_index = 0;
@@ -312,10 +314,10 @@ int main(int argc, char **argv)
case 0:
if (strcmp(long_options[option_index].name, "zstd-try") == 0)
{
#ifdef HAVE_zstd
opt_zstd++;
set_compress_mode(COMPRESS_ZSTD);
#endif
if (set_compress_mode(COMPRESS_ZSTD) == 0)
{
opt_zstd++;
}
}
else if (strcmp(long_options[option_index].name, "max-flush-time") == 0)
{
@@ -362,13 +364,12 @@ int main(int argc, char **argv)
// on-the-fly zstd compression
case 'Z':
#ifdef HAVE_zstd
if (set_compress_mode(COMPRESS_ZSTD) != 0)
{
fprintf(stderr, "zstd support has not been enabled at compile time.\r\n");
fail();
}
opt_zstd++;
set_compress_mode(COMPRESS_ZSTD);
#else
fprintf(stderr, "zstd support has not been enabled at compile time.\r\n");
fail();
#endif
break;
// compression level of compression algorithm
@@ -702,7 +703,7 @@ int main(int argc, char **argv)
exit(EXIT_FAILURE);
}
// we can get SIGHUP is our tty is closed, fclose() properly in that case
// we can get SIGHUP if our tty is closed, fclose() properly in that case
memset(&act, '\0', sizeof(act));
act.sa_handler = &sighup_handler;
act.sa_flags = SA_RESTART;
@@ -887,11 +888,11 @@ void doinput(void)
#ifdef __HAIKU__
// under Haiku, if we use BUFSIZ as read size, it reads 4 bytes per 4 bytes
// instead of returning read data as soon as possible
# define READSZ 1
const size_t readsz = 1;
#else
# define READSZ BUFSIZ
const size_t readsz = BUFSIZ;
#endif
while ((cc = read(0, ibuf, READSZ)) > 0)
while ((cc = read(0, ibuf, readsz)) > 0)
{
printdbg2("[in:%d]", cc);
if (!locked_since)
@@ -1028,7 +1029,7 @@ void set_ttyrec_file_name(char **nameptr)
}
if (opt_zstd)
{
// we can strcat safely becase we used BUFSIZ - 4 above
// we can strcat safely because we used BUFSIZ - 4 above
strcat(*nameptr, ".zst");
}
}
@@ -1551,6 +1552,7 @@ void sighup_handler(int signal)
done(EXIT_SUCCESS);
}
void done(int status)
{
if (subchild)