亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fsdiag.c

?? free sources for gsm
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*

                   Diagnostics Packet Processing

General Description
  Diagnostic packet processing routines for file system access.

Copyright (c) 1990-2003 by QUALCOMM, Incorporated.  All Rights Reserved.
*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/

/*===========================================================================

                           Edit History

$Header: //depot/asic/msmshared/services/diag/fsdiag.c#17 $

when       who     what, where, why
--------   ---     ----------------------------------------------------------
02/18/04    as     Fixed critical lint errors.
08/12/04    as     Removed support for Remote file link.
06/23/04    as     Fixes for RVCT 2.1
05/18/04    as     Added security check to fsdiag_cmd.
11/05/03    pg     Added support for fs_format function.
07/10/03    gr     Moved access validation code into its own file.
06/23/07   jkl     Featurized for EFS2.
04/07/03   jct     Added file access validation callbacks which invoke a
                   registered callback for any file system access via
                   DIAG - the callback returns a status indicating whether or
                   not the operation may proceed.  If no callback exists
                   the operation proceeds.
12/02/02   lad     Added retry mechanism to read operation.
08/20/01   jal     Updated for core VU
09/06/00   jal     Incorporated David Brown's change to stop EFS file
                   descriptor leakage
05/10/00   lad     Updated usage of diagpkt_shorten().
03/23/00   lad     Fixed iterative listings.
02/28/00   lad     Changed functions to use diagbuf allocation services.
01/20/99   lad     Removed unnecessary debug MSG_MED calls.
11/16/99   lad     Set attrib uses existing creation date if -1 is set.
                   fs_write overwrite fix.
07/23/99   lad     Added rev 2 of EFS support.
03/26/99   lad     Created for Embedded Filesystem (EFS) support.  Write/MKDIR
===========================================================================*/
#ifdef __cplusplus
  extern "C" {
#endif

#include "comdef.h"
#include "customer.h"

#include "diagbuf.h"
#include "diagcmd.h"
#include "fsdiag.h"

#include "diag.h"
#include <string.h>
#include "fs.h"

/* Tell lint that we are OK with the fact that pkt_len and req are not 
** used in some of the packets, as this is dictated by the awesome design */
/*lint -esym(715,pkt_len,req) */
  
/*--------------------------------------------------------
  Gloabal data for cleanup of incomplete file transfers
--------------------------------------------------------*/
typedef enum
{
  FSDIAG_NONE,
  FSDIAG_READ,
  FSDIAG_WRITE
} fsdiag_operation_enum_type;

LOCAL fsdiag_operation_enum_type fsdiag_op = FSDIAG_NONE;
LOCAL fs_handle_type fsdiag_handle = NULL;
LOCAL char fsdiag_filename[FSDIAG_MAX_FILENAME_LEN] = {'\0'};


/*===========================================================================

FUNCTION FSDIAG_CLEANUP
DESCRIPTION
  This function cleans up (closes, etc) files operations that are were not 
  completed.

============================================================================*/
static boolean fsdiag_cleanup ()
{
  boolean bRetVal = TRUE;
  fs_rsp_msg_type fs_rsp;  /* FS requires we specify a response message */

  if (fsdiag_handle != NULL || fsdiag_filename[0] != NULL) 
  {
    fs_close(fsdiag_handle, NULL, &fs_rsp);

    if (fsdiag_op == FSDIAG_WRITE)
    {
      /*--------------------------------------------------------
       Remove the stagnant file - if not same file, who cares.
      --------------------------------------------------------*/
      fs_remove(fsdiag_filename, NULL, &fs_rsp);

      if (fs_rsp.rmfile.status != FS_OKAY_S) 
      {
        bRetVal = FALSE;
      }
    }
  }
  
  /*---------------------------------------------
   Initialize file handle and saved filename
  ---------------------------------------------*/
  fsdiag_handle = NULL;
  fsdiag_filename[0] = NULL;
  fsdiag_op = FSDIAG_NONE;

  return (bRetVal);

} /* fsdiag_cleanup */



/*===========================================================================

FUNCTION FSDIAG_MKDIR
DESCRIPTION
  This function handles FS "Create Directory" commands in DIAG.
  
============================================================================*/
static PACKED void * fsdiag_mkdir (
  fsdiag_mkdir_req_type *req,
  word pkt_len
)
{              
  fs_rsp_msg_type fs_rsp;  /* FS requires we specify a response message */
  fsdiag_rsp_pkt_type *rsp;
  const word rsp_len = FPOS(fsdiag_rsp_pkt_type, fs_rsp);

  /*--------------------------------
   Check for valid packet length.
  --------------------------------*/
  if (pkt_len != req->len + sizeof(req->len)) 
  {
    return (diagpkt_err_rsp(DIAG_BAD_LEN_F, req, pkt_len));
  }

  FS_DIAG_VALIDATE_ACCESS( MKDIR, (const char *)req->name );

  rsp = (fsdiag_rsp_pkt_type *)diagpkt_alloc(DIAG_FS_OP_F, rsp_len);
                                
  /*--------------------------------
   Check for valid filename length.
  --------------------------------*/
  fs_mkdir((const char *)req->name, NULL, &fs_rsp);

  rsp->fs_status = fs_rsp.mkdir.status;
    
  return (rsp);

} /* fsdiag_mkdir */
      
      

/*===========================================================================

FUNCTION FSDIAG_DISP_DIRS
DESCRIPTION
  This function handles FS "Display Directory List" commands in DIAG.
  
============================================================================*/
static PACKED void *fsdiag_disp_dirs (
  fsdiag_disp_dirs_req_type *req,
  word pkt_len
)
{
  fs_rsp_msg_type fs_rsp;  /* FS requires we specify a response message */
  fsdiag_rsp_pkt_type *rsp;
  word rsp_len = FPOS(fsdiag_rsp_pkt_type, fs_rsp);

  /*--------------------------------
   Check for valid packet length.
  --------------------------------*/
  if (pkt_len != req->len + sizeof(req->len)) 
  {
    return (diagpkt_err_rsp(DIAG_BAD_LEN_F, req, pkt_len));
  }

  FS_DIAG_VALIDATE_ACCESS( DISP_DIRS, (const char *)req->name );

  /*----------------------------------------------------------------
    Unknown response size.  Therefore, we will allocate the max
    possible size for this packet and reduce length later.
  ----------------------------------------------------------------*/
  rsp = (fsdiag_rsp_pkt_type *)diagpkt_alloc(DIAG_FS_OP_F, rsp_len + FSIZ(fsdiag_rsp_type, disp_dirs));

  do
  {  
    /*--------------------------------
     Get the number of directories.
    --------------------------------*/
    /* Old versions of FS do not always properly set this variable */ 
    fs_rsp.num_dirs.num_dirs = 0;
  
    fs_num_dirs((const char *)req->name, NULL, &fs_rsp);
  
    if (fs_rsp.num_dirs.status == FS_OKAY_S)
    {
      rsp->fs_rsp.disp_dirs.num_dirs = fs_rsp.num_dirs.num_dirs;
    }
    else
    {
      break;  
    }
  
    /*-------------------------------------
      Now get the actual directory list 
    --------------------------------------*/
    fs_list_dirs((const char *)req->name,
                 (void*) rsp->fs_rsp.disp_dirs.dir_list.data,
                 FSDIAG_MAX_FILE_BLOCK_SIZE,
                 NULL,
                 &fs_rsp);
    
    if (fs_rsp.list_dirs.status == FS_OKAY_S)
    {
      rsp->fs_rsp.disp_dirs.dir_list.len = 
        (word) fs_rsp.list_dirs.count;
  
      rsp_len += sizeof(rsp->fs_rsp.disp_dirs.num_dirs)     +
                 sizeof(rsp->fs_rsp.disp_dirs.dir_list.len) +
                 rsp->fs_rsp.disp_dirs.dir_list.len;
    }
  } while (0);

  rsp->fs_status = fs_rsp.any.status;
  
  /*------------------------------------------
    If necessary, shorten the length of the 
    response to the actual size
  ------------------------------------------*/
  diagpkt_shorten(rsp, rsp_len);

  return (rsp);

} /* fsdiag_disp_dirs */



/*===========================================================================

FUNCTION FSDIAG_DISP_FILES
DESCRIPTION
  This function handles FS "Display File List" commands in DIAG.

============================================================================*/
static PACKED void *fsdiag_disp_files (
  fsdiag_disp_files_req_type *req,
  word pkt_len
)
{
  fs_rsp_msg_type fs_rsp;  /* FS requires we specify a response message */
  fsdiag_rsp_pkt_type *rsp;
  word rsp_len = FPOS(fsdiag_rsp_pkt_type, fs_rsp);

  /*--------------------------------
   Check for valid packet length.
  --------------------------------*/
  if (pkt_len != req->len + sizeof(req->len)) 
  {
    return (diagpkt_err_rsp(DIAG_BAD_LEN_F, req, pkt_len));
  }

  FS_DIAG_VALIDATE_ACCESS( DISP_FILES, (const char *)req->name );

  /*----------------------------------------------------------------
    Unknown response size.  Therefore, we will allocate the max
    possible size for this packet and reduce length later.
  ----------------------------------------------------------------*/
  rsp = (fsdiag_rsp_pkt_type *)diagpkt_alloc(DIAG_FS_OP_F, rsp_len + FSIZ(fsdiag_rsp_type, disp_files));
  
  do
  {
    /*--------------------------------
     Get the number of files.
    --------------------------------*/
    /* Old versions of FS don't always set this variable. */
    fs_rsp.num_files.num_files = 0;
  
    fs_num_files((const char *)req->name, NULL, &fs_rsp);
  
    rsp->fs_status = fs_rsp.num_files.status;
  
    if (fs_rsp.num_files.status == FS_OKAY_S)
    {
      rsp->fs_rsp.disp_files.num_files = fs_rsp.num_files.num_files;
    }
    else
    {
      break;  
    }
  
    /*------------------------------
      Now get the actual file list 
    -------------------------------*/
    fs_list_files((const char *)req->name,
                  (void*) rsp->fs_rsp.disp_files.file_list.data,
                  FSDIAG_MAX_FILE_BLOCK_SIZE,
                  NULL,
                  &fs_rsp);
    
    if (fs_rsp.list_files.status == FS_OKAY_S)
    {
      rsp->fs_rsp.disp_files.file_list.len = 
        (word) fs_rsp.list_files.count;
  
      rsp_len += sizeof(rsp->fs_rsp.disp_files.num_files)     +
                 sizeof(rsp->fs_rsp.disp_files.file_list.len) +
                 rsp->fs_rsp.disp_files.file_list.len;
    }
  } while (0);

  rsp->fs_status = fs_rsp.any.status;
  
  /*------------------------------------------
    If necessary, shorten the length of the 
    response to the actual size
  ------------------------------------------*/
  diagpkt_shorten(rsp, rsp_len);

  return (rsp);

} /* fsdiag_disp_files */



/*===========================================================================

FUNCTION FSDIAG_RMDIR
DESCRIPTION
  This function handles FS "Remove Directory" commands in DIAG.

============================================================================*/
static PACKED void *fsdiag_rmdir (
  fsdiag_rmdir_req_type *req,
  word pkt_len
)
{              
  fs_rsp_msg_type fs_rsp;  /* FS requires we specify a response message */
  fsdiag_rsp_pkt_type *rsp;
  const word rsp_len = FPOS(fsdiag_rsp_pkt_type, fs_rsp);

  /*--------------------------------
   Check for valid packet length.
  --------------------------------*/
  if (pkt_len != req->len + sizeof(req->len)) 
  {
    return (diagpkt_err_rsp(DIAG_BAD_LEN_F, req, pkt_len));
  }

  FS_DIAG_VALIDATE_ACCESS( RMDIR, (const char *)req->name );

  rsp = (fsdiag_rsp_pkt_type *)diagpkt_alloc(DIAG_FS_OP_F, rsp_len);
                                
  fs_rmdir((const char *)req->name, NULL, &fs_rsp);

  rsp->fs_status = fs_rsp.rmdir.status;
    
  return (rsp);

} /* fsdiag_rmdir */



/*===========================================================================

FUNCTION FSDIAG_GET_ATTRIB
DESCRIPTION
  This function handles FS "Get File Attributes" commands in DIAG.

============================================================================*/
static PACKED void *fsdiag_get_attrib (
  fsdiag_get_attrib_req_type *req,
  word pkt_len
)
{              
  fs_rsp_msg_type fs_rsp;  /* FS requires we specify a response message */
  fsdiag_rsp_pkt_type *rsp;
  word rsp_len = FPOS(fsdiag_rsp_pkt_type, fs_rsp);
                                                        
  /*--------------------------------
   Check for valid packet length.
  --------------------------------*/
  if (pkt_len != req->len + sizeof(req->len))
  {
    return (diagpkt_err_rsp(DIAG_BAD_LEN_F, req, pkt_len));
  }

  FS_DIAG_VALIDATE_ACCESS( GET_ATTRIB, (const char *)req->name );

  /*---------------------------------
   Check for valid filename length.
  ---------------------------------*/
  fs_get_file_attributes((const char *)req->name, NULL, &fs_rsp);

  if (fs_rsp.get_attribs.status == FS_OKAY_S)
  {
    rsp_len += FSIZ(fsdiag_rsp_type, get_attrib);
  }

  rsp = (fsdiag_rsp_pkt_type *)diagpkt_alloc(DIAG_FS_OP_F, rsp_len);
                                
  rsp->fs_status = fs_rsp.get_attribs.status;
    
  if (fs_rsp.get_attribs.status == FS_OKAY_S)
  {
    rsp->fs_rsp.get_attrib.attrib.attribute_mask = 
      fs_rsp.get_attribs.attributes;
    
    rsp->fs_rsp.get_attrib.attrib.buffering_option = 
      fs_rsp.get_attribs.buffering_option;
    
    rsp->fs_rsp.get_attrib.attrib.cleanup_option = 
      fs_rsp.get_attribs.cleanup_option;

    rsp->fs_rsp.get_attrib.creation_date = 
      fs_rsp.get_attribs.creation_date;
    
    /*------------------------------------------------ 
       Event though it is not a attribute in the EFS, 
       file size would be a handy thing to know.
    ------------------------------------------------*/
    fs_file_size((const char *)req->name, NULL, &fs_rsp);

    if (fs_rsp.file_size.status == FS_OKAY_S)
    {
      rsp->fs_rsp.get_attrib.size = fs_rsp.file_size.size;
    }
    else
    {
      rsp->fs_rsp.get_attrib.size = 0;
    }
  }
  
  return (rsp);

} /* fsdiag_get_attrib */


/*===========================================================================

FUNCTION FSDIAG_SET_ATTRIB
DESCRIPTION
  This function handles FS SET ATTRIB commands in DIAG.
  
============================================================================*/
static PACKED void *fsdiag_set_attrib (
  fsdiag_set_attrib_req_type *req,
  word pkt_len
)
{              
  fs_rsp_msg_type fs_rsp;  /* FS requires we specify a response message */
  fsdiag_rsp_pkt_type *rsp;
  const int rsp_len = FPOS(fsdiag_rsp_pkt_type, fs_rsp);

  /*--------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国欧美一区二区| 成人午夜视频福利| 大陆成人av片| 这里只有精品99re| 国产精品二区一区二区aⅴ污介绍| 亚洲午夜av在线| 懂色av一区二区三区免费看| 欧美三级中文字| 国产欧美日韩综合| 日av在线不卡| 欧美亚洲丝袜传媒另类| 国产欧美一区二区精品秋霞影院| 日韩福利视频网| 91久久香蕉国产日韩欧美9色| 国产日韩高清在线| 精品一区二区三区在线观看| 欧美久久久久中文字幕| 亚洲免费在线看| 97se亚洲国产综合自在线不卡 | 欧美一级电影网站| 亚洲综合色噜噜狠狠| 成人精品鲁一区一区二区| 日韩欧美精品三级| 日本美女一区二区| 欧美日韩精品一区二区三区| 亚洲人成网站色在线观看| 国产成人综合在线| 久久久久免费观看| 国产精品影视在线| 久久精品在线观看| 国产黄色91视频| 久久久精品欧美丰满| 激情伊人五月天久久综合| 日韩一级完整毛片| 另类小说欧美激情| 久久蜜桃av一区二区天堂| 国产一区福利在线| 久久综合久久综合九色| 国产乱理伦片在线观看夜一区| 日韩欧美一二三| 国内久久婷婷综合| 337p粉嫩大胆噜噜噜噜噜91av| 麻豆91免费看| 26uuu成人网一区二区三区| 国产精品一线二线三线精华| 国产欧美中文在线| 一本色道久久综合亚洲精品按摩| 亚洲欧美视频一区| 欧美日韩成人综合在线一区二区| 免播放器亚洲一区| 久久亚洲精华国产精华液 | 久久久电影一区二区三区| 国产成人高清视频| 亚洲色欲色欲www| 欧美日韩你懂的| 韩国一区二区视频| 国产精品入口麻豆九色| 在线视频综合导航| 久久99国产精品成人| 国产清纯白嫩初高生在线观看91 | 亚洲不卡一区二区三区| 91麻豆精品国产91久久久久久久久| 日日夜夜一区二区| 久久久久久久综合色一本| av一区二区三区在线| 五月婷婷欧美视频| 国产欧美一区二区在线| 欧美亚洲国产一卡| 国产精品亚洲成人| 亚洲在线成人精品| 久久午夜老司机| 一本久久a久久精品亚洲| 日本不卡1234视频| 国产精品另类一区| 91精品婷婷国产综合久久性色| 国产成人av电影| 婷婷成人激情在线网| 日本一区二区三区电影| 欧美日韩三级一区二区| 福利视频网站一区二区三区| 三级在线观看一区二区| 国产精品三级久久久久三级| 日韩一区二区免费高清| 91看片淫黄大片一级在线观看| 麻豆91精品视频| 婷婷开心久久网| 成人欧美一区二区三区白人| 日韩视频一区在线观看| 91国产免费看| 成人免费视频免费观看| 久久精品国产免费| 亚洲午夜电影在线观看| 亚洲色图清纯唯美| 久久久久久久久久久99999| 欧美日韩在线观看一区二区| av亚洲精华国产精华| 国内精品伊人久久久久av影院| 天天色天天操综合| 一区二区三区中文字幕精品精品| 国产精品网曝门| 国产欧美一区在线| 久久理论电影网| 2017欧美狠狠色| 精品久久久久久久人人人人传媒| 欧美日韩的一区二区| 欧美影片第一页| 91视频观看免费| 成人午夜精品一区二区三区| 国产不卡在线播放| 国产成人在线免费观看| 国产原创一区二区三区| 精品一区二区av| 激情六月婷婷久久| 国产在线乱码一区二区三区| 精品一区二区三区久久| 久久99热这里只有精品| 国内成人免费视频| 成人一区二区视频| 丰满白嫩尤物一区二区| 成人中文字幕在线| 成人精品高清在线| 91麻豆国产香蕉久久精品| 97精品久久久午夜一区二区三区| 91麻豆国产香蕉久久精品| 国产色婷婷亚洲99精品小说| 国产日产欧美一区| 中文字幕在线观看不卡视频| 最新日韩在线视频| 亚洲精品一卡二卡| 亚洲高清一区二区三区| 青青草97国产精品免费观看| 激情欧美一区二区三区在线观看| 激情都市一区二区| 成人午夜在线视频| 欧美伊人精品成人久久综合97| 欧美日韩国产首页| 精品日韩成人av| 综合自拍亚洲综合图不卡区| 亚洲高清在线视频| 国产中文字幕精品| 本田岬高潮一区二区三区| 91黄色激情网站| 日韩一区二区三区精品视频| 国产免费观看久久| 亚洲永久免费视频| 麻豆精品一区二区三区| 成人手机电影网| 欧美视频精品在线| 久久美女高清视频| 亚洲一区二三区| 看片的网站亚洲| 99久久伊人网影院| 日韩欧美国产午夜精品| 国产精品亲子乱子伦xxxx裸| 亚洲午夜免费电影| 国产自产视频一区二区三区| 日本韩国欧美一区| 久久综合九色综合97婷婷女人 | 亚洲一区二区av在线| 精品在线免费观看| 不卡高清视频专区| 337p亚洲精品色噜噜噜| 国产精品美女久久久久久久久久久| 亚洲黄色片在线观看| 国产精品系列在线播放| 欧美熟乱第一页| 国产精品每日更新在线播放网址| 免费高清成人在线| 欧美性色综合网| 中文字幕第一区| 美日韩一区二区三区| 色综合天天综合色综合av| 欧美精品一区二区三区久久久| 亚洲一区免费视频| 26uuuu精品一区二区| 视频一区欧美精品| 91官网在线免费观看| 中文文精品字幕一区二区| 欧美a一区二区| 欧美日精品一区视频| 国产精品成人免费| 国产成人综合自拍| 久久久久久久网| 美女在线视频一区| 欧美挠脚心视频网站| 一二三四社区欧美黄| 一本大道久久a久久精二百| 国产女人水真多18毛片18精品视频 | 国产美女一区二区| 欧美变态tickle挠乳网站| 视频在线观看一区| 欧美色图片你懂的| 亚洲永久免费视频| 在线观看不卡视频| 亚洲人成小说网站色在线| 成人动漫精品一区二区| 国产精品日日摸夜夜摸av| 国产成人av一区二区三区在线| 精品国产免费一区二区三区四区| 麻豆高清免费国产一区|