exfind.c source code

#include <pthread.h>
#include "readir.h" 

#include <stdio.h>
#include <unistd.h>
#include "filelist.h"

#include "pio.h"

#define SHOW_NOTE 											\
{                                                       	\
   perror("Format: exfind <path> [-name <file_name>] 		\
      	 [-sort name|type|size|time [-desc]] [-nostat]"); 	\
   return(0);     											\
}


int main(int argc, char *argv[])
{
    int i;
    FindData findData;
    pthread_t tid;


    if (argc == 1)
       SHOW_NOTE;
    
    findData.path = (char*)malloc(strlen(argv[1]) + 1);
    strcpy(findData.path, argv[1]);

    findData.fileName = 0;      

    for (i = 2; i <= argc - 1; i++)
    {
       if (!strcmp(argv[i], "-name"))
       {
          i++;
          if (i > argc - 1)
             SHOW_NOTE;
          findData.fileName = (char*)malloc(strlen(argv[i]) + 1);   
          strcpy(findData.fileName, argv[i]);
       }
       else
          if (!strcmp(argv[i], "-sort"))
          {
             i++;
             if (i > argc - 1)
                SHOW_NOTE;
                
             if (!strcmp(argv[i], "name"))
                sortField = SortByName;
             else   
                if (!strcmp(argv[i], "type"))
                   sortField = SortByType;
                else   
                   if (!strcmp(argv[i], "size"))
                      sortField = SortBySize;
                   else   
                      if (!strcmp(argv[i], "time"))
                         sortField = SortByTime;
                      else   
                         SHOW_NOTE;
          }
          else
             if (!strcmp(argv[i], "-desc"))
             {
             	ascSort = 0;
             }
             else
                if (!strcmp(argv[i], "-nostat"))
                {
                   showStat = 0;
                }
                else
                   SHOW_NOTE;      
     
    }
    
    if (sortField == NoSort)
       showStat = 0;

    if (pthread_create(&tid, NULL, showDir, (void*)&findData) == -1)
        perror("Create thread");
    else
       pthread_join(tid, NULL);

    free(findData.path);
    free(findData.fileName);
    
    return 0;
}