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