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