|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 3932 (0xf5c) Types: TextFile Names: »delete.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦653021b30⟧ »EurOpenD3/utils/downtime.tar.Z« └─⟦946c717da⟧ └─⟦this⟧ »delete.c«
/* * Copyright (c) 1988 Michael A. Cooper, University of Southern California. * This program may be used, copied, modified, and redistributed freely * for noncommercial purposes, so long as this notice remains intact. */ #ifndef lint static char *RCSid = "$Header: delete.c,v 4.1 88/07/05 15:59:14 mcooper Exp $"; #endif /* *------------------------------------------------------------------ * * $Source: /usr/skat3/src/common/usc/etc/downtime/RCS/delete.c,v $ * $Revision: 4.1 $ * $Date: 88/07/05 15:59:14 $ * $State: Exp $ * *------------------------------------------------------------------ * * Michael A. Cooper * Research and Development Group * University Computing Services * University of Southern California * (mcooper@oberon.USC.EDU) * *------------------------------------------------------------------ * * $Log: delete.c,v $ * Revision 4.1 88/07/05 15:59:14 mcooper * Added copyright notice. * * Revision 4.0 88/04/20 15:42:02 mcooper * Version 4. * * Revision 3.5 88/04/19 18:27:01 mcooper * Use stmsg() to print status of what * we are doing. * * Revision 3.4 88/04/15 16:13:02 mcooper * Use new flag bits (flags) D_KILL and * D_SENDCANCEL. * * Revision 3.3 88/04/11 20:39:44 mcooper * Remove stupid calls to dot(). * * Revision 3.2 88/02/11 19:00:07 mcooper * Fixed bug that caused cancel messages * to be send when shutdown time arrived. * * Revision 3.1 88/02/04 15:19:25 mcooper * - Fixed problem with sending a kill signal * to a running downtime process. * - Now send cancel messages via cancelmsg(). * * Revision 3.0 87/07/24 14:16:21 mcooper * Version 3. * *------------------------------------------------------------------ */ #include <signal.h> #include "defs.h" /* * delete - Delete entry marked as "date". */ delete(date, flags) char *date; int flags; { FILE *fd, *fdtmp; char buf[BUFSIZ], tmp[BUFSIZ]; char *tmpfile = TMPFILE; struct downtime *d; dtrewind(); if ((d = getdtdate(date)) == NULL) { fprintf(stderr, "No such entry as %s.\n", mkdate(dtot(date), D_DATE)); return(-1); } if ((flags & FORCE) == 0) { printf("\n"); prinfo(d); printf("\n"); if (!yes("Delete")) return(-1); } if ((flags & QUIET) == 0) { printf("\n Deleting [%s] ... ", mkdate(d->dt_down, D_DATE)); fflush(stdout); } /* * nuke the PID, if any */ if (flags & DOKILL && d->dt_islocked > 1) { stmsg("\n Killing active PID ..."); if (kill(d->dt_islocked, SIGKILL) < 0) { fprintf(stderr, "\nCould not kill PID %d: ", d->dt_islocked); perror(""); fprintf(stderr, "\n"); } } unlink(nologin); stmsg("\n Remove motd message ..."); /* * delete from motd if present */ delmotd(d); stmsg("\n Lock data file ..."); if (dtfilelock() < 0) { return(-1); } dtclose(); if ((fd = fopen(datafile, "r")) == NULL) { perror(datafile); return(-1); } mktemp(tmpfile); if ((fdtmp = fopen(tmpfile, "w")) == NULL) { perror(tmpfile); return(-1); } stmsg("\n Scanning data file ..."); while (fgets(buf, sizeof(buf), fd)) { sscanf(buf, "%s", tmp); if (strncmp(tmp, date, strlen(date))) fputs(buf, fdtmp); } fclose(fd); fclose(fdtmp); if (unlink(datafile) < 0) { fprintf(stderr, "unlink: "); perror(datafile); return(-1); } if (rename(tmpfile, datafile) < 0) { fprintf(stderr, "rename: %s --> ", tmpfile); perror(datafile); return(-1); } stmsg("\n Unlock data file ..."); if (dtfileunlock() < 0) { return(-1); } /* * Tell everyone that it's been canceled. */ if (flags & SENDCANCEL && !uflag) { stmsg("\n Sending cancel messages ..."); cancelmsg(d); } dtlog("DELETE: %s.", mkdate(d->dt_down, D_LOGFILE)); if ((flags & QUIET) == 0) { printf("done.\n\n"); } return(0); }