/**
 * @file op_string.h
 * general purpose C string handling declarations.
 *
 * @remark Copyright 2003 OProfile authors
 * @remark Read the file COPYING
 *
 * @author John Levon
 * @author Philippe Elie
 */

#ifndef OP_STRING_H
#define OP_STRING_H

#include <string.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @param  s: input string
 * @param len: len char to copy
 *
 * Allocate and copy len character from s to a newly allocated buffer then
 * append a '\0' terminator. Return the newly allocated string
 */
char * op_xstrndup(char const * s, size_t len);

/**
 * @param  s: string to hash
 *
 * Generate a hash code from a string
 */
size_t op_hash_string(char const * s);

/**
 * @param str: string to test
 * @param prefix: prefix string
 *
 * return non zero if prefix parameters is a prefix of str
 */
int strisprefix(char const * str, char const * prefix);

/**
 * @param c: input string
 *
 * return a pointer to the first location in c which is not a blank space
 * where blank space are in " \t\n"
 */
char const * skip_ws(char const * c);

/**
 * @param c: input string
 *
 * return a pointer to the first location in c which is a blank space
 * where blank space are in " \t\n"
 */
char const * skip_nonws(char const * c);

/**
 * @param c: input string
 *
 * return non zero if c string contains only blank space
 * where blank space are in " \t\n"
 */
int empty_line(char const * c);

/**
 * @param c: input string
 *
 * return non zero if c string is a comment. Comment are lines with optional
 * blank space at left then a '#' character. Blank space are in " \t\n"
 */
int comment_line(char const * c);

#ifdef __cplusplus
}
#endif

#endif /* !OP_STRING_H */