Changeset 5602:6d421545ca98 in roaraudio
- Timestamp:
- 07/30/12 16:59:54 (12 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r5601 r5602 14 14 arguments) (Closes: #276) 15 15 * Updated manpages. 16 * moved strselcmp() and strseltok() to libroar (Closes: #285) (pr1) 16 17 17 18 v. 1.0beta3 - Sun Jul 15 2012 26:08 CEST -
include/libroar/memmgr.h
r5381 r5602 158 158 #endif 159 159 160 161 // Selector parsing. 162 int roar_mm_strselcmp(const char *s1, const char *s2); 163 ssize_t roar_mm_strseltok(const char *s1, char *s2, char ** tok, size_t toks); 164 160 165 #endif 161 166 -
include/libroar/roarfeatures.h
r5576 r5602 61 61 #define ROAR_FT_FEATURE_UUID /* see #230 */ 62 62 #define ROAR_FT_FEATURE_COMMON_PROTO /* see #257 */ 63 #define ROAR_FT_FEATURE_SELECTOR_HANDLING /* see #285 */ 63 64 64 65 // libroar2 features: -
libroar/memmgr.c
r5381 r5602 416 416 #endif 417 417 418 int roar_mm_strselcmp(const char *s1, const char *s2) { 419 register char a, b; 420 421 if ( s1 == s2 ) 422 return 0; 423 424 if ( s1 == NULL || s2 == NULL ) 425 return -1; 426 427 for (; ; s1++, s2++) { 428 a = *s1; 429 b = *s2; 430 431 if ( a == '*' ) { 432 s1++; 433 a = *s1; 434 if ( a == 0 ) { 435 if ( b == 0 ) { 436 return 1; // no match! ('*' does not mach no-chars) 437 } else { 438 return 0; // match! (string ends with '*' and something not EOS is in b) 439 } 440 } else { 441 for (; *s2 != 0 && *s2 != a; s2++); 442 if ( a != *s2 ) 443 return 1; // no match! (did not find correct char) 444 } 445 } else if ( a == 0 || b == 0 ) { 446 if ( a == b ) { 447 return 0; // match! 448 } else { 449 return 1; // no match! (dffrent length) 450 } 451 } else if ( a != b ) { 452 return 1; // no match! (diffrent chars) 453 } 454 } 455 456 return -1; 457 } 458 459 ssize_t roar_mm_strseltok(const char *s1, char *s2, char ** tok, size_t toks) { 460 register char a, b; 461 size_t idx = 0; 462 463 if ( s1 == NULL || s2 == NULL ) 464 return -1; 465 466 for (; ; s1++, s2++) { 467 a = *s1; 468 b = *s2; 469 470 if ( a == 0 || b == 0 ) { 471 if ( a == b ) { 472 return idx; 473 } else { 474 return -1; 475 } 476 } else if ( a == '*' ) { 477 s1++; 478 a = *s1; 479 if ( idx == toks ) 480 return -1; 481 482 tok[idx] = s2; 483 idx++; 484 485 for (; *s2 != 0 && *s2 != a; s2++); 486 487 if ( a == 0 ) 488 return idx; 489 490 if ( *s1 == 0 ) 491 return -1; 492 493 *s2 = 0; 494 } 495 } 496 497 return -1; 498 } 499 418 500 //ll -
plugins/roard/protocol-gopher.c
r5381 r5602 90 90 }; 91 91 92 static int strselcmp(const char *s1, const char *s2);93 static ssize_t strseltok(const char *s1, char *s2, char ** tok, size_t toks);94 95 92 static char * _aprintf(size_t sizehint, const char * format, ...); 96 93 … … 141 138 size_t len; 142 139 143 toks = strseltok(sitem->selector, selector, &tok, 1);140 toks = roar_mm_strseltok(sitem->selector, selector, &tok, 1); 144 141 145 142 if ( toks == -1 ) … … 286 283 memset(items, 0, sizeof(items)); 287 284 288 toks = strseltok(sitem->selector, selector, &tok, 1);285 toks = roar_mm_strseltok(sitem->selector, selector, &tok, 1); 289 286 if ( toks == -1 ) 290 287 return -1; … … 361 358 memset(items, 0, sizeof(items)); 362 359 363 toks = strseltok(sitem->selector, selector, &tok, 1);360 toks = roar_mm_strseltok(sitem->selector, selector, &tok, 1); 364 361 if ( toks == -1 ) 365 362 return -1; … … 475 472 int stream = -1; 476 473 477 toks = strseltok(sitem->selector, selector, tok, 5);474 toks = roar_mm_strseltok(sitem->selector, selector, tok, 5); 478 475 479 476 if ( toks != 5 ) … … 545 542 546 543 return 0; 547 }548 549 static int strselcmp(const char *s1, const char *s2) {550 register char a, b;551 552 if ( s1 == s2 )553 return 0;554 555 if ( s1 == NULL || s2 == NULL )556 return -1;557 558 for (; ; s1++, s2++) {559 a = *s1;560 b = *s2;561 562 if ( a == '*' ) {563 s1++;564 a = *s1;565 if ( a == 0 ) {566 if ( b == 0 ) {567 return 1; // no match! ('*' does not mach no-chars)568 } else {569 return 0; // match! (string ends with '*' and something not EOS is in b)570 }571 } else {572 for (; *s2 != 0 && *s2 != a; s2++);573 if ( a != *s2 )574 return 1; // no match! (did not find correct char)575 }576 } else if ( a == 0 || b == 0 ) {577 if ( a == b ) {578 return 0; // match!579 } else {580 return 1; // no match! (dffrent length)581 }582 } else if ( a != b ) {583 return 1; // no match! (diffrent chars)584 }585 }586 587 return -1;588 }589 590 static ssize_t strseltok(const char *s1, char *s2, char ** tok, size_t toks) {591 register char a, b;592 size_t idx = 0;593 594 if ( s1 == NULL || s2 == NULL )595 return -1;596 597 for (; ; s1++, s2++) {598 a = *s1;599 b = *s2;600 601 if ( a == 0 || b == 0 ) {602 if ( a == b ) {603 return idx;604 } else {605 return -1;606 }607 } else if ( a == '*' ) {608 s1++;609 a = *s1;610 if ( idx == toks )611 return -1;612 613 tok[idx] = s2;614 idx++;615 616 for (; *s2 != 0 && *s2 != a; s2++);617 618 if ( a == 0 )619 return idx;620 621 if ( *s1 == 0 )622 return -1;623 624 *s2 = 0;625 }626 }627 628 return -1;629 544 } 630 545 … … 796 711 797 712 for (i = 0; i < sizeof(g_gopher_items)/sizeof(*g_gopher_items); i++) { 798 // if ( ! strselcmp(g_gopher_items[i].selector, inbuf) ) {799 if ( ! strselcmp(g_gopher_items[i].selector, inbuf) ) {713 // if ( !roar_mm_strselcmp(g_gopher_items[i].selector, inbuf) ) { 714 if ( !roar_mm_strselcmp(g_gopher_items[i].selector, inbuf) ) { 800 715 c = &(g_gopher_items[i]); 801 716 break;
Note: See TracChangeset
for help on using the changeset viewer.