tw_cli_mem.c.svn-base
上传用户:hujq123
上传日期:2016-04-10
资源大小:153k
文件大小:6k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /* 
  2.  * Copyright (C) 2002 Koninklijke Philips Electronics N.V., 
  3.  * All Rights Reserved. 
  4.  *
  5.  * This source code and any compilation or derivative thereof is the 
  6.  * proprietary information of Koninklijke Philips Electronics N.V. 
  7.  * and is confidential in nature. 
  8.  * Under no circumstances is this software to be exposed to or placed 
  9.  * under an Open Source License of any type without the expressed 
  10.  * written permission of Koninklijke Philips Electronics N.V. 
  11.  * 
  12.  *###########################################################
  13.  */ 
  14. /*! 
  15.  *      file           tw_cli_mem.c 
  16.  * 
  17.  *      brief          - 
  18.  * 
  19.  */ 
  20. /*-----------------------------------------------------------*
  21.  * 
  22.  *      %version:       3 % 
  23.  *      instance:       DS_6 
  24.  *      %date_created:  Fri Feb 21 08:04:35 2003 % 
  25.  *
  26.  *###########################################################
  27.  */ 
  28. /****************************************************************************
  29. *
  30. * Filename   : tw_cli_mem.c
  31. * Purpose    : CLI command objects and functions to support MEM commands. 
  32. *
  33. *
  34. *****************************************************************************/
  35. #include <stdio.h>
  36. #include <stdlib.h>
  37. #include <string.h>
  38. #include <tmtypes.h>
  39. #include "tw_cli.h"
  40. /*** 2nd level CLI Command Option - mem "check"
  41. ***/
  42. static int CliCoVoproc_MemCheck(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  43. Cli_CmdStruct_t  CliCo_MemCheck =
  44. {
  45.     "check",
  46.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  47.     NULL,
  48.     "check memory allocation list",
  49.     NULL,
  50.     CliCoVoproc_MemCheck,
  51.     NULL
  52. };
  53. /*** 2nd level CLI Command Option - mem "detail"
  54. ***/
  55. static int CliCoVoproc_MemDetail(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  56. Cli_CmdStruct_t  CliCo_MemDetail =
  57. {
  58.     "detail",
  59.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  60.     NULL,
  61.     "display details on all allocated memory blocks",
  62.     NULL,
  63.     CliCoVoproc_MemDetail,
  64.     NULL
  65. };
  66. /*** 2nd level CLI Command Option - mem "summary"
  67. ***/
  68. static int CliCoVoproc_MemSummary(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  69. Cli_CmdStruct_t  CliCo_MemSummary =
  70. {
  71.     "summary",
  72.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  73.     NULL,
  74.     "display summary of all allocated memory blocks",
  75.     NULL,
  76.     CliCoVoproc_MemSummary,
  77.     NULL
  78. };
  79. /*** 2nd level CLI Command Option - mem "task"
  80. ***/
  81. static int CliCoVoproc_MemTask(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  82. Cli_CmdStruct_t  CliCo_MemTask =
  83. {
  84.     "task",
  85.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  86.     NULL,
  87.     "display summary on a per task basis",
  88.     NULL,
  89.     CliCoVoproc_MemTask,
  90.     NULL
  91. };
  92. /*** 2nd level CLI Command Option - mem "test"
  93. ***/
  94. static int CliCoVoproc_MemTest(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  95. Cli_CmdStruct_t  CliCo_MemTest =
  96. {
  97.     "test",
  98.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  99.     NULL,
  100.     "test memory wrapper error detection",
  101.     NULL,
  102.     CliCoVoproc_MemTest,
  103.     NULL
  104. };
  105. /*** 2nd level CLI Command Option - mem "dump"
  106. ***/
  107. static int CliCoVoproc_MemDump(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  108. Cli_CmdStruct_t  CliCo_MemDump =
  109. {
  110.     "dump",
  111.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  112.     NULL,
  113.     "dislay contents of memory 0xADDR {LEN} {1 | 2 | 4}",
  114.     NULL,
  115.     NULL,
  116.     CliCoVoproc_MemDump
  117. };
  118. /*** 1st level CLI Command Option - "mem" 
  119. ***/
  120. Cli_CmdStruct_t *CliRcoOptionList_Mem[] = 
  121. {
  122.     &CliCo_MemCheck,
  123.     &CliCo_MemDetail,
  124.     &CliCo_MemSummary,
  125.     &CliCo_MemTask,
  126.     &CliCo_MemTest,
  127.     &CliCo_MemDump,
  128.     NULL
  129. };
  130. Cli_CmdStruct_t  CliRco_Mem = 
  131. {
  132.     "mem",
  133.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  134.     CliRcoOptionList_Mem,
  135.     "Memory wrapper manipulation command",
  136.     NULL,
  137.     NULL,
  138.     NULL
  139. };                       
  140. static int CliCoVoproc_MemTest(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  141. {
  142.     char *tp ;
  143.     Cli_Printf(pSess, "test malloc() return of NULLn") ;
  144.     tp = malloc(0x40000000) ;
  145.     if (tp != NULL)
  146.     {
  147.         Cli_Printf(pSess, "ERROR: malloc did not return NULLn") ;
  148.     }
  149.     Cli_Printf(pSess, "test realloc() return of NULLn") ;
  150.     tp = malloc(8) ;
  151.     tp = realloc(tp, 0x40000000) ;
  152.     if (tp != NULL)
  153.     {
  154.         Cli_Printf(pSess, "ERROR: realloc did not return NULLn") ;
  155.     }
  156.     Cli_Printf(pSess, "test free() of NULLn") ;
  157.     free(NULL) ;
  158.     Cli_Printf(pSess, "test free() of staticn") ;
  159.     free((char *) &CliCo_MemTest) ;
  160.     Cli_Printf(pSess, "test free() of textn") ;
  161.     free((char *) free) ;
  162.     Cli_Printf(pSess, "test free() of non-sdramn") ;
  163.     free((char *) 0x80000000) ;
  164.     Cli_Printf(pSess, "test clobbered prologuen") ;
  165.     tp = malloc(8) ;
  166.     tp[-1] = 0 ;
  167.     free(tp) ;
  168.     Cli_Printf(pSess, "test clobbered epiloguen") ;
  169.     tp = malloc(8) ;
  170.     tp[8] = 0 ;
  171.     free(tp) ;
  172.     return 0;
  173. }
  174. static int CliCoVoproc_MemDetail(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  175. {
  176.     TwMem_PrintDetail((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  177.     return 0;
  178. }
  179. static int CliCoVoproc_MemCheck(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  180. {
  181.     UInt errors ;
  182.     Cli_Printf(pSess, "scanning allocation listn") ;
  183.     errors = TwMem_Check() ;
  184.     if (errors != 0)
  185.     {
  186.         Cli_Printf(pSess, "TwMem_Check detected %d errorsn", errors) ;
  187.     }
  188.     else
  189.     {
  190.         Cli_Printf(pSess, "TwMem_Check passedn") ;
  191.     }
  192.     return 0;
  193. }
  194. static int CliCoVoproc_MemSummary(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  195. {
  196.     TwMem_PrintSummary((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  197.     return 0;
  198. }
  199. static int CliCoVoproc_MemTask(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  200. {
  201.     TwMem_PrintTaskSummary((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  202.     return 0;
  203. }
  204. static int CliCoVoproc_MemDump(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  205. {
  206.     UInt32 Addr;
  207.     int Len;
  208.     int Width;
  209.     Cli_PrintFormat_e eFormat;
  210.     int Params;
  211.     Len = 128;
  212.     Width = 1;
  213.     Params = sscanf(CmdStr + Ptr, "0x%x %d %d", &Addr, &Len, &Width);
  214.     if (Params < 1 || Len == 0 || Len > 10000 ||
  215.             (Width != 1 && Width != 2 && Width != 4))
  216.     {
  217.         Cli_Printf(pSess, badParamStr);
  218.         Cli_Printf(pSess, "Example Usage: mem dump 0xffc904 128 4n");
  219.         return 0;
  220.     }
  221.     if (Width == 4)
  222.     {
  223.         eFormat = CLI_PRINT_DATA_FORMAT_HEX32;
  224.     }
  225.     else if (Width == 2)
  226.     {
  227.         eFormat = CLI_PRINT_DATA_FORMAT_HEX16;
  228.     }
  229.     else
  230.     {
  231.         eFormat = CLI_PRINT_DATA_FORMAT_HEX8;
  232.     }
  233.     Cli_PrintData(pSess, (void *)Addr, Len, eFormat, False);
  234.     return 0;
  235. }