diff options
Diffstat (limited to 'usr/src/cmd/avs/dsw/iicpbmp.c')
-rw-r--r-- | usr/src/cmd/avs/dsw/iicpbmp.c | 260 |
1 files changed, 0 insertions, 260 deletions
diff --git a/usr/src/cmd/avs/dsw/iicpbmp.c b/usr/src/cmd/avs/dsw/iicpbmp.c deleted file mode 100644 index 382759b3fa..0000000000 --- a/usr/src/cmd/avs/dsw/iicpbmp.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include <sys/types.h> -#include <sys/time.h> -#include <errno.h> -#include <signal.h> -#include <stdio.h> -#include <string.h> -#include <fcntl.h> -#include <stdlib.h> -#include <unistd.h> -#include <values.h> -#include <locale.h> -#include <sys/stat.h> -#include <strings.h> -#include <stdarg.h> -#include <sys/param.h> -#include <nsctl.h> - -#include <sys/nsctl/cfg.h> -#include <sys/unistat/spcs_s.h> -#include <sys/unistat/spcs_s_u.h> -#include <sys/unistat/spcs_errors.h> -#include <sys/nsctl/dsw.h> -#include <sys/nsctl/dsw_dev.h> - -#define DSW_TEXT_DOMAIN "II" - -void iicpbmp_usage(); -void copybmp(char *, char *); -int find_bitmap_cfg(char *); - -extern int optind; - -char *cmdnam; - -extern char *optarg; -extern int optind, opterr, optopt; -int update_cfg = 1; -CFGFILE *cfg; -char shadow[DSW_NAMELEN]; -char buf[CFG_MAX_BUF]; -char key[CFG_MAX_KEY]; -int setnumber; - -#ifdef lint -int -iicpbmp_lintmain(int argc, char *argv[]) -#else -int -main(int argc, char *argv[]) -#endif -{ - cmdnam = argv[0]; - - if (argc > 1) { - if (strcmp(argv[1], "-c") == 0) { - /* don't update cfg information */ - update_cfg = 0; - argc--; - argv++; - } - } - - if (argc == 1 || (argc%2) == 0) /* must have pairs of filenames */ - iicpbmp_usage(); - - if (update_cfg) { - if ((cfg = cfg_open(NULL)) == NULL) { - (void) fprintf(stderr, - gettext("Error opening config\n")); - exit(1); - } - - if (!cfg_lock(cfg, CFG_WRLOCK)) { - spcs_log("ii", NULL, - "iicpbmp CFG_WRLOCK failed, errno %d", errno); - (void) fprintf(stderr, - gettext("Error locking config\n")); - exit(1); - } - } - - for (argv++; *argv != NULL; argv += 2) - copybmp(argv[0], argv[1]); - if (update_cfg) - cfg_close(cfg); - exit(0); - return (0); -} - -void -iicpbmp_usage() -{ - (void) fprintf(stderr, gettext("Usage:\n")); - (void) fprintf(stderr, - gettext("\tiicpbmp [-c] old_bitmap new_bitmap\n")); - exit(1); -} - -void -copybmp(char *old_bitmap, char *new_bitmap) -{ - int i; - int dsw_fd; - FILE *ifp, *ofp; - ii_header_t header; - char cp_buffer[256]; - dsw_stat_t args; - - dsw_fd = open(DSWDEV, O_RDONLY); - if (dsw_fd < 0) { - perror(DSWDEV); - exit(1); - } - if (*old_bitmap != '/' || *new_bitmap != '/') { - (void) fprintf(stderr, gettext("Both old and new bitmap " - "file names must begin with a /.\n")); - exit(1); - } - - if (strlen(new_bitmap) > DSW_NAMELEN) { - (void) fprintf(stderr, - gettext("New bitmap name is too long.\n")); - exit(1); - } - - if (update_cfg && find_bitmap_cfg(old_bitmap) == 0) { - perror(old_bitmap); - (void) fprintf(stderr, - gettext("Old bitmap not in existing cfg\n")); - exit(1); - } - - (void) strncpy(args.shadow_vol, shadow, DSW_NAMELEN); - args.shadow_vol[DSW_NAMELEN-1] = '\0'; - - args.status = spcs_s_ucreate(); - if (ioctl(dsw_fd, DSWIOC_STAT, &args) != -1) { - (void) fprintf(stderr, gettext("Suspend the Point-in-Time Copy " - "set first\n")); - (void) close(dsw_fd); - exit(1); - } - - if ((ifp = fopen(old_bitmap, "r")) == NULL) { - perror(old_bitmap); - (void) fprintf(stderr, gettext("Can't open old bitmap file\n")); - exit(1); - } - - /* Check old header looks like an Point-in-Time Copy bitmap header */ - - if (fread(&header, sizeof (header), 1, ifp) != 1) { - (void) fprintf(stderr, gettext("Can't read old bitmap file\n")); - exit(1); - } - - if (header.ii_magic != DSW_CLEAN && header.ii_magic != DSW_DIRTY) { - (void) fprintf(stderr, gettext("%s is not a Point-in-Time Copy " - "bitmap.\n"), old_bitmap); - exit(1); - } - - if (strncmp(header.bitmap_vol, old_bitmap, DSW_NAMELEN) != 0) { - (void) fprintf(stderr, gettext( - "%s has Point-in-Time Copy bitmap magic number,\n" - "but does not contain correct data.\n"), old_bitmap); - exit(1); - } - - if ((ofp = fopen(new_bitmap, "w")) == NULL) { - perror(new_bitmap); - (void) fprintf(stderr, gettext("Can't open new bitmap file\n")); - exit(1); - } - - /* Set up new header */ - - (void) memset(header.bitmap_vol, 0, DSW_NAMELEN); - (void) strncpy(header.bitmap_vol, new_bitmap, DSW_NAMELEN); - - if (fwrite(&header, sizeof (header), 1, ofp) != 1) { - perror(new_bitmap); - (void) fprintf(stderr, - gettext("Can't write new bitmap header\n")); - exit(1); - } - - /* Copy the bitmap itself */ - - while ((i = fread(cp_buffer, sizeof (char), sizeof (cp_buffer), ifp)) - > 0) { - if (fwrite(cp_buffer, sizeof (char), i, ofp) != i) { - perror(gettext("Write new bitmap failed")); - break; - } - } - (void) fclose(ofp); - (void) fclose(ifp); - (void) close(dsw_fd); - if (update_cfg) { - (void) sprintf(key, "ii.set%d.bitmap", setnumber); - if (cfg_put_cstring(cfg, key, new_bitmap, strlen(new_bitmap)) - < 0) { - perror("cfg_put_cstring"); - } - (void) cfg_commit(cfg); - spcs_log("ii", NULL, - "iicpbmp copy bit map for %s from %s to %s", - shadow, old_bitmap, new_bitmap); - } -} - -/* - * find_bitmap_cfg() - * - */ - -int -find_bitmap_cfg(char *bitmap) -{ - for (setnumber = 1; ; setnumber++) { - bzero(buf, CFG_MAX_BUF); - (void) snprintf(key, sizeof (key), "ii.set%d.bitmap", - setnumber); - - if (cfg_get_cstring(cfg, key, buf, DSW_NAMELEN) < 0) - return (0); - if (strcmp(buf, bitmap) == 0) { - (void) snprintf(key, sizeof (key), "ii.set%d.shadow", - setnumber); - (void) cfg_get_cstring(cfg, key, shadow, DSW_NAMELEN); - return (setnumber); - } - } -} |