RTEMS | Add tar as shell command (#5772)
Sam Price (@TheSamPrice)
gitlab at rtems.org
Mon Sep 14 19:45:50 UTC 2026
Sam Price commented: https://gitlab.rtems.org/rtems/rtos/rtems/-/work_items/5772#note_159161
If it helps I am using zlib from RTEMS, with small wrappers around them.
Might be a starting point?
```c
#include <stdio.h>
#include <stdlib.h>
#include <zlib.h>
#include <rtems/shell.h>
#define CHUNK 16384
static int compress_file(const char *inpath) {
char outpath[256];
sprintf(outpath, "%s.gz", inpath);
FILE *fin = fopen(inpath, "rb");
gzFile fout = gzopen(outpath, "wb");
if (!fin || !fout) {
fprintf(stderr, "Error opening files\n");
if (fin) fclose(fin);
if (fout) gzclose(fout);
return -1;
}
char buf[CHUNK];
int len;
while ((len = fread(buf, 1, CHUNK, fin)) > 0) {
if (gzwrite(fout, buf, len) != len) {
fprintf(stderr, "Write error\n");
fclose(fin);
gzclose(fout);
return -1;
}
}
fclose(fin);
gzclose(fout);
printf("Compressed to %s\n", outpath);
return 0;
}
static int decompress_file(const char *inpath) {
if (!strstr(inpath, ".gz")) {
fprintf(stderr, "Input must end in .gz\n");
return -1;
}
char outpath[256];
strcpy(outpath, inpath);
outpath[strlen(outpath) - 3] = '\0'; // remove ".gz"
gzFile fin = gzopen(inpath, "rb");
FILE *fout = fopen(outpath, "wb");
if (!fin || !fout) {
fprintf(stderr, "Error opening files\n");
if (fin) gzclose(fin);
if (fout) fclose(fout);
return -1;
}
char buf[CHUNK];
int len;
while ((len = gzread(fin, buf, CHUNK)) > 0) {
if (fwrite(buf, 1, len, fout) != len) {
fprintf(stderr, "Write error\n");
gzclose(fin);
fclose(fout);
return -1;
}
}
gzclose(fin);
fclose(fout);
printf("Decompressed to %s\n", outpath);
return 0;
}
static int rtems_shell_compress(int argc, char **argv) {
if (argc != 2) {
printf("Usage: compress <file>\n");
return 1;
}
return compress_file(argv[1]);
}
static int rtems_shell_decompress(int argc, char **argv) {
if (argc != 2) {
printf("Usage: decompress <file.gz>\n");
return 1;
}
return decompress_file(argv[1]);
}
void rki_add_compress_commands(){
rtems_shell_add_cmd("compress", "file", "compress <file> \n Outputs file.gz", rtems_shell_compress);
rtems_shell_add_cmd("decompress", "file", "decompress <file.gz>", rtems_shell_decompress);
}
```
--
View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/work_items/5772#note_159161
You're receiving this email because of your account on gitlab.rtems.org. Unsubscribe from this thread: https://gitlab.rtems.org/-/namespace/49/sent_notifications/5-034w04llt2fcs6gqufzn0u0cy-1d/unsubscribe | Manage all notifications: https://gitlab.rtems.org/-/profile/notifications | Help: https://gitlab.rtems.org/help
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/bugs/attachments/20260914/fd1bbf08/attachment-0001.htm>
More information about the bugs
mailing list