/* * Copyright (c) 1985 Corporation for Research and Educational Networking * Copyright (c) 1988 University of Illinois Board of Trustees, Steven * Dorner, and Paul Pomes * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Corporation for * Research and Educational Networking (CREN), the University of * Illinois at Urbana, and their contributors. * 4. Neither the name of CREN, the University nor the names of their * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE TRUSTEES AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef lint static char RcsId[] = "@(#)$Id: credb.c,v 1.8 1994/03/12 00:59:25 paul Exp $"; #endif /* * This program creates the files associated with a database. if the name of * the database is given, then all files are made. If a specific file is * named then that file only is made. A database name can't contain a ".". * The size is mandatory and is used to build the .idx file. */ #include "protos.h" #define DIR 1 #define INDEX 2 static char *Me; /* the name of this program */ main(argc, argv) int argc; char **argv; { int fd, fsize, ftype; char zero = 0; char *dotptr; char tmp[100]; struct dirhead Dirhead; /* when you're strange, no one remembers your name */ Me = *argv; while (--argc > 0 && **(++argv) == '-') { char *equal, **opt; (*argv)++; if (equal = strchr(*argv, '=')) { *equal++ = '\0'; for (opt = Strings; *opt; opt += 2) if (!strcmp(opt[0], *argv)) { opt[1] = equal; break; } if (*opt == '\0') { fprintf(stderr, "%s: %s: unknown string.\n", Me, *argv); exit(1); } } else { fprintf(stderr, "%s: %s: unknown option.\n", Me, *argv); exit(1); } } if (argc < 1 || (fsize = atoi(*argv)) == 0) { printf("usage: %s size [filename[.(idx|dir)]]\n", Me); exit(1); } fsize *= (sizeof (struct iindex)); argc--; argv++; Database = (argc > 0) ? *argv : DATABASE; fprintf(stderr, "%s: creating database %s\n", Me, Database); sleep(5); if (!(dotptr = strrchr(Database, '.'))) /* create all */ ftype = INDEX | DIR; else if (!strcmp(dotptr + 1, "dir")) { ftype = DIR; *dotptr = '\0'; } else if (!strcmp(dotptr + 1, "idx")) { ftype = INDEX; *dotptr = '\0'; } if (ftype & INDEX) { /* make index file ,uses size */ if (!strchr(Database, '.')) sprintf(tmp, "%s.idx", Database); else strcpy(tmp, Database); if (!(fd = creat(tmp, 0664))) { perror(tmp); exit(1); } if (lseek(fd, fsize - 1, 0) < 0) { perror(tmp); exit(1); } if (write(fd, &zero, 1) < 0) { perror(tmp); exit(1); } printf("%s : %d bytes\n", tmp, fsize); close(fd); /* create overflow file */ sprintf(tmp, "%s.iov", Database); if (!(fd = creat(tmp, 0664))) { perror(tmp); exit(1); } close(fd); } if (ftype & DIR) { if (!strchr(Database, '.')) sprintf(tmp, "%s.dir", Database); else strcpy(tmp, Database); if (!(fd = creat(tmp, 0664))) { perror(tmp); exit(1); } Dirhead.nents = 0; Dirhead.next_id = 1; Dirhead.nfree = 0; if (lseek(fd, 0, 0) < 0) { perror(tmp); exit(1); } if (write(fd, &Dirhead, sizeof (Dirhead)) < 0) { perror(tmp); exit(1); } fsize = (sizeof (DREC)); if (lseek(fd, fsize - 1, 0) < 0) { perror(tmp); exit(1); } if (write(fd, &zero, 1) < 0) { perror(tmp); exit(1); } printf("%s : %d bytes\n", tmp, fsize); close(fd); /* create overflow file */ sprintf(tmp, "%s.dov", Database); if (!(fd = creat(tmp, 0664))) { perror(tmp); exit(1); } close(fd); } exit(0); }