mirror of
https://github.com/ovh/ovh-ttyrec.git
synced 2023-04-10 17:58:23 +03:00
fixes after reviews
This commit is contained in:
committed by
Stéphane Lesimple
parent
f5dcd9b816
commit
9c5116661f
94
compress.c
94
compress.c
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
32
ttyrec.c
32
ttyrec.c
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user