1d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 2d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * GPL HEADER START 3d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 4d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 6d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This program is free software; you can redistribute it and/or modify 7d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * it under the terms of the GNU General Public License version 2 only, 8d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * as published by the Free Software Foundation. 9d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 10d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This program is distributed in the hope that it will be useful, but 11d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * WITHOUT ANY WARRANTY; without even the implied warranty of 12d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * General Public License version 2 for more details (a copy is included 14d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * in the LICENSE file that accompanied this code). 15d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 16d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * You should have received a copy of the GNU General Public License 17d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * version 2 along with this program; If not, see 18d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf 19d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 20d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 21d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * CA 95054 USA or visit www.sun.com if you need additional information or 22d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * have any questions. 23d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 24d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * GPL HEADER END 25d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 26d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 27d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 28d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Use is subject to license terms. 29d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 30d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Copyright (c) 2012, Intel Corporation. 31d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 32d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 33d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This file is part of Lustre, http://www.lustre.org/ 34d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Lustre is a trademark of Sun Microsystems, Inc. 35d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 36d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * libcfs/include/libcfs/libcfs_string.h 37d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 38d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Generic string manipulation functions. 39d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 40d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Author: Nathan Rutman <nathan.rutman@sun.com> 41d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 42d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 43d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#ifndef __LIBCFS_STRING_H__ 44d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define __LIBCFS_STRING_H__ 45d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 46d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* libcfs_string.c */ 47d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* string comparison ignoring case */ 48d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_strncasecmp(const char *s1, const char *s2, size_t n); 49d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* Convert a text string to a bitmask */ 50d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_str2mask(const char *str, const char *(*bit2str)(int bit), 51d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int *oldmask, int minmask, int allmask); 52d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* trim leading and trailing space characters */ 53d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taochar *cfs_firststr(char *str, size_t size); 54d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 55d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** 56d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Structure to represent NULL-less strings. 57d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 58d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct cfs_lstr { 59d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *ls_str; 60d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int ls_len; 61d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 62d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 63d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 64d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Structure to represent \<range_expr\> token of the syntax. 65d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 66d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct cfs_range_expr { 67d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /* 68d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Link to cfs_expr_list::el_exprs. 69d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 70d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct list_head re_link; 71d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 re_lo; 72d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 re_hi; 73d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 re_stride; 74d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 75d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 76d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct cfs_expr_list { 77d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct list_head el_link; 78d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct list_head el_exprs; 79d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 80d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 81d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taochar *cfs_trimwhite(char *str); 82d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_gettok(struct cfs_lstr *next, char delim, struct cfs_lstr *res); 83d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_str2num_check(char *str, int nob, unsigned *num, 84d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao unsigned min, unsigned max); 85d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_expr_list_match(__u32 value, struct cfs_expr_list *expr_list); 86d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_expr_list_values(struct cfs_expr_list *expr_list, 87d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int max, __u32 **values); 88d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline void 89d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taocfs_expr_list_values_free(__u32 *values, int num) 90d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 91d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /* This array is allocated by LIBCFS_ALLOC(), so it shouldn't be freed 92d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * by OBD_FREE() if it's called by module other than libcfs & LNet, 93d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * otherwise we will see fake memory leak */ 94d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LIBCFS_FREE(values, num * sizeof(values[0])); 95d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 96d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 97d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taovoid cfs_expr_list_free(struct cfs_expr_list *expr_list); 98d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_expr_list_parse(char *str, int len, unsigned min, unsigned max, 99d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct cfs_expr_list **elpp); 100d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taovoid cfs_expr_list_free_list(struct list_head *list); 101d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_ip_addr_parse(char *str, int len, struct list_head *list); 102d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint cfs_ip_addr_match(__u32 addr, struct list_head *list); 103d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taovoid cfs_ip_addr_free(struct list_head *list); 104d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 105d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define strtoul(str, endp, base) simple_strtoul(str, endp, base) 106d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 107d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#endif 108