return 0 when no error