blob: 07eb9c7f89235ed13baa4c3b660d543582663e3e [file] [log] [blame] [edit]
// Copyright 2025 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdio.h>
#include "zlib.h"
// To be compiled together with `zpipe.c` from zlib. Forward declarations:
int def(FILE *source, FILE *dest, int level);
int inf(FILE *source, FILE *dest);
void zerr(int ret);
// Exported to JavaScript:
int compressFile(const char* infilename, const char* outfilename)
{
FILE* infile = fopen(infilename, "rb");
if (infile == NULL) {
fputs("error opening input file", stderr);
return 1;
}
FILE* outfile = fopen(outfilename, "wb");
if (outfile == NULL) {
fputs("error opening output file", stderr);
return 1;
}
int ret = def(infile, outfile, Z_BEST_COMPRESSION);
if (ret != Z_OK)
zerr(ret);
if (fclose(infile)) {
fputs("error closing input file", stderr);
return 1;
}
if (fclose(outfile)) {
fputs("error closing output file", stderr);
return 1;
}
return ret;
}
int decompressFile(const char* infilename, const char* outfilename)
{
FILE* infile = fopen(infilename, "rb");
if (infile == NULL) {
fputs("error opening input file", stderr);
return 1;
}
FILE* outfile = fopen(outfilename, "wb");
if (outfile == NULL) {
fputs("error opening output file", stderr);
return 1;
}
int ret = inf(infile, outfile);
if (ret != Z_OK)
zerr(ret);
if (fclose(infile)) {
fputs("error closing input file", stderr);
return 1;
}
if (fclose(outfile)) {
fputs("error closing output file", stderr);
return 1;
}
return ret;
}