fssim_core.c

来自「最新MTK手机软件源码」· C语言 代码 · 共 1,826 行 · 第 1/5 页

C
1,826
字号
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *  FSSim_core.c
 *
 * Project:
 * --------
 *  FSSIM
 *
 * Description:
 * ------------
 *  This file implements core functions of File System Simulation.
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/

#define _WIN32_WINNT 0x0500
#define UNICODE

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#ifndef MMI_ON_WIN32
#include "kal_release.h"
#endif

#include "fs_type.h"
#include "fat_fs.h"

#include "FSSim_def.h"

#ifdef MMI_ON_WIN32
#include "DebugInitDef.h"   /* for PRINT_INFORMATION() */
#endif

/*************************************************************************/
/*                                                                       */
/* FUNCTION                                                              */
/*                                                                       */
/*      fssim_pick_mapped_local_path                                     */
/*                                                                       */
/* DESCRIPTION                                                           */
/*                                                                       */
/*      This function determine mapped local path  initialization.       */
/*                                                                       */
/* INPUTS                                                                */
/*                                                                       */
/*      None                                                             */
/*                                                                       */
/* OUTPUTS                                                               */
/*                                                                       */
/*      None                                                             */
/*                                                                       */
/*************************************************************************/
static void fssim_pick_mapped_local_path(void)
{
    TCHAR tmp_name[MAX_PATH], *pch;
    TCHAR profile_value[MAX_PATH];

    /* README :
     *   Basicaly, Read .INI first, if value set, use it.
     *   If *NOT*, use relative path
     *
     *   after this sub-routine finish, fssim_root_dir will be set
     */

    GetModuleFileName( NULL, fssim_root_dir, MAX_PATH);
    pch = wcsrchr( fssim_root_dir, L'\\');
    *(++pch) = 0;

    wcscpy(tmp_name, fssim_root_dir);
    wcscat(tmp_name, FSSIM_INI_FILENAME);
    GetPrivateProfileString(FSSIM_INI_SECTION, FSSIM_INI_KEY,
                            L"", profile_value, sizeof(profile_value), tmp_name);

    if( wcslen(profile_value) >= 3 /* T:\ */ )
    {
        wcsncpy(fssim_root_dir, profile_value, MAX_PATH);

        fssim_printf(("[FS_SIM] Pick INI mapped local path setting\n"));

#ifdef DEBUG_FSSIM
        fssim_printf(("fssim_pick_mapped_local_path(): INI setting path = "));
        fssim_print_str(fssim_root_dir);
#endif  /* DEBUG_FSSIM */
    }
    else
    {
            /* Append relative path */
        wcscat( fssim_root_dir, FSSIM_RELATIVE_PATH_FOR_ROOT_DIR );
#ifdef DEBUG_FSSIM
        fssim_printf(("fssim_pick_mapped_local_path(): execution path + relative_path = "));
        fssim_print_str(fssim_root_dir);
#endif  /* DEBUG_FSSIM */
    }

            /* Get and Remember Current Dir path */
    GetCurrentDirectory(MAX_PATH, tmp_name);

            /* Set and Get Current Dir path --- To eliminate relative mark */
    if( ! SetCurrentDirectory( fssim_root_dir ) )
    {       /* Fail Handle */
        fssim_printf(("Cannot Locate the Root Dir ; Error Code: %d\nPath:", GetLastError()));
        fssim_print_str(fssim_root_dir);
        EXT_ASSERT(0, 0, 0, 0);
    }
    GetCurrentDirectory(MAX_PATH, fssim_root_dir);

            /* Resotre the Path */
    SetCurrentDirectory(tmp_name);

    wcscat( fssim_root_dir, L"\\" );
#ifdef DEBUG_FSSIM
    fssim_printf(("fssim_init(): fssim_root_dir = "));
    fssim_print_str(fssim_root_dir);
#endif  /* DEBUG_FSSIM */
}

/*************************************************************************/
/*                                                                       */
/* FUNCTION                                                              */
/*                                                                       */
/*      fssim_init                                                       */
/*                                                                       */
/* DESCRIPTION                                                           */
/*                                                                       */
/*      This function performs initialization.                           */
/*                                                                       */
/* INPUTS                                                                */
/*                                                                       */
/*      None                                                             */
/*                                                                       */
/* OUTPUTS                                                               */
/*                                                                       */
/*      None                                                             */
/*                                                                       */
/*************************************************************************/
static void fssim_get_drive_watermark(FSSIM_DRVINFO_T *);
static void fssim_init()
{
    HANDLE hDir;
    int i, isinit;
    TCHAR drv_name[MAX_PATH], *pch;
    DWORD retval;

    __try {

        isinit = 0;

        /* create mutex */

        fssim_mutex = fssim_create_mutex();

        ASSERT(fssim_mutex != NULL);

        fssim_sort_mutex = fssim_create_mutex();

        ASSERT(fssim_sort_mutex != NULL)

        fssim_disk_space_mutex = fssim_create_mutex();

        ASSERT(fssim_disk_space_mutex != NULL)

        /* call out to determine local mapped path as fssim_root_dir */
        fssim_pick_mapped_local_path();

        /* prepare the template directory name */
        
        wcscpy(drv_name, fssim_root_dir);
        pch = drv_name + wcslen(drv_name);
        
        wcscpy(pch, FSSIM_DRIVE_DIR);

        /* create/open all drive directories */

        for (i = 0; i < FSSIM_MAX_DRIVE; i++) {

            pch = drv_name + wcslen(drv_name);

            wcsncpy(pch - 2, &(fssim_drvinfo[i].drive), 1);

            /* initialize fssim_drvinfo[] */

            fssim_drvinfo[i].is_current = (i == 0)? 1: 0;   /* system drive the is default current drive */

            wcscpy(fssim_drvinfo[i].dir_name, drv_name);

#ifdef DEBUG_FSSIM
            fssim_printf(("fssim_init(): fssim_drvinfo[%d].dir_name = ", i));
            fssim_print_str(fssim_drvinfo[i].dir_name);
#endif  /* DEBUG_FSSIM */

            /* try to open the direcotry */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?