Exemplo n.º 1
0
error_t
pager_read_page (struct user_pager_info *pager,
                 vm_offset_t page,
                 vm_address_t *buf,
                 int *write_lock)
{
    int pfn = page / vm_page_size;
    size_t nread;

    /* We never request write locks. */
    *write_lock = 0;

    expand_map (pager, page);

    if (!pager->map[pfn])
        vm_allocate (mach_task_self (), buf, vm_page_size, 1);
    else
    {
        store_read (backing_store, pager->map[pfn], vm_page_size,
                    (void **)buf, &nread);
        if (nread != vm_page_size)
        {
            munmap ((caddr_t) *buf, nread);
            return EIO;
        }
    }
    return 0;
}
Exemplo n.º 2
0
handleid
handlemap_new(struct handlemap *m, void *ud) {
	int i;
	if (ud == NULL)
		return 0;
	rwlock_wlock(&m->lock);
	if (m->n >= m->cap * 3 / 4) {
		if (expand_map(m) == NULL) {
			// memory overflow
			rwlock_wunlock(&m->lock);
			return 0;
		}
	}
	
	for (i=0;;i++) {
		struct handleslot *slot;
		handleid id = ++m->lastid;
		if (id == 0) {
			// 0 is reserved for invalid id
			id = ++m->lastid;
		}
		slot = &m->slot[id & (m->cap - 1)];
		if (slot->id)
			continue;
		slot->id = id;
		slot->ref = 1;
		slot->ud = ud;
		++m->n;

		rwlock_wunlock(&m->lock);
		return id;
	}
}
Exemplo n.º 3
0
Arquivo: ici.cpp Projeto: cor3ntin/Ici
void expand_map(QStringList & keys, const QString & k, const QVariant & v){
    if(v.type() == QVariant::Map){
        const QVariantMap & map = asMap(v);
        for(QVariantMap::const_iterator it = map.begin(); it != map.end(); ++it){
            expand_map(keys, k.isEmpty() ? it.key() : k +"." + it.key(), it.value());
        }
    }
    if(!k.isEmpty()){
        keys.append(k);
    }
}
Exemplo n.º 4
0
error_t
pager_write_page (struct user_pager_info *pager,
                  vm_offset_t page,
                  vm_address_t buf)
{
    int pfn = page / vm_page_size;
    size_t nwritten;

    expand_map (pager, page);

    if (!pager->map[pfn])
        pager->map[pfn] = allocate_backing_page ();

    /* No more backing store.  Oh dear. */
    if (!pager->map[pfn])
        return EIO;

    err = store_write (backing_store, pager->map[pfn], (void *) buf,
                       vm_page_size, &nwritten);
    if (!err && nwritten != vm_page_size)
        err = EIO;
    return err;
}
Exemplo n.º 5
0
Arquivo: ici.cpp Projeto: cor3ntin/Ici
QStringList ICISettings::keys() const {
    QStringList lst;
    expand_map(lst, QString(), values());
    return lst;
}