mbus_addr.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * FILE:     mbus_addr.c
  3.  * AUTHOR:   Colin Perkins
  4.  * 
  5.  * Copyright (c) 2000 University College London
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, is permitted provided that the following conditions 
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  * 3. All advertising materials mentioning features or use of this software
  17.  *    must display the following acknowledgement:
  18.  *      This product includes software developed by the Computer Science
  19.  *      Department at University College London
  20.  * 4. Neither the name of the University nor of the Department may be used
  21.  *    to endorse or promote products derived from this software without
  22.  *    specific prior written permission.
  23.  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
  24.  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  25.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  26.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
  27.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  28.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  29.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  30.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  31.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  32.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  33.  * SUCH DAMAGE.
  34.  */
  35. #include "config_unix.h"
  36. #include "config_win32.h"
  37. #include "debug.h"
  38. #include "util.h"
  39. #include "mbus_addr.h"
  40. int mbus_addr_match(const char *a, const char *b)
  41. {
  42. /* Compare the addresses "a" and "b". These may optionally be */
  43. /* surrounded by "(" and ")" and may have an arbitrary amount */
  44. /* of white space between components of the addresses. There  */
  45. /* is a match if every word of address b is in address a.     */
  46. const char *y = NULL; 
  47. ASSERT(a != NULL);
  48. ASSERT(b != NULL);
  49. /* Skip leading whitespace and '('... */
  50. while (isspace((unsigned char)*a) || (*a == '(')) a++;
  51. while (isspace((unsigned char)*b) || (*b == '(')) b++;
  52. while ((*b != '') && (*b != ')')) {
  53. /* Move b along through the string to the start of the next */
  54. /* word. Move y along from that to the end of the word.     */
  55. while (isspace((unsigned char)*b)) b++;
  56. for (y = b; ((*y != ' ') && (*y != ')') && (*y != '')); y++) {
  57. /* do nothing */
  58. }
  59. y--;
  60. /* Check if the word between b and y is contained in the    */
  61. /* string pointed to be a.                                  */
  62. if (!strfind(a, b, y)) {
  63. return FALSE;
  64. }
  65. b = ++y;
  66. }
  67. return TRUE;
  68. }
  69. int mbus_addr_identical(const char *a, const char *b)
  70. {
  71. /* A more restrictive version of mbus_addr_match. Returns TRUE  */
  72. /* iff the addresses are identical (except, possibly, for order */
  73. /* of the elements.                                             */
  74. return mbus_addr_match(a, b) && mbus_addr_match(b, a);
  75. }