예제 #1
0
파일: default_pager.c 프로젝트: Prajna/xnu
void
default_pager_initialize(void)
{
	kern_return_t		kr;
	__unused static char	here[] = "default_pager_initialize";

	lck_grp_attr_setdefault(&default_pager_lck_grp_attr);
	lck_grp_init(&default_pager_lck_grp, "default_pager", &default_pager_lck_grp_attr);
	lck_attr_setdefault(&default_pager_lck_attr);	

	/*
	 * Vm variables.
	 */
#ifndef MACH_KERNEL
	vm_page_mask = vm_page_size - 1;
	assert((unsigned int) vm_page_size == vm_page_size);
	vm_page_shift = local_log2((unsigned int) vm_page_size);
#endif

	/*
	 * List of all vstructs.
	 */
	vstruct_zone = zinit(sizeof(struct vstruct),
			     10000 * sizeof(struct vstruct),
			     8192, "vstruct zone");
	zone_change(vstruct_zone, Z_CALLERACCT, FALSE);
	zone_change(vstruct_zone, Z_NOENCRYPT, TRUE);

	VSL_LOCK_INIT();
	queue_init(&vstruct_list.vsl_queue);
	vstruct_list.vsl_count = 0;

	VSTATS_LOCK_INIT(&global_stats.gs_lock);

	bs_initialize();

	/*
	 * Exported DMM port.
	 */
	default_pager_object = ipc_port_alloc_kernel();


	/*
	 * Export pager interfaces.
	 */
#ifdef	USER_PAGER
	if ((kr = netname_check_in(name_server_port, "UserPager",
				   default_pager_self,
				   default_pager_object))
	    != KERN_SUCCESS) {
		dprintf(("netname_check_in returned 0x%x\n", kr));
		exit(1);
	}
#else	/* USER_PAGER */
	{
		unsigned int clsize;
		memory_object_default_t dmm;

		dmm = default_pager_object;
		assert((unsigned int) vm_page_size == vm_page_size);
		clsize = ((unsigned int) vm_page_size << vstruct_def_clshift);
		kr = host_default_memory_manager(host_priv_self(), &dmm, clsize);
		if ((kr != KERN_SUCCESS) ||
		    (dmm != MEMORY_OBJECT_DEFAULT_NULL))
			Panic("default memory manager");

	}
#endif	/* USER_PAGER */


}
예제 #2
0
bool wxTextureValidator::Validate(wxWindow *parent) {
    if ( !wxExtendedValidator::Validate(parent) ) {
        return false;
    }

    if ( !m_validatorWindow->IsEnabled() )
        return true;

    wxString val = wxT("");

    if (dynamic_cast<wxTextCtrl*>(m_validatorWindow)) {
        val = (dynamic_cast<wxTextCtrl*>(m_validatorWindow))->GetValue();
    } else if (dynamic_cast<wxComboCtrl*>(m_validatorWindow)) {
        val = (dynamic_cast<wxComboCtrl*>(m_validatorWindow))->GetValue();
    } else {
        return false;
    }

    if (m_zeroAllowed && (val == wxT("")))
        return true;

    bool ok = true;

    wxString errormsg;
//    ILenum Error;

//    ILinfo inf;
    wxGXImage img(val);
    bool valid_file = img.Ok();
/*
    wxMutexLocker lock (wxILMutex);
    ILuint img = ilGenImage();
    ILuint old = ilGetInteger(IL_ACTIVE_IMAGE);
    ilBindImage(img);
*/
    if (!valid_file) {
        ok = false;
        errormsg = _("Error loading file '%s'.");
/*
        while ((Error = ilGetError())) {
            errormsg += wxT("\n");
            errormsg += iluErrorString(Error);
        }
*/
    } else {
/*
        int width = ilGetInteger(IL_IMAGE_WIDTH);
        int height = ilGetInteger(IL_IMAGE_HEIGHT);
*/
        if (img.GetWidth() != img.GetHeight()) {
            ok = false;
            errormsg = _("Texture '%s' is not square, ");
            errormsg += wxString::Format(_("it has %dx%d pixels."), img.GetWidth(), img.GetHeight());
        } else if ((1 << local_log2(img.GetWidth())) != static_cast<int>(img.GetHeight())) {
            ok = false;
            errormsg = _("The width/height of texture '%s' is not a power of 2.");
        } else {
            if (m_forceSize) {
                if ((*m_forceSize > 0) && (*m_forceSize != img.GetWidth())) {
                    ok = false;
                    errormsg = _("The width/height of texture '%s' has to be ") + wxString::Format(wxT("%d"), *m_forceSize) + wxT(".");
                }
            }
            if (ok && m_alphaNecessary) {
                if (!img.HasAlpha()) {
                    ok = false;
                    errormsg = _("Texture '%s' requires an alpha channel.");
                }
            }
        }
    }
/*
    ilBindImage(old);
    ilDeleteImage(img);
*/

    if ((!ok) && (!m_silent)) {
        wxASSERT_MSG( !errormsg.empty(), _T("you forgot to set errormsg") );

        m_validatorWindow->SetFocus();

        wxString buf;
        buf.Printf(errormsg, val.c_str());

        wxString title;
        title.Printf(_("Validation conflict (%s)"), m_context.c_str());

        wxMessageBox(buf, title,
                     wxOK | wxICON_EXCLAMATION, parent);
    }

    return ok;
}