You increment mode before testing modes[mode].string, so you don't actually test the last case, as the comment above claims.  Should `ParseModeString(NULL, &plus, &minus)` actually succeed, setting plus and minus to 0 ?
If not, the comment above is misleading; if so, you can fix this by removing the ++mode; in the body and changing the test to `while (modes[mode++].string)`