int isdir(const char *path, struct stat *statdat) { struct stat sb; if(statdat == NULL) { #ifdef _DEBUG printf("isdir()->STATING: %s\n", path); #endif if(statit(path, &sb) != TRUE) { if(errno != 0) { perror("isdir()->stat()"); } return FALSE; } if(S_ISDIR(sb.st_mode)) return TRUE; return FALSE; } if(S_ISDIR(statdat->st_mode)) return TRUE; return FALSE; }
int main(int argc, char *argv[]) { struct timeval etim; float elapsed; if (argc != 2) { fprintf(stderr, "usage: %s dir\n", argv[0]); exit(1); } starttime(); statit(argv[1]); endtime(&etim); elapsed = (float)etim.tv_sec + (float)etim.tv_usec / 1000000.0; fprintf(stdout, "%d calls in %f seconds (%f calls/sec)\n", stats, elapsed, (float)stats / elapsed); return (0); }
int checktype(const char *event_fpath, struct inotify_event *event, char *tstring, struct stat *statdat) { char mychar; char *tstring_tmp, *mystr; char *freeme; struct stat sb; char fpath[ELEMENT_SIZE * 2] = {0}; /* because we call it from multiple locations... */ if(event == NULL) { snprintf(fpath, (ELEMENT_SIZE * 2), "%s", event_fpath); } else { snprintf(fpath, (ELEMENT_SIZE * 2), "%s%s", event_fpath, event->name); } tstring_tmp = strdup(tstring); if(statdat == NULL) { if(statit(fpath, &sb) != TRUE) { fprintf(stderr, "ERROR: checktype()->statit() returned != TRUE!\n"); exit(EXIT_FAILURE); } } else { memcpy(&sb, statdat, sizeof(struct stat)); } while((mystr = strtok(tstring_tmp, DELIM))) { if(strlen(mystr) == 1) { mychar = mystr[0]; /* ATTENTION: do not miss to update *twhitelst at the top of this file! */ switch(mychar) { case 'f': if((sb.st_mode & S_IFMT) == S_IFREG) return TRUE; break; case 'd': if((sb.st_mode & S_IFMT) == S_IFDIR) return TRUE; break; case 's': if((sb.st_mode & S_IFMT) == S_IFLNK) return TRUE; break; case 'p': if((sb.st_mode & S_IFMT) == S_IFIFO) return TRUE; break; case 'c': if((sb.st_mode & S_IFMT) == S_IFCHR) return TRUE; break; case 'b': if((sb.st_mode & S_IFMT) == S_IFBLK) return TRUE; break; case 'o': if((sb.st_mode & S_IFMT) == S_IFSOCK) return TRUE; break; default : /* TODO: not existant! we should check that at startup! */ break; } } else { /* TODO: implement a startup check for this value... it should be of a type like this: a,b,c,d,e */ } freeme = tstring_tmp; tstring_tmp = NULL; } free(freeme); return FALSE; }