5748452 [rkeene@sledge /home/rkeene/devel/mooselinux-0.0.19/src]$ cat -n rm.c
  1 /*
  2     Condensed version of `rm', optimized for space, sortof
  3 
  4     042720000103: TODO: Add support for -[rR] !
  5     
  6 */
  7 
  8 
  9 #include <stdio.h>
 10 #include <unistd.h>
 11 #include <stdlib.h>
 12 #include <sys/stat.h>
 13 #include <sys/types.h>
 14 #include "version.h"
 15 #include "rm.h"
 16 
 17 extern char *optarg;
 18 extern int optind, opterr, optopt;
 19 
 20 int rm_main (int argc, char **argv) {
 21     unsigned int error_code=0;
 22     struct stat statbuf;
 23     char ch;
 24     char option_dir=0;
 25     char option_force=0;
 26     char option_interactive=0;
 27     char option_recurse=0;
 28     char option_verbose=0;
 29     char input_buff[127];
 30     int i;
 31 
 32     while ((ch=getopt(argc, argv, "dfirvR")) != -1) {
 33         switch (ch) {
 34             case 'd':
 35                 option_dir=1;
 36                 break;
 37             case 'f':
 38                 option_interactive=0;
 39                 option_force=1;
 40                 break;
 41             case 'i':
 42                 option_force=0;
 43                 option_interactive=1;
 44                 break;
 45             case 'r':
 46             case 'R':
 47                 option_recurse=1;
 48                 break;
 49             case 'v':
 50                 option_verbose=1;
 51                 break;
 52             default:
 53                 return(-1);
 54         }
 55     }
 56 
 57     if (optind==argc) {
 58         write(STDERR_FILENO, "rm: too few arguments\n",22);
 59         return(!option_force);
 60     }
 61 
 62     for (i=optind;i<argc;i++) {
 63         if (stat(argv[i], &statbuf)<0) {
 64             if (!option_force) {
 65                 write(STDERR_FILENO, "rm: ", 4);
 66                 perror(argv[i]);
 67             }
 68             error_code=1;
 69             goto loop;
 70         }
 71         if (S_ISDIR(statbuf.st_mode) && option_dir==0) {
 72             if (option_recurse) {
 73 
 74 /*  TODO: Add recursion code here */
 75 
 76             }
 77             write(STDERR_FILENO, "rm: ",4);
 78             write(STDERR_FILENO, argv[i], strlen(argv[i]));
 79             write(STDERR_FILENO, " is a directory\n",16);
 80             error_code=2;
 81             goto loop;
 82         }
 83         if (option_interactive) {
 84             write(STDOUT_FILENO, "rm: remove `", 12);
 85             write(STDOUT_FILENO, argv[i], strlen(argv[i]));
 86             write(STDOUT_FILENO, "\'? ", 3);
 87             read(STDIN_FILENO, &input_buff, sizeof(input_buff));
 88             if (input_buff[0]!='y' && input_buff[0]!='Y') goto loop;
 89         }
 90         if (option_verbose) 
 91             write(STDOUT_FILENO,argv[i],strlen(argv[i]));
 92         if (unlink(argv[i])<0) {
 93             write(STDERR_FILENO, "rm: ", 4);
 94             perror(argv[i]);
 95             error_code=2;
 96         }
 97 loop:
 98     }
 99     return((option_force==0 || error_code>1));
100 }
5748453 [rkeene@sledge /home/rkeene/devel/mooselinux-0.0.19/src]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-04-28 23:02:04