Esempio n. 1
0
NITFPRIV(NITF_BOOL) SegmentWriter_write(NITF_DATA * data,
                                        nitf_IOInterface* io, 
                                        nitf_Error * error)
{
    size_t size, bytesLeft;
    size_t readSize = READ_SIZE;
    size_t bytesToRead = READ_SIZE;
    char* buf = NULL;
    SegmentWriterImpl *impl = (SegmentWriterImpl *) data;
    
    size = (*impl->segmentSource->iface->getSize)(impl->segmentSource->data, error);
    bytesLeft = size;

    buf = (char*) NITF_MALLOC(readSize);
    if (!buf)
    {
        nitf_Error_init(error, NITF_STRERROR(NITF_ERRNO), NITF_CTXT,
                        NITF_ERR_MEMORY);
        goto CATCH_ERROR;
    }

    while (bytesLeft > 0)
    {
        if (bytesLeft < readSize)
            bytesToRead = (size_t)bytesLeft;
        else
            bytesToRead = readSize;

        /* read the bytes */
        if (!(*(impl->segmentSource->iface->read))
                (impl->segmentSource->data, buf, bytesToRead, error))
        {
            goto CATCH_ERROR;
        }

        /* write them */
        if (!nitf_IOInterface_write(io, buf, (int)bytesToRead, error))
            goto CATCH_ERROR;
        bytesLeft -= bytesToRead;
    }

    NITF_FREE(buf);
    return NITF_SUCCESS;

CATCH_ERROR:
    if (buf) NITF_FREE(buf);
    return NITF_FAILURE;
}
Esempio n. 2
0
NITFAPI(NITF_BOOL) nitf_TREUtils_basicWrite(nitf_IOInterface* io,
                                            nitf_TRE* tre,
                                            struct _nitf_Record* record,
                                            nitf_Error* error)
{
    nitf_Uint32 length;
    char* data = NULL;
    NITF_BOOL ok = NITF_FAILURE;

    data = nitf_TREUtils_getRawData(tre, &length, error);
    if (data)
    {
        ok = nitf_IOInterface_write(io, data, length, error);
        NITF_FREE(data);
    }
    return ok;
}
Esempio n. 3
0
NITFPRIV(NITF_BOOL) defaultWrite(nitf_IOInterface* io,
				 struct _nitf_TRE* tre,
				 struct _nitf_Record* record,
				 nitf_Error* error)
{
    nitf_Field* field;
    nitf_Pair* pair = nitf_HashTable_find(
            ((nitf_TREPrivateData*)tre->priv)->hash, NITF_TRE_RAW);
    if (pair == NULL)
    {
        nitf_Error_init(error, "No raw_data in default!", NITF_CTXT, NITF_ERR_INVALID_OBJECT);
        return NITF_FAILURE;
    }
    field = (nitf_Field*)pair->data;

    if (!nitf_IOInterface_write(io, field->raw, field->length, error))
        return NITF_FAILURE;
    return NITF_SUCCESS;
}