void app_log_file(char *fmt, ...)
{
    va_list args;
    VMINT drv, hdl;
    VMUINT written;
    VMINT ret;
    vm_time_t time = {0};
    char buf[LOG_BUF_SIZE] = {0};
    VMWCHAR wpath[FILE_PATH_SIZE] = {0};
    VMCHAR path[FILE_PATH_SIZE] = {0};
  
    buf[LOG_BUF_SIZE - 2] = '\r';
    buf[LOG_BUF_SIZE - 1] = '\n';

    va_start( args, fmt );
    vm_get_time(&time);
    vm_sprintf(buf+strlen(buf), "[%02d:%02d:%02d]", time.hour, time.min, time.sec);
    vm_vsprintf(buf+strlen(buf), fmt, args);
        
    drv = vm_get_removable_driver() > 0 ? vm_get_removeable_driver() : vm_get_system_driver();
    vm_sprintf(path, "%c:\\%s", drv, BT_NAME".log");

    vm_gb2312_to_ucs2(wpath, sizeof(wpath), path); 
    hdl = vm_file_open(wpath, MODE_APPEND, 0);
    if (hdl < 0)
        hdl = vm_file_open(wpath, MODE_CREATE_ALWAYS_WRITE, 0);
    else
    {
        if (!flag_delete_log)
        {
            vm_file_close(hdl);
            vm_file_delete(wpath);
            flag_delete_log = 1;
            hdl = vm_file_open(wpath, MODE_CREATE_ALWAYS_WRITE, 0);
        }
    }
    
    vm_file_write(hdl, buf, LOG_BUF_SIZE, &written);
    vm_file_close(hdl);

    va_end( args );						
}
Beispiel #2
0
/*****************************************************************************
 * FUNCTION
 *  vm_so_load_file
 * DESCRIPTION
 *  load so file
 * PARAMETERS
 *  filename : [IN] so file name encoding with UCS format.
 * RETURNS
 *  load so result.
 *****************************************************************************/
VMINT vm_so_load_file(VMWSTR fileName,_vm_pcb_t* father_pcb)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	vm_so_node_t* node;
	VMINT bufSize, ret = -1;
	
#ifdef __MRE_CORE_SAFETY__
	VMINT certres = -1;
	VMUCHAR*  cert_buff;
	VMINT buflen = 3072;		
#endif
	VMCHAR tmp_buf[24];


    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	node = (vm_so_node_t*)_vm_kernel_calloc(sizeof(vm_so_node_t));

	if( node == NULL )
	{
		MMI_TRACE(MMI_MRE_TRC_MOD_VMSO, TRC_MRE_VMSO_02);
		return VM_PMNG_NO_MEM;
	}

	if (kal_wstrchr(fileName, '\\') == NULL)
	{
		if (!vm_so_get_path(vm_get_removeable_driver(), fileName, node->soname) )
		{
			MMI_TRACE(MMI_MRE_TRC_MOD_VMSO, TRC_MRE_VMSO_03);
			if (!vm_so_get_path(vm_get_system_driver(), fileName, node->soname) )
			{			
				VMUINT i,appcount,smcount,socount;
				VMWCHAR tempName[64];
				VMCHAR tempName1[64];
				
				MMI_TRACE(MMI_MRE_TRC_MOD_VMSO, TRC_MRE_VMSO_04);

				vm_init_default_game(&appcount, &smcount, &socount);
				
				for(i = 0; i < socount; i++)
				{
					vm_ascii_to_ucs2((VMWSTR)tempName, 64, (VMSTR)mre_buildin_vso_array[i].file_name);
					if(kal_wstrcmp(tempName, fileName) == 0)
					{
						sprintf(tempName1, "%c:\\%u.rom", 64, mre_buildin_vso_array[i].address);
						vm_ascii_to_ucs2((VMWSTR)node->soname, 64, (VMSTR) tempName1);
						return VM_SO_SUCCESS;
					}
				}
				
				MMI_TRACE(MMI_MRE_TRC_MOD_VMSO, TRC_MRE_VMSO_05);

				return VM_SO_FILE_NOT_FOUND;
			}
		}
	}
	else
	{
		vm_wstrcpy(node->soname, fileName);
	}
	
#ifdef __MRE_CORE_SAFETY__
	if ((cert_buff = (VMUCHAR* )_vm_kernel_malloc(buflen)) == NULL)
	{
		MMI_TRACE(MMI_MRE_TRC_MOD_VMSO, TRC_MRE_VMSO_06);
		return -1;
	}
			
	certres = vm_ce_auth_app_ex(node->soname, cert_buff, buflen, VERIFY_FULL);
	_vm_kernel_free(cert_buff);
	if (certres < VM_CE_VERIFY_OK )
	{
		MMI_TRACE(MMI_MRE_TRC_MOD_VMSO, TRC_MRE_VMSO_07, certres);
		return certres;
	}
#endif	

#ifndef MRE_ON_MODIS
	ret = vm_so_read_file( node );

	if( ret < 0)
	{
		MMI_TRACE(MMI_MRE_TRC_MOD_VMSO, TRC_MRE_VMSO_08, ret);
		return ret;
	}
#else
    node->memIndex = vm_alloc_memory(1024*500);
    node->heapBase = g_vsm_mem_info[node->memIndex].mem_base;
    node->heapSize = 1024*500;
#endif

    node->pcb = father_pcb;
    _vm_so_list_insert(node);
	node->base_name = (VMWSTR)wcsrchr((wchar_t *)node->soname, L'\\');
	if (node->base_name != NULL)
	{
	    node->base_name++;
	}
	else
	{
	    node->base_name = node->soname;
	}
	bufSize = 24;
	if (vm_get_vm_tag(node->soname, VM_CE_INFO_ISSUE, (void *)tmp_buf, &bufSize) == GET_TAG_TRUE)
	{
	    node->build_id = (tmp_buf[4] << 24) + (tmp_buf[8] << 16) + (tmp_buf[12] << 8) + tmp_buf[16];
	}
	else
	{
	    node->build_id = 0;
	}
	node->dtype = DEBUG_SHARED_OBJECT;
	    
#ifndef MRE_ON_MODIS
	if(node->file_type == VM_VSO_RVCT)
	{
		typedef VMINT (*vm_rvct_so_entry_fp)(VMUINT symtab);
		vm_rvct_so_entry_fp so_entry;
		so_entry = (vm_rvct_so_entry_fp)(node->entry);
		so_entry((VMUINT)vm_get_sym_entry);
	}
	else if(node->file_type == VM_VSO_GCC)
	{
		typedef VMINT (*vm_gcc_so_entry_fp)(VMUINT symtab, VMUINT address, VMUINT count);
		vm_gcc_so_entry_fp so_entry;

		so_entry = (vm_gcc_so_entry_fp)(node->entry);
		so_entry((VMUINT)vm_get_sym_entry, (VMUINT)node->sysv_node.sysv_init_array, node->sysv_node.sysv_init_count);
	}
	else
	{
		MMI_TRACE(MMI_MRE_TRC_MOD_VMSO, TRC_MRE_VMSO_09);
	}
#else
	node->memIndex = vm_entry_vso(node->soname, (unsigned int)vm_get_sym_entry);
#endif

	if (node->sysEventHandler)
	{
		node->sysEventHandler(VM_SO_MSG_LOAD, 0);
	}
	
    return node->memIndex;
	
}