286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie/*
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie * This file and its contents are supplied under the terms of the
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie * Common Development and Distribution License ("CDDL"), version 1.0.
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie * You may only use this file in accordance with the terms of version
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie * 1.0 of the CDDL.
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie *
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie * A full copy of the text of the CDDL should have accompanied this
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie * source. A copy of the CDDL is also available via the Internet at
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie * http://www.illumos.org/license/CDDL.
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie */
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie/*
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie * Copyright (c) 2016 by Delphix. All rights reserved.
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie */
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie#include <stdio.h>
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie#include <stdlib.h>
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie#include <fcntl.h>
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie#include <string.h>
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie#include <errno.h>
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie#include <unistd.h>
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie#include <sys/param.h>
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie#define MAX_INT_LENGTH 10
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagneliestatic void
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelieusage(char *msg, int exit_value)
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie{
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie (void) fprintf(stderr, "mkfiles basename max_file [min_file]\n");
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie (void) fprintf(stderr, "%s\n", msg);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie exit(exit_value);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie}
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelieint
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagneliemain(int argc, char **argv)
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie{
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie unsigned int numfiles = 0;
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie unsigned int first_file = 0;
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie if (argc < 3 || argc > 4)
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie usage("Invalid number of arguments", -1);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie if (sscanf(argv[2], "%u", &numfiles) != 1)
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie usage("Invalid maximum file", -2);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie if (argc == 4 && sscanf(argv[3], "%u", &first_file) != 1)
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie usage("Invalid first file", -3);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie if (numfiles < first_file)
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie usage("First file larger than last file", -3);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie char buf[MAXPATHLEN];
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie for (unsigned int i = first_file; i <= numfiles; i++) {
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie int fd;
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie (void) snprintf(buf, MAXPATHLEN, "%s%u", argv[1], i);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie if ((fd = open(buf, O_CREAT | O_EXCL, O_RDWR)) == -1) {
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie (void) fprintf(stderr, "Failed to create %s %s\n", buf,
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie strerror(errno));
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie return (-4);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie }
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie (void) close(fd);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie }
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie return (0);
286ef71398fb54b1d5007d6f45aa4320a9e0ede2Paul Dagnelie}