Exemplo n.º 1
0
/*******************************************************************************
 READ McInit ONE LINE, CHECK REGISTERED BLOCK
*******************************************************************************/
int AnalyzeLine(char *buf)
{
	int 	i;
	char 	Fname[BUF_SIZE];
	char 	Bname[PROC_NAME_LEN];


	/*** 기본 요건을 조사하여 검증된 경우 sscanf를 처리함 *********************/
	if( buf[0] == '#' ){
		if( buf[1] == 'E' || buf[1] == '#' ){
			return 0;
		}
		else if( buf[1] == '@' ){
			for( i=2;i < strlen(buf) && i < BUF_SIZE;i++)
			{
				if (!isalnum(buf[i]) && buf[i] != '\n' && buf[i] != '\0' &&
						  buf[i] != '\t' && buf[i] != ' ' && buf[i] != '/' &&
						  buf[i] != '.' && buf[i] != '_')
				{
					printf("[DEBUG] 'isalnum' ERROR\n");
					return -1;
				}
			}

			if (sscanf(&buf[2], "%s%s", Bname, Fname) != 2)
				return 0;


			if (is_registered_block(Bname) < 0)
				return -2;

			strcpy(blocks[cntr].bname, Bname);
			strcpy(blocks[cntr].fname, Fname);

			cntr++;
		}
		else
			return -3;
	}
	return 0;
}
int GetMcInitInfo()
{
    FILE *fa;
    char    szBuf[1024];
    char    ProcName[64];
    char    szDumy[64];
    int     dActFlag;
    int     i, idx;
	int		dIndex;

	/* changed by uamyd 050426: CURR_SW_COM -> MAX_SW_COM */
    for(i=0; i<MAX_SW_COM; i++ )
    {
		/* changed by uamyd 050426: SWInit[i] -> st_SWInit[i].dActFlag */
        st_SWInit[i].dActFlag = 0;
    }

    fa = fopen(MCINIT_FILE, "r");

    if( fa == NULL )
    {

        printf( "%s FILE OPEN FAIL (%s)\n", MCINIT_FILE, strerror(errno)) ;
        return -1;
    }

	idx = 0; 	/* added by uamyd 050426: count initialize for while compute */

    while(fgets(szBuf, 1024, fa) != NULL)
    {
        if(szBuf[0] != '#')
        {
            printf("GetMcInitInfo fun, [%s] File [%d] row format error\n", MCINIT_FILE, idx+1);
            fclose(fa);
            return -2;
        }

        if(szBuf[1] == '#')
            continue;
        else if(szBuf[1] == 'E')
            break;
        else
        {
            if( sscanf(&szBuf[2], "%d %s %d %s", &dIndex, ProcName, &dActFlag, szDumy) == 4)
            {
				/* changed by uamyd 050426: Used struct 'st_SWInit' */
#if 0
                idx = is_registered_block( ProcName );


                if( idx >= 0 )
                {
                    SWInit[idx] = dActFlag;
                }
#endif
				/* added by uamyd 050426: for search duplicated process name */
                for( i = 0; i< g_dProcCnt; i++ ){
                    if( !strcasecmp( st_SWInit[i].szProcName, ProcName ) ){
                        printf(" IGNORE PROCESS[%s], DUPLICATED \n", ProcName );
                        i = -1;
                        break;
                    }
                }
                if( i != -1 ){
					st_SWInit[idx].dActFlag = dActFlag;
					sprintf( st_SWInit[idx].szProcName, "%s", ProcName );
				 	st_SWInit[idx].dIdx = dIndex;
					idx++;
					g_dProcCnt = idx;
				}
            }
        }
		/* added by uamyd 050427: for check count of starting process to over MAX */
        /* value of MAX is MAX_SW_COM in 'fidb_info.h' */
        if( g_dProcCnt > MAX_SW_COM ){
            printf( "OVER MAX_PROCESS_COUNT : %d\n", MAX_SW_COM );
            exit (-1);
        }
    }

    fclose(fa);

    return 0;
}
Exemplo n.º 3
0
/*******************************************************************************
 ONLY ONE BLOCK START
*******************************************************************************/
int InitOnlyOneBlock(char *bname)
{
	int 	i, pid;
	char 	pname[BUF_SIZE];
	char 	fname[BUF_SIZE];
	char 	errbuf[MAX_ERRBUF_LEN];
	struct stat statbuf;

    if (is_registered_block(bname) < 0)
	{
		sprintf(errbuf, "NON EXIST BLOCK NAME\n");
		PrintOut(TIFB_FAIL, errbuf);
		return -1;
	}

	for( i=0 ; i < strlen(bname); i++)
		pname[i] = toupper(bname[i]);

	pname[strlen(bname)] = 0x00;

	pid = GetProcessID(pname);
	if(pid > 0) /*** ALREADY RUNNING *****************************************/
	{
		sprintf(errbuf, "ALREADY RUNNING PROCESS %s\n", pname);
		PrintOut(TIFB_FAIL, errbuf);
		return -1;
	}

	//sprintf(fname, "%s%s", APP_HOME_BIN, pname);
	fname[0] = 0x00;
    if( dGetBlockBIN(pname, fname, 256) < 0)
    {
        sprintf(errbuf, "NOT Find Binary(%s) in McInit\n", pname);
        PrintOut(TIFB_FAIL, errbuf);
    }

    if(stat(fname, &statbuf) < 0)
        return -3;

	pid = fork();
	if(pid < 0)
	{
		sprintf(errbuf, "CAN'T CREATE A NEW PROCESS\n");
		PrintOut(TIFB_FAIL, errbuf);
		return -1;
	}
	else if(pid == 0)
	{
		freopen("/dev/null", "w", stdout);
        freopen("/dev/null", "r", stdout);
		if (execl(fname, pname, (char *)0) < 0)
		{
			memset(errbuf, 0x0, MAX_ERRBUF_LEN);
			sprintf(errbuf, "CAN'T EXECUTE A NEW BLOCK : %s(%s)\n", bname, fname);
			PrintOut(TIFB_FAIL, errbuf);
		}
		exit(0);
	}
	else
	{
		return pid;
	}
}