示例#1
0
文件: stats.c 项目: ariavie/bcm
int 
sal_cpu_stats_get(sal_cpu_stats_t* cpu_stats)
{
    FILE* f;
    uint64 nice = COMPILER_64_INIT(0,0);
    uint64 iowait = COMPILER_64_INIT(0,0);
    char line[200];
    CONST char *seperator;
    
    COMPILER_64_ZERO(cpu_stats->user);
    COMPILER_64_ZERO(cpu_stats->kernel);
    COMPILER_64_ZERO(cpu_stats->idle);
    COMPILER_64_ZERO(cpu_stats->total);
    
    if ((f=fopen("/proc/stat", "r" )) == NULL) {
        return FALSE;
    }

    fgets(line, sizeof(line), f);
    seperator = sal_strstr(line, "cpu");
    if(!seperator) {
        fclose(f);
        return FALSE;
    }

    ADVANCE_TO_NEXT_NUMBER_RETURN_FALSE_ON_ERROR(seperator, f);
    TAKE_NUMBER_AND_ADVANCE(seperator, cpu_stats->user);
    ADVANCE_TO_NEXT_NUMBER_RETURN_FALSE_ON_ERROR(seperator, f);
    TAKE_NUMBER_AND_ADVANCE(seperator, nice);
    ADVANCE_TO_NEXT_NUMBER_RETURN_FALSE_ON_ERROR(seperator, f);
    TAKE_NUMBER_AND_ADVANCE(seperator, cpu_stats->kernel);
    ADVANCE_TO_NEXT_NUMBER_RETURN_FALSE_ON_ERROR(seperator, f);
    TAKE_NUMBER_AND_ADVANCE(seperator, cpu_stats->idle);
    ADVANCE_TO_NEXT_NUMBER_RETURN_FALSE_ON_ERROR(seperator, f);
    TAKE_NUMBER_AND_ADVANCE(seperator, iowait);

    fclose(f);
    
    COMPILER_64_ADD_64(cpu_stats->kernel, nice);
    COMPILER_64_ADD_64(cpu_stats->kernel, iowait);

    COMPILER_64_ADD_64(cpu_stats->total, cpu_stats->user);
    COMPILER_64_ADD_64(cpu_stats->total, cpu_stats->idle);
    COMPILER_64_ADD_64(cpu_stats->total, cpu_stats->kernel);

    return TRUE;
} /* sal_cpu_stats_get */
示例#2
0
/*******************************************************************************
 * Name:    gen_validate_path
 * Purpose: validate full path
 * Input:
 *   pszPath: path name
 * Output:
 * Return:
 *   success: 0
 *   failed : -1
 * Note:
 ******************************************************************************/
int
gen_validate_path(char *pszPath)
{
    char **ppNameArr = NULL;
    unsigned long nCnt = 0;
    int i = 0;
    int nRet = 0;

    if (NULL == pszPath)
    {
        return -1;
    }

    if (sal_strlen(pszPath) > M_FULLPATH_MAX_LEN)
    {
        return -1;
    }

    if (NULL != sal_strstr(pszPath, "//"))
    {
        return -1;
    }

    if (split_tokens(pszPath, sal_strlen(pszPath), M_FULLPATH_DEPTH_MAX,
              "/", &nCnt, &ppNameArr) != 0)
    {
        return -1;
    }

    for (i = 0; i < nCnt; i++)
    {
        if (NULL == ppNameArr[i])
        {
            continue;
        }
        if (check_filename(ppNameArr[i]) != 0)
        {
            nRet = -1;
            break;
        }
    }
    free_tokens(&ppNameArr);
    return nRet;
}
示例#3
0
文件: bslsink.c 项目: ariavie/bcm
void
bslsink_sink_t_init(bslsink_sink_t *sink)
{
    sal_memset(sink, 0, sizeof(*sink));
    SHR_BITSET_RANGE(sink->units, 0, BSLSINK_MAX_NUM_UNITS);
    SHR_BITSET_RANGE(sink->ports, 0, BSLSINK_MAX_NUM_PORTS);
    sink->xtra = -1;
#ifndef BSLSINK_FULL_FILE_PATH
    {
        char *ptr, *file = BSL_FILE;

        /* Calculate position of SDK root in BSL_FILE (__FILE__) */
        ptr = sal_strstr(file, "src/appl/diag/bslsink.c");
        if (ptr != NULL) {
            sink->path_offset = PTR_TO_UINTPTR(ptr) - PTR_TO_UINTPTR(file);
        }
    }
#endif
}
示例#4
0
static char* __strstr(char* p, char* c)
{
    return sal_strstr(p, c);
}