110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_string.c
310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * general purpose C string handling implementation.
410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2003 OProfile authors
610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING
710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon
910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie
1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <string.h>
1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_libiberty.h"
1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar * op_xstrndup(char const * s, size_t len)
1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return xmemdup(s, len, len + 1);
1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectsize_t op_hash_string(char const * str)
2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	size_t hash = 0;
2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	for (; *str; ++str)
2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		hash ^= (hash << 16) ^ (hash >> 8) ^ *str;
2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return hash;
2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint strisprefix(char const * str, char const * prefix)
3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return strstr(str, prefix) == str;
3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar const * skip_ws(char const * c)
3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	while (*c == ' ' || *c == '\t' || *c == '\n')
4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		++c;
4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return c;
4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar const * skip_nonws(char const * c)
4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	while (*c && *c != ' ' && *c != '\t' && *c != '\n')
4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project		++c;
4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return c;
5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint empty_line(char const * c)
5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return !*skip_ws(c);
5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint comment_line(char const * c)
6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{
6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	return *skip_ws(c) == '#';
6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
63