I'd change it more like...
char* start_of_s = s;
char* start_of_t = t;
if(s == NULL || t==NULL) return 0;
while(*s) s++;
while(*t) t++;
while(*s == *t && s > start_of_s && t> start_of_t)
{
s--; t--;
}
return (t == start_of_t) && (*s == *t);
also unit tested with your tests (and mine), except I caled it "string_is_at_end". I use http://code.google.com/p/seatest/ for unit testing. ( mainly coz I wrote it, though I have a much later version which I haven't released yet)
assert_true(string_is_at_end("12345",""));
assert_true(string_is_at_end("123","23"));
assert_true(string_is_at_end("123","3"));
assert_false(string_is_at_end("","123"));
assert_false(string_is_at_end("123","1"));
assert_false(string_is_at_end("123","2"));
assert_true(string_is_at_end("12345", "45"));
assert_false(string_is_at_end("12345", "35"));
assert_false(string_is_at_end("45", "345"));
assert_true(string_is_at_end("12345", "12345"));
assert_true(string_is_at_end("12345", "5"));
assert_false(string_is_at_end("12345", "4"));
assert_true(string_is_at_end("12345", ""));
assert_false(string_is_at_end("12345", "+"));
assert_false(string_is_at_end("12345", "a2345"));
assert_true(string_is_at_end("", ""));
assert_false(string_is_at_end("", "Z"));
assert_true(string_is_at_end("1", "1"));
assert_false(string_is_at_end("1", "1A"));
assert_false(string_is_at_end(0, "1A"));
assert_false(string_is_at_end("1", 0));