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