컴퓨터활용/티맥스

code inspection

멜번초이 2008. 5. 23. 16:19
반응형

여신 김만기 차장님의 요청에 의하여 오전에 오전임과 같이 만들었으니 향후 검토하신 후에 compile shell 뒤에 append 하여 모든 프로그램 컴파일 할 때 warning 을 보여 준다면 어떨까 검토해 주신 후 적용해 주세요.

프로그램명 : inspect_code
적용룰 : PFM_TRYNJ 절 뒤에 SET_ERR 을 안 한 경우를 찾아 줌
사용예 : 소스가 존재하는 디렉토리로 이동해서 inspect_code 를 실행합니다.

nbtap01#/nbsdev/compile/NLDS/src/service>inspect_code NLDS1001I0
"NLDS1001I0.c", line 475: warning #9999: not found SET_ERR after PFM_TRYNJ
"NLDS1001I0.c", line 1541: warning #9999: not found SET_ERR after PFM_TRYNJ
"NLDS1001I0.c", line 1727: warning #9999: not found SET_ERR after PFM_TRYNJ
nbtap01#/nbsdev/compile/NLDS/src/service>
 
더 필요한 체크 룰이 있다면( code inspection 툴이 체크해 내지 못하는 ) 오전임에게 요청해서 반영하면 되겠죠.
(문의) 프레임웍팀 오은경


/*
 * @file            inspect_code.c
 * @brief           코드 점검
 *
 * @dep-header
 *
 * @history
 *    버    전 : 성  명  :  일  자    :  근거  자료    :          변       경        내       용
 *    --------   ------     --------     -----------     -------------------------------------------
 *    VER1.00  : 오은경  :  20080522  :  proframe 구축 :  신규 개발
 *
 */

/* --------------------------------------- include files ---------------------------------------- */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*--------------------------------- constant, macro definitions --------------------------------- */
#define RC_NRM     0
#define RC_ERR    -1
#define STRSIZE 1024
#define TRUE       1
#define FALSE      0

#define START_TAG  "//DO_NOT_MODIFY_THIS_LINE-----------START_OF_CODE"
#define END_TAG    "//DO_NOT_MODIFY_THIS_LINE-----------END_OF_CODE"


#define PFM_TRY( _Ftn )                                                             \
        do {                                                                        \
            rc = _Ftn;                                                              \
            if( rc != RC_NRM) goto PFM_CATCH;                                       \
        } while (0)

#define PFM_TRYNJ( _Ftn )                                                           \
        do {                                                                        \
            rc = _Ftn;                                                              \
        } while (0)

/* ------------------------------------ function prototypes ------------------------------------- */
/* static long open_file( FILE *fp, char *file_name ); */
static long read_file( FILE *fp, char * );

/* ------------------------------------ function main ------------------------------------------- */
int main(int argc, char *argv[] )
{
    FILE *fp = NULL;
    FILE *ofp;
    long rc = RC_NRM;
    char file_name[100];
    char base_name[100];

    if ( argc != 2 ) {
        printf("\nargument needed!\n\n");
        return RC_ERR;
    }

    strcpy( base_name, argv[1] );
    sprintf(file_name, "%s.c", base_name );
    fp = fopen(file_name, "r");

    if(fp == NULL) {
        /* printf("FILE OPEN FAILED\n");   */
        return RC_ERR;
    }
    /* printf("FILE OPEN SUCCEED\n");   */


    PFM_TRY(read_file( fp, file_name ));


    fclose(fp);


PFM_CATCH :
    return RC_ERR;
}

/* ---------------------------------------- function body ----------------------------------------*/
static long read_file( FILE *fp, char *file_name ) {

    char line[1028];
    char excpt[10280];
    long line_no = 0;
    long excpt_flag = FALSE;
    long start_flag = FALSE;
    long end_flag = FALSE;
    long seterr_flag = FALSE;
    long trynj_no = 0;

    memset(line, 0x00, sizeof(line));
    while( fgets(line, STRSIZE, fp ) != NULL )  {
        line_no++;

        if ( strstr( line, "PFM_TRYNJ" ) > 0 ) {
            /* printf("PFM_TRYNJ founded line_no=[%ld] \n", line_no); */
            excpt_flag  = TRUE;
            trynj_no    = line_no;
            start_flag  = FALSE;
            end_flag    = FALSE;
            seterr_flag = FALSE;
            continue;
        }

        if( excpt_flag == TRUE ) {
            if ( strstr( line, START_TAG ) > 0 ) {
                start_flag  = TRUE;
                continue;
            }
            else if ( strstr( line, END_TAG ) > 0 ) {
                end_flag = TRUE;
            }
            else if ( strstr( line, "SET_ERR" ) > 0 ) {
                seterr_flag = TRUE;
            }

            if ( start_flag == TRUE ) {
                if( seterr_flag == TRUE ) {
                    excpt_flag  = FALSE;
                    continue;
                }
            }
            if ( end_flag == TRUE && start_flag == TRUE ) {
                if( seterr_flag == FALSE ) {
                    printf("\"%s\", line %ld: warning #9999: not found SET_ERR after PFM_TRYNJ\n",file_name, tr
                    start_flag  = FALSE;
                    end_flag    = FALSE;
                    seterr_flag = FALSE;
                    excpt_flag  = FALSE;
                }
            }

        }

        memset(line, 0x00, sizeof(line));

    }

    return RC_NRM;
}

/* --------------------------------------- E N D  O F  F I L E -----------------------------------*/



이 프로그램을 해당 팀에 일괄 돌리겠다면 다음의 shell 을 이용하면 되겠죠..

#!/bin/ksh
#----------------------------------------------------------#
# 작성자 : 오은경  작성일:2008.5.20
#----------------------------------------------------------#

#----------------------------------------------------------#
# 입력 된 아규먼트 개수를 체크한다
#----------------------------------------------------------#
if [ $# -ne  1 ]
then
    echo "\nUsage : $0 team_code(대문자)"
    echo " \n"
    exit
fi


team_code=$1
cd $PRJROOT/compile/$team_code/src/service

pgm_lst=`ls *.c`
for pgm_one in ${pgm_lst};  do
#    echo $pgm_one
    BASE=`echo $pgm_one|cut -d"." -f1-1`
    inspect_code $BASE
done

cd $PRJROOT/compile/$team_code/src/module

pgm_lst=`ls *.c`
for pgm_one in ${pgm_lst};  do
#    echo $pgm_one
    BASE=`echo $pgm_one|cut -d"." -f1-1`
    inspect_code $BASE
done

cd -

반응형