ECode CGestureStore::ReadString( /* [in] */ IDataInputStream *in, /* [out] */ String* str) { VALIDATE_NOT_NULL(in);// != NULL); VALIDATE_NOT_NULL(str);// != NULL); StringBuf* line = StringBuf::Alloc(STRING_MAX_LENGTH); Boolean foundTerminator = FALSE; IDataInput *din = IDataInput::Probe(in); while (TRUE) { Byte nextByte = -1; ECode ec = din->ReadByte(&nextByte); if (FAILED(ec)) { if (line->GetLength() == 0 && !foundTerminator) { *str = NULL; StringBuf::Free(line); return NOERROR; } //string lenght exceeds STRING_MAX_LENGTH if (!foundTerminator) { line->Append((Char8)'\0'); *str = line->GetPayload(); StringBuf::Free(line); return NOERROR; } } else if (nextByte == (Byte)'\0') { line->Append((Char8)nextByte); *str = line->GetPayload(); StringBuf::Free(line); return NOERROR; } else { line->Append((Char8)nextByte); } } return NOERROR; }