📄 mbus_addr.c
字号:
/* * FILE: mbus_addr.c * AUTHOR: Colin Perkins * * Copyright (c) 2000 University College London * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, is permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the Computer Science * Department at University College London * 4. Neither the name of the University nor of the Department may be used * to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#include "config_unix.h"#include "config_win32.h"#include "debug.h"#include "util.h"#include "mbus_addr.h"int mbus_addr_match(const char *a, const char *b){ /* Compare the addresses "a" and "b". These may optionally be */ /* surrounded by "(" and ")" and may have an arbitrary amount */ /* of white space between components of the addresses. There */ /* is a match if every word of address b is in address a. */ const char *y = NULL; ASSERT(a != NULL); ASSERT(b != NULL); /* Skip leading whitespace and '('... */ while (isspace((unsigned char)*a) || (*a == '(')) a++; while (isspace((unsigned char)*b) || (*b == '(')) b++; while ((*b != '\0') && (*b != ')')) { /* Move b along through the string to the start of the next */ /* word. Move y along from that to the end of the word. */ while (isspace((unsigned char)*b)) b++; for (y = b; ((*y != ' ') && (*y != ')') && (*y != '\0')); y++) { /* do nothing */ } y--; /* Check if the word between b and y is contained in the */ /* string pointed to be a. */ if (!strfind(a, b, y)) { return FALSE; } b = ++y; } return TRUE;}int mbus_addr_identical(const char *a, const char *b){ /* A more restrictive version of mbus_addr_match. Returns TRUE */ /* iff the addresses are identical (except, possibly, for order */ /* of the elements. */ return mbus_addr_match(a, b) && mbus_addr_match(b, a);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -