tools: acrn-crashlog: string utils for acrn-crashlog

This file provides some string operations for acrn-crashlog.

Signed-off-by: Liu Xinwu <xinwu.liu@intel.com>
Reviewed-by: Zhang Yanmin <yanmin.zhang@intel.com>
Reviewed-by: Liu Chuansheng <chuansheng.liu@intel.com>
Reviewed-by: Zhao Yakui <yakui.zhao@intel.com>
Reviewed-by: Geoffroy Van Cutsem <geoffroy.vancutsem@intel.com>
Acked-by: Eddie Dong <Eddie.dong@intel.com>
This commit is contained in:
Liu Xinwu 2018-04-25 14:57:01 +08:00 committed by lijinxia
parent 6f9dfa49bf
commit 780fefcc20
3 changed files with 127 additions and 1 deletions

View File

@ -1,4 +1,5 @@
objects = log_sys.o
objects = log_sys.o \
strutils.o
all: check_obj $(objects)
check_obj:

View File

@ -0,0 +1,17 @@
/*
* Copyright (C) 2018 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __STRUTILS_H__
#define __STRUTILS_H__
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
int strlinelen(char *str);
char *strrstr(char *s, char *str);
char *next_line(char *buf);
char *strtrim(char *str);
int strcnt(char *str, char c);
#endif

View File

@ -0,0 +1,108 @@
/*
* Copyright (C) 2018 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <string.h>
#include <errno.h>
/**
* Get the length of line.
*
* @param str Start address of line.
*
* @return the length of line if successful, or -1 if not.
* This function return length of string if string doesn't contain \n.
*/
int strlinelen(char *str)
{
char *tag;
if (!str)
return -1;
tag = strchr(str, '\n');
if (tag)
return tag - str + 1;
return strlen(str);
}
/**
* Find the last occurrence of the substring str in the string s.
*
* @param s Range of search.
* @param substr String to be found.
*
* @return a pointer to the beginning of the substring,
* or NULL if the substring is not found.
*/
char *strrstr(char *s, char *substr)
{
char *found;
char *p = s;
while ((found = strstr(p, substr)))
p = found + 1;
if (p != s)
return p - 1;
return NULL;
}
char *next_line(char *buf)
{
char *p;
p = strchr(buf, '\n');
/* if meet end of buf, the return value is also NULL */
if (p)
return p + 1;
return NULL;
}
static char *strtriml(char *str)
{
char *p = str;
while (*p == ' ')
p++;
return memmove(str, p, strlen(p) + 1);
}
static char *strtrimr(char *str)
{
char *end = str + strlen(str) - 1;
while (*end == ' ' && end >= str) {
*end = 0;
end--;
}
return str;
}
char *strtrim(char *str)
{
strtrimr(str);
return strtriml(str);
}
int strcnt(char *str, char c)
{
int cnt = 0;
char *p = str;
char *found;
if (!str)
return -EINVAL;
while ((found = strchr(p, c))) {
p = found + 1;
cnt++;
}
return cnt;
}