const char* import_object_generator::get_key(int iter, unsigned int *len) { if (m_keys == NULL) { return object_generator::get_key(iter, len); } else { unsigned int k = get_key_index(iter) - 1; return m_keys->get(k, len); } }
/** * rt_iskey - Проверка наличия ключа в хэш таблице. * @ht: Хэш таблица. * @key: Ключ. * * @return 1- если ключ найден, иначе - 0. */ int rt_iskey(TOHT *ht, const char *key) { if (key == NULL) return 0; if (get_key_index(ht, key) < ht->size) /* Ключ найден */ return 1; else return 0; }
const char* object_generator::get_key(int iter, unsigned int *len) { unsigned int l; m_key_index = get_key_index(iter); // format key l = snprintf(m_key_buffer, sizeof(m_key_buffer)-1, "%s%u", m_key_prefix, m_key_index); if (len != NULL) *len = l; return m_key_buffer; }
static int proc_des_write(struct file *file, const char __user *buffer, unsigned long count, void *data) { if(count < 2) { printk(KERN_WARNING "Call to write() with too little bytes"); return -EINVAL; } { // We add 2 to have null terminator. char tmp_buffer[2*CRYPTO_MAX_KEY_LENGTH+2] = {0}; int ix; int err; struct crypto_db *db; if(count > 2*CRYPTO_MAX_KEY_LENGTH + 1) { printk(KERN_WARNING "Key too long"); return -E2BIG; } if(copy_from_user(tmp_buffer, buffer, count)) { return -EFAULT; } db = get_or_create_crypto_db( &get_cryptodev()->crypto_dbs, current_euid()); if(NULL == db) { printk(KERN_WARNING "get_or_create_crypto_db failed\n"); return -ENOMEM; } switch(tmp_buffer[0]) { case 'A': if(!is_valid_key(tmp_buffer+1, count-1)) { printk(KERN_WARNING "invalid key\n"); return -EINVAL; } ix = acquire_free_context_index(db); if(ix < 0) { return ix; } else { err = add_key_to_db(db, ix, tmp_buffer+1, count-1); release_context_index(db, ix); if(err) { return err; } } break; case 'D': // tmp_buffer is null terminated, so we don't pass len ix = get_key_index(tmp_buffer+1); if(ix < 0) { printk(KERN_WARNING "invalid index\n"); return -EINVAL; } acquire_context_index(db, ix); err = delete_key_from_db(db, ix); release_context_index(db, ix); if(err) { return err; } break; default: printk(KERN_WARNING "unknown operation\n"); return -EINVAL; break; } return count; } }