static void hash_dir( int out, const char *path ) { DIR *dir; struct dirent *entry; dir = rb->opendir( path ); if( dir ) { while( !quit && ( entry = rb->readdir( dir ) ) ) { char childpath[MAX_PATH]; rb->snprintf( childpath, MAX_PATH, "%s/%s", rb->strcmp( path, "/" ) ? path : "", entry->d_name ); if( entry->attribute & ATTR_DIRECTORY ) { if( rb->strcmp( entry->d_name, "." ) && rb->strcmp( entry->d_name, ".." ) ) { /* Got a sub directory */ hash_dir( out, childpath ); } } else { /* Got a file */ hash_file( out, childpath ); } } rb->closedir( dir ); } }
int main(int argc, char **argv) { const char *env, *opt; int i, numargs, r = 0; evpmd = EVP_sha1(); evpmdsize = EVP_MD_size(evpmd); numargs = argc; for (i = 1; i < argc; i++) { if (argv[i][0] != '-') continue; if (strcmp(argv[i], "--") == 0) { argv[i] = 0; numargs--; break; } opt = &argv[i][1]; if (strcmp(opt, "compat") == 0) { do_hash_new = do_hash_old = 1; } else if (strcmp(opt, "old") == 0) { do_hash_new = 0; do_hash_old = 1; } else if (strcmp(opt, "n") == 0) { do_remove_links = 0; } else if (strcmp(opt, "v") == 0) { do_verbose++; } else { if (strcmp(opt, "h") != 0) fprintf(stderr, "unknown option %s\n", argv[i]); c_rehash_usage(); return 1; } argv[i] = 0; numargs--; } if (numargs > 1) { for (i = 1; i < argc; i++) if (argv[i]) r |= hash_dir(argv[i]); } else if ((env = getenv("SSL_CERT_DIR")) != NULL) { char *e, *m; m = strdup(env); for (e = strtok(m, ":"); e != NULL; e = strtok(NULL, ":")) r |= hash_dir(e); free(m); } else { r |= hash_dir("/etc/ssl/certs"); } return r ? 2 : 0; }
int find_dir (char *name) { int rc; find_search_s s; s.key = hash_dir(name); s.name = name; rc = search( &Tree, s.key, find_search, &s); return rc; }
int main(int argc, char **argv) { const char *env; int i; evpmd = EVP_sha1(); evpmdsize = EVP_MD_size(evpmd); if (argc > 1) { for (i = 1; i < argc; i++) hash_dir(argv[i]); } else if ((env = getenv("SSL_CERT_DIR")) != NULL) { char *e, *m; m = strdup(env); for (e = strtok(m, ":"); e != NULL; e = strtok(NULL, ":")) hash_dir(e); free(m); } else { hash_dir("/etc/ssl/certs"); } return 0; }
int delete_dir (char *name) { int rc; delete_search_s s; s.key = hash_dir(name); s.name = name; rc = search( &Tree, s.key, delete_search, &s); if (rc) { printf("delete_dir [%d] couldn't find %s\n", rc, name); return rc; } rc = delete( &Tree, s.key); if (rc) { printf("Failed to delete string \"%s\" err=%d\n", name, rc); } return 0; }
static void hash_list( int out, const char *path ) { int list = rb->open( path, O_RDONLY ); char newpath[MAX_PATH]; if( list < 0 ) return; while( !quit && rb->read_line( list, newpath, MAX_PATH ) > 0 ) { DIR *dir = rb->opendir( newpath ); if( dir ) { rb->closedir( dir ); hash_dir( out, newpath ); } else { hash_file( out, newpath ); } } rb->close( list ); }
int insert_dir (char *name, u32 ino, u8 type) { int rc; insert_search_s s; unint size; size = strlen(name) + 1 + sizeof(type) + sizeof(ino); s.key = hash_dir(name); s.name = name; s.ino = ino; s.type = type; rc = insert( &Tree, s.key, &s, size); if (rc == 0) return 0; if (rc != qERR_DUP) { printf("Failed to insert string \"%s\" err=%d\n", name, rc); return rc; } s.name = name; s.set_new_key = FALSE; rc = search( &Tree, s.key, insert_search, &s); if (rc == qERR_DUP) { printf("Duplicate string found \"%s\" err=%d\n", name, rc); return rc; } rc = insert( &Tree, s.key, name, strlen(name)+1); if (rc) { printf("Failed to insert string \"%s\" err=%d\n", name, rc); return rc; } return 0; }