여신 김만기 차장님의 요청에 의하여 오전에 오전임과 같이 만들었으니 향후 검토하신 후에 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 -
'컴퓨터활용 > 티맥스' 카테고리의 다른 글
괄호 열고 닫기 짝이 안 맞을 때 나는 오류 (0) | 2008.06.23 |
---|---|
[---___---] (0) | 2008.05.30 |
DBIO 에서 VIEW 출력변수 생성 팁 (1) | 2008.05.23 |
HP 장비의 make 시간이 IBM 장비 보다 오래 걸리는 현상 (0) | 2008.05.22 |
PFM_CATCH 절의 return 값은 오류 리턴 보장되어야 합니다 (0) | 2008.05.21 |