/* * The author of this software is Eric Grosse. Copyright (c) 1993 by AT&T. * Permission to use, copy, modify, and distribute this software for any * purpose without fee is hereby granted, provided that this entire notice * is included in all copies of any software which is or includes a copy * or modification of this software and in all copies of the supporting * documentation for such software. * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. */ /* deprecated version of plausible.c, suitable for some non-POSIX systems */ typedef unsigned long ulong; #include #include #include #include #include #include #include char *progname; void filechk(f) char *f; { char *p; unsigned char c; if(!f || !*f) Error("null filename"); if(*f=='/') Error("leading slash"); if(strncmp(f,"../",3)==0) Error("leading .."); for(p = strchr(f,'/'); p; p = strchr(p+1,'/')) if(p[1]=='.' && p[2]=='.' && (p[3]==0 || p[3]=='/') ) Error("embedded .."); for(p = f; *p; p++){ c = *p; if( !isascii(c) || isspace(c) || !isprint(c) ) Error("bad char"); } } int main(argc, argv) int argc; char **argv; { int rc, removes = 0; ulong tim, len, sum; char cmd[21], name[2001]; double space = 0.; progname = argv[0]; while((rc=fscanf(stdin,"%20s %2000s %lu %lu %lx", cmd,name,&tim,&len,&sum))!=EOF){ if(rc!=5) Error("saw %d fields, expected 5",rc); filechk(name); switch(*cmd){ case 'g': /* get */ space += len; break; case 'r': /* rm */ space -= len; removes++; break; case 't': /* time */ break; default: Error("? %s %s",cmd,name); } } space /= 1.e6; if(space>50.){ fprintf(stderr,"will need %gMB additional disk\n",space); Error(""); } if(removes>50){ fprintf(stderr,"%d files to be removed\n",removes); Error(""); } exit(0); }