@ @ requires haystack_size > 0; @ requires needle_size > 0; @ requires \valid_read(haystack + (0 .. haystack_size-1)); @ requires \valid_read(needle + (0 .. needle_size-1)); @ assigns \nothing; @ ensures \result <= haystack_size; @*/
| 1394 | @ ensures \result <= haystack_size; |
| 1395 | @*/ |
| 1396 | static unsigned int pos_in_mem(const unsigned char *haystack, const unsigned int haystack_size, const unsigned char *needle, const unsigned int needle_size) |
| 1397 | { |
| 1398 | unsigned int i; |
| 1399 | if(haystack_size < needle_size) |
| 1400 | return 0; |
| 1401 | /*@ |
| 1402 | @ loop invariant 0 <= i <= haystack_size - needle_size + 1; |
| 1403 | @ loop assigns i; |
| 1404 | @ loop variant haystack_size - needle_size - i; |
| 1405 | @*/ |
| 1406 | for(i=0; i <= haystack_size - needle_size; i++) |
| 1407 | if(memcmp(&haystack[i],needle,needle_size)==0) |
| 1408 | return (i+needle_size); |
| 1409 | return 0; |
| 1410 | } |
| 1411 | |
| 1412 | /*@ |
| 1413 | @ requires valid_register_header_check(file_stat); |