コード例 #1
0
TEST_F(avl_tree,DISABLED_big_split)
{
	static const unsigned num_iterations=1000000000;
	static const unsigned char key_mod=5;
	static const unsigned perf_mod=200000;
	static const unsigned kp=1;

	bin_index_t::file_max_size=9223372036854775807ll;

	recreate_dirs();
	ObjectProgress::log_generator lg(true);
	ObjectProgress::perfomance perf;

	data_t key(kp*sizeof(unsigned long long));

	{
		bin_index_t ind(index_dir,kp*sizeof(unsigned long long));

		for(unsigned long long i=0;i<num_iterations;i++)
		{
			fill_key(&key.front(),i,kp);

			ind.set(key,key);

			if((i!=0)&&(i%perf_mod)==0)
			{
				ObjectProgress::perfomance::val_t v=perf.delay();
				lg<<"write: i="<<i<<" perf="<<(v/1000.0)<<"ms rate="<<(1.0*perf_mod/v*1000000.0)<<"rps";
				perf.reset();
			}
		}
	}

	{
		bin_index_t ind(index_dir,kp*sizeof(unsigned long long));
		perf.reset();

		for(unsigned long long i=0;i<num_iterations;i++)
		{
			fill_key(&key.front(),i,kp);

			data_t val;

			ASSERT_TRUE(ind.get(key,val));
			ASSERT_EQ(key,val);

			if((i!=0)&&(i%perf_mod)==0)
			{
				ObjectProgress::perfomance::val_t v=perf.delay();
				lg<<"read: i="<<i<<" perf="<<(v/1000.0)<<"ms rate="<<(1.0*perf_mod/v*1000000.0)<<"rps";
				perf.reset();
			}
		}
	}
}
コード例 #2
0
int e4crypt_delete_user_key(const char *user_handle) {
    SLOGD("e4crypt_delete_user_key(\"%s\")", user_handle);
    auto key_path = get_key_path(DATA_MNT_POINT, user_handle);
    auto key = e4crypt_get_key(key_path, false);
    auto ext4_key = fill_key(key);
    auto ref = keyname(generate_key_ref(ext4_key.raw, ext4_key.size));
    auto key_serial = keyctl_search(e4crypt_keyring(), "logon", ref.c_str(), 0);
    if (keyctl_revoke(key_serial) == 0) {
        SLOGD("Revoked key with serial %ld ref %s\n", key_serial, ref.c_str());
    } else {
        SLOGE("Failed to revoke key with serial %ld ref %s: %s\n",
            key_serial, ref.c_str(), strerror(errno));
    }
    int pid = fork();
    if (pid < 0) {
        SLOGE("Unable to fork: %s", strerror(errno));
        return -1;
    }
    if (pid == 0) {
        SLOGD("Forked for secdiscard");
        execl("/system/bin/secdiscard",
            "/system/bin/secdiscard",
            key_path.c_str(),
            NULL);
        SLOGE("Unable to launch secdiscard on %s: %s\n", key_path.c_str(),
            strerror(errno));
        exit(-1);
    }
    // ext4enc:TODO reap the zombie
    return 0;
}
コード例 #3
0
ファイル: connector.cpp プロジェクト: 2php/stardict-3
bool Connector::abbr(const std::string& key, const std::string& data)
{
	StringList real_keylist;

	fill_key(key);
	generate_keys(real_keylist);
	
	return generator_.on_have_data(real_keylist, data);
}
コード例 #4
0
// Install password into global keyring
// Return raw key reference for use in policy
static std::string e4crypt_install_key(const std::string &key)
{
    auto ext4_key = fill_key(key);
    auto raw_ref = generate_key_ref(ext4_key.raw, ext4_key.size);
    auto ref = keyname(raw_ref);
    if (e4crypt_install_key(ext4_key, ref) == -1) {
        return "";
    }
    return raw_ref;
}
コード例 #5
0
ファイル: connector.cpp プロジェクト: 2php/stardict-3
bool Connector::abbr(const StringList& keylist, const std::string& data)
{
	StringList real_keylist;
	for (StringList::const_iterator it = keylist.begin();
	     it != keylist.end(); ++it) {		
		fill_key(*it);
		generate_keys(real_keylist);
	}
	return generator_.on_have_data(real_keylist, data);
}
コード例 #6
0
ファイル: connector.cpp プロジェクト: 2php/stardict-3
bool Connector::article(const std::string& key, const std::string& data,
			bool kia)
{
	std::string keystr;
	StringList real_keylist;
	
	if (!kia)
		keystr += std::string("<k>") + key + "</k>\n";
	fill_key(key);
	generate_keys(real_keylist);
	
	return generator_.on_have_data(real_keylist, keystr + data);
}
コード例 #7
0
ファイル: connector.cpp プロジェクト: 2php/stardict-3
bool Connector::article(const StringList& keylist, const std::string& data, bool kia)
{
	std::string keystr;
	StringList real_keylist;
	for (StringList::const_iterator it = keylist.begin();
	     it != keylist.end(); ++it) {
		if (!kia)
			keystr += std::string("<k>") + *it + "</k>\n";
		fill_key(*it);
		generate_keys(real_keylist);
	}

	return generator_.on_have_data(real_keylist, keystr + data);
}
コード例 #8
0
ファイル: main.c プロジェクト: ensc/hama-mce-remoted
static bool handle_input(struct input_state *st, int out_fd)
{
	struct input_event	ev;
	ssize_t			l;
	unsigned long		mask = 0, value;
	bool			do_submit = false;

	l = read(st->fd, &ev, sizeof ev);
	if (l == 0 || (l < 0 && errno == ENODEV))
		return false;

	if (l < 0) {
		err("read(<event>): %m");
		exit(1);
	}

	if (l != sizeof ev)
		abort();

	switch (ev.type) {
	case EV_KEY:
		st->is_raw = false;

		switch (ev.code) {
		case KEY_LEFTMETA:
		case KEY_RIGHTMETA:
			mask = MODE_META;
			break;

		case KEY_LEFTCTRL:
		case KEY_RIGHTCTRL:
			mask = MODE_CTRL;
			break;

		case KEY_LEFTALT:
		case KEY_RIGHTALT:
			mask = MODE_ALT;
			break;

		case KEY_LEFTSHIFT:
		case KEY_RIGHTSHIFT:
			mask = MODE_SHIFT;
			break;

		case KEY_NUMLOCK:
			mask = MODE_NUMLOCK;
			break;
		}

		if (mask) {
			if (ev.value)
				value = mask;
			else
				value = 0;

			st->mode &= ~mask;
			st->mode |= value;

			if (st->mode != MODE_ALT && st->is_alt) {
				ev.value   = 1;
				do_submit  = true;
			}
		} else if (st->mode == MODE_ALT && ev.value == 0)
			;		/* noop */
		else if (st->mode == MODE_ALT) {
			int		num_code = -1;

			switch (ev.code) {
			case KEY_KP0:	num_code = 0; break;
			case KEY_KP1:	num_code = 1; break;
			case KEY_KP2:	num_code = 2; break;
			case KEY_KP3:	num_code = 3; break;
			case KEY_KP4:	num_code = 4; break;
			case KEY_KP5:	num_code = 5; break;
			case KEY_KP6:	num_code = 6; break;
			case KEY_KP7:	num_code = 7; break;
			case KEY_KP8:	num_code = 8; break;
			case KEY_KP9:	num_code = 9; break;
			default:	num_code = -1; break;
			}

			st->is_alt = num_code != -1;

			if (!st->is_alt) {
				st->key = ev.code;
				do_submit  = true;
			} else
				st->key = st->key * 10 + num_code;
		} else if (st->is_alt) {
			ev.value   = 0;
			do_submit  = true;
			st->is_alt = false;
		} else {
			st->key    = ev.code;
			do_submit  = true;
		}

		break;

	case EV_SYN:
		if (st->is_raw &&
		    !send_events(out_fd, &ev, 1))
			exit(1);
		st->is_raw = false;

		break;

	case EV_MSC:
		break;

	case EV_REL:
		if (!send_events(out_fd, &ev, 1))
			exit(1);
		st->is_raw = true;

		break;

	case EV_REP:
		break;

	default:	;
		warn("unsupported event type %02x\n", ev.type);
		break;
	}


	if (do_submit) {
		int		found;

		st->ev[0].time  = ev.time;

		st->ev[1].time  = ev.time;
		st->ev[1].value = ev.value;

		st->ev[2].time  = ev.time;
		st->ev[2].type  = EV_SYN;
		st->ev[2].code  = SYN_REPORT;
		st->ev[2].value = 0;

		if (ev.value)
			found = fill_key(st->ev,
					 st->mode |
					 (st->is_alt ? MODE_NUMALT : 0),
					 st->key);
		else
			found = true;

		if (found) {
			bool		send_scancode = st->ev[1].value == 1;

			if (!send_events(out_fd,
					 send_scancode ? &st->ev[0] : &st->ev[1],
					 send_scancode ? 3 : 2))
				exit(1);
		} else
			warn("unknown code M(%u,%u,%u,%u,%u) %d %d %ld\n",
			     !!(st->mode & MODE_META),
			     !!(st->mode & MODE_CTRL),
			     !!(st->mode & MODE_SHIFT),
			     !!(st->mode & MODE_ALT),
			     !!st->is_alt,
			     st->key, ev.value, (st->mode & MODE_NUMLOCK));

		st->key = 0;
	}

	return true;
}