1 /* 2 * CDDL HEADER START 3 * 4 * This file and its contents are supplied under the terms of the 5 * Common Development and Distribution License ("CDDL"), version 1.0. 6 * You may only use this file in accordance with the terms of version 7 * 1.0 of the CDDL. 8 * 9 * A full copy of the text of the CDDL should have accompanied this 10 * source. A copy of the CDDL is also available via the Internet at 11 * http://www.illumos.org/license/CDDL. 12 * 13 * CDDL HEADER END 14 */ 15 16 /* 17 * Copyright (c) 2020 by Delphix. All rights reserved. 18 * Copyright (c) 2020 by Datto Inc. All rights reserved. 19 */ 20 #include <sys/types.h> 21 #include <sys/stat.h> 22 #include <fcntl.h> 23 #include <ctype.h> 24 #include <stdio.h> 25 #include <stdlib.h> 26 #include <string.h> 27 #include <unistd.h> 28 #include <libintl.h> 29 #include <stddef.h> 30 #include <libzfs.h> 31 #include "zstream.h" 32 33 void 34 zstream_usage(void) 35 { 36 (void) fprintf(stderr, 37 "usage: zstream command args ...\n" 38 "Available commands are:\n" 39 "\n" 40 "\tzstream dump [-vCd] FILE\n" 41 "\t... | zstream dump [-vCd]\n" 42 "\n" 43 "\tzstream decompress [-v] [OBJECT,OFFSET[,TYPE]] ...\n" 44 "\n" 45 "\tzstream recompress [ -l level] TYPE\n" 46 "\n" 47 "\tzstream token resume_token\n" 48 "\n" 49 "\tzstream redup [-v] FILE | ...\n"); 50 exit(1); 51 } 52 53 int 54 main(int argc, char *argv[]) 55 { 56 char *basename = strrchr(argv[0], '/'); 57 basename = basename ? (basename + 1) : argv[0]; 58 if (argc >= 1 && strcmp(basename, "zstreamdump") == 0) 59 return (zstream_do_dump(argc, argv)); 60 61 if (argc < 2) 62 zstream_usage(); 63 64 char *subcommand = argv[1]; 65 66 if (strcmp(subcommand, "dump") == 0) { 67 return (zstream_do_dump(argc - 1, argv + 1)); 68 } else if (strcmp(subcommand, "decompress") == 0) { 69 return (zstream_do_decompress(argc - 1, argv + 1)); 70 } else if (strcmp(subcommand, "recompress") == 0) { 71 return (zstream_do_recompress(argc - 1, argv + 1)); 72 } else if (strcmp(subcommand, "token") == 0) { 73 return (zstream_do_token(argc - 1, argv + 1)); 74 } else if (strcmp(subcommand, "redup") == 0) { 75 return (zstream_do_redup(argc - 1, argv + 1)); 76 } else { 77 zstream_usage(); 78 } 79 } 80