rmsnap.c revision 256281
140525Sjdp/*- 2199805Sattilio * Copyright (c) 2012 The FreeBSD Foundation 340525Sjdp * All rights reserved. 440525Sjdp * 540525Sjdp * This software was developed by Semihalf under sponsorship 640525Sjdp * from the FreeBSD Foundation. 740525Sjdp * 840525Sjdp * Redistribution and use in source and binary forms, with or without 940525Sjdp * modification, are permitted provided that the following conditions 1040525Sjdp * are met: 1140525Sjdp * 1240525Sjdp * 1. Redistributions of source code must retain the above copyright 1340525Sjdp * notice, this list of conditions and the following disclaimer. 1440525Sjdp * 2. Redistributions in binary form must reproduce the above copyright 1540525Sjdp * notice, this list of conditions and the following disclaimer in the 1640525Sjdp * documentation and/or other materials provided with the distribution. 1740525Sjdp * 1840525Sjdp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1940525Sjdp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2040525Sjdp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2140525Sjdp * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2240525Sjdp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2340525Sjdp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2440525Sjdp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2540525Sjdp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2640525Sjdp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2740525Sjdp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2893215Scharnier * SUCH DAMAGE. 2993215Scharnier */ 3093215Scharnier 3140525Sjdp#include <sys/cdefs.h> 3240525Sjdp__FBSDID("$FreeBSD: stable/10/sbin/nandfs/rmsnap.c 235537 2012-05-17 10:11:18Z gber $"); 33199805Sattilio#include <sys/types.h> 34103302Speter 35103299Speter#include <stdio.h> 36199805Sattilio#include <stdlib.h> 37199805Sattilio#include <limits.h> 38199805Sattilio#include <sysexits.h> 3976224Sobrien 4040525Sjdp#include <fs/nandfs/nandfs_fs.h> 4140525Sjdp#include <libnandfs.h> 4240525Sjdp 4340525Sjdp#include "nandfs.h" 4440525Sjdp 4540525Sjdpstatic void 4640525Sjdprmsnap_usage(void) 47102951Siedowse{ 4840525Sjdp 4940525Sjdp fprintf(stderr, "usage:\n"); 5040525Sjdp fprintf(stderr, "\trmsnap snap node\n"); 5140525Sjdp} 52199805Sattilio 5340525Sjdpint 5440525Sjdpnandfs_rmsnap(int argc, char **argv) 5540525Sjdp{ 5640525Sjdp struct nandfs fs; 5740525Sjdp uint64_t cpno; 5840525Sjdp int error; 5940525Sjdp 6040525Sjdp if (argc != 2) { 6140525Sjdp rmsnap_usage(); 6240525Sjdp return (EX_USAGE); 6340525Sjdp } 6440525Sjdp 6540525Sjdp cpno = strtoll(argv[0], (char **)NULL, 10); 6640525Sjdp if (cpno == 0) { 6740525Sjdp fprintf(stderr, "%s must be a number greater than 0\n", 6840525Sjdp argv[0]); 6940525Sjdp return (EX_USAGE); 7040525Sjdp } 7140525Sjdp 7240525Sjdp nandfs_init(&fs, argv[1]); 7340525Sjdp error = nandfs_open(&fs); 7440525Sjdp if (error == -1) { 7540525Sjdp fprintf(stderr, "nandfs_open: %s\n", nandfs_errmsg(&fs)); 7640525Sjdp goto out; 7740525Sjdp } 78199805Sattilio 79199805Sattilio error = nandfs_delete_snap(&fs, cpno); 8040525Sjdp if (error == -1) 8140525Sjdp fprintf(stderr, "nandfs_delete_snap: %s\n", nandfs_errmsg(&fs)); 8240525Sjdp 8340525Sjdpout: 8440525Sjdp nandfs_close(&fs); 85199805Sattilio nandfs_destroy(&fs); 86199805Sattilio return (error); 87103299Speter} 88125859Sdwmalone