示例#1
0
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;
}