void _clear_act_list( ) { list_entry *node = __action.flink; list_entry *del = NULL; list_entry *head = &__action; for ( ; node != &__action; ) { _dact *act = contain_record(node, _dact, list); if ( ACT_STOPPED == act->status ) { if ( WaitForSingleObject(act->h_thread, 0) == WAIT_OBJECT_0 ) { del = node; node = node->flink; _remove_entry_list(del); CloseHandle(act->h_thread); free(del); continue; } } node = node->flink; } }
void _keyfiles_wipe( int key_list ) { _list_key_files *node, *next; if ( next = _first_keyfile(key_list) ) { do { node = next; next = _next_keyfile( node, key_list ); _remove_entry_list( &node->next ); secure_free( node ); } while ( next != NULL ); } }
_dnode *_scan_vols_tree( vol_inf *vol, int *count ) { list_entry *del; list_entry *node; list_entry *sub; for ( node = __drives.flink; node != &__drives ; ) { _dnode *root = contain_record(node, _dnode, list); if ( count ) { *count += 1; } for ( sub = root->root.vols.flink; sub != &root->root.vols ; ) { _dnode *mnt = contain_record(sub, _dnode, list); if ( count ) { *count += 1; } if (! vol ) { if (! mnt->exists ) { del = sub; sub = sub->flink; _remove_entry_list(del); free(del); continue; } } else { if ( ( wcscmp(mnt->mnt.info.device, vol->device) == 0 ) && (! mnt->exists) ) { return mnt; } } sub = sub->flink; } if (_is_list_empty(sub)) { del = node; node = node->flink; _remove_entry_list(del); free(del); continue; } node = node->flink; } return NULL; }