Exemplo n.º 1
0
rc_t CC FastqReaderFileMake( const ReaderFile **reader,
                             const KDirectory* dir,
                             const char* file,
                             enum FASTQQualityFormat qualityFormat,
                             int8_t defaultReadNumber,
                             bool ignoreSpotGroups)
{
    rc_t rc;
    FastqReaderFile* self = (FastqReaderFile*) malloc ( sizeof * self );
    if ( self == NULL )
    {
         rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
    }
    else
    {
        memset(self, 0, sizeof(*self));
        rc = ReaderFileInit ( self );
        self->dad.vt.v1 = & FastqReaderFile_vt;

        self->dad.pathname = string_dup(file, strlen(file)+1);
        if ( self->dad.pathname == NULL )
        {
            rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
        }
        else
        {
            rc = KLoaderFile_Make( & self->reader, dir, file, 0, true );
        }
        if (rc == 0)
        {
            self->pb.self = self;
            self->pb.input = FASTQ_input;
            self->pb.qualityFormat = qualityFormat;
            self->pb.defaultReadNumber = defaultReadNumber;
            self->pb.secondaryReadNumber = 0;
            self->pb.ignoreSpotGroups = ignoreSpotGroups;

            rc = FASTQScan_yylex_init(& self->pb, false);
            if (rc == 0)
            {
                *reader = (const ReaderFile *) self;
            }
            else
            {
                KLoaderFile_Release( self->reader, true );
                ReaderFileRelease( & self->dad );
                *reader = 0;
            }
        }
        else
        {
            ReaderFileRelease( & self->dad );
            *reader = 0;
        }
    }

    return rc;
}
Exemplo n.º 2
0
rc_t FastqReaderFileWhack( FastqReaderFile* f )
{
    FastqReaderFile* self = (FastqReaderFile*) f;

    FASTQScan_yylex_destroy(& self->pb);

    if (self->reader)
        KLoaderFile_Release ( self->reader, true );

    ReaderFileWhack( &self->dad );

    free ( self );
    return 0;
}
Exemplo n.º 3
0
LIB_EXPORT rc_t CC KLoaderFile_Make(const KLoaderFile **file, const KDirectory* dir, const char* filename,
                                    const uint8_t* md5_digest, bool read_ahead)
{
    rc_t rc = 0;
    KLoaderFile* obj = NULL;

    if( file == NULL || dir == NULL || filename == NULL ) {
        rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcNull);
    } else {
        *file = NULL;
        if( (obj = calloc(1, sizeof(*obj))) == NULL ||
            (obj->filename = strdup(filename)) == NULL ) {
            rc = RC(rcApp, rcFile, rcConstructing, rcMemory, rcExhausted);
        } else {
            if( (rc = KDirectoryAddRef(dir)) == 0 ) {
                obj->dir = dir;
                if( md5_digest != NULL ) {
                    obj->has_md5 = true;
                    memcpy(obj->md5_digest, md5_digest, sizeof(obj->md5_digest));
                }
                if( (rc = KLoaderFile_AllocateBuffer(obj)) == 0 ) {
                    char resolved[4096];
                    char* ext = NULL;

                    strcpy(resolved, filename);
                    ext = strrchr(resolved, '.');
                    DBG(("%s adding %s\n", __func__, resolved));
                    rc = KLoadProgressbar_File(&obj->job, resolved, obj->dir);
                    if( ext != NULL && strcmp(ext, ".gz") == 0 ) {
                        obj->compress_type = compress_gzip;
                    } else if( ext != NULL && strcmp(ext, ".bz2") == 0 ) {
                        obj->compress_type = compress_bzip2;
                    }
                    if( rc != 0 && obj->compress_type != compress_none ) {
                        *ext = '\0';
                        DBG(("%s retry adding as %s\n", __func__, resolved));
                        if( (rc = KLoadProgressbar_File(&obj->job, resolved, obj->dir)) == 0 ) {
                            obj->has_md5 = false;
                            obj->compress_type = compress_none;
                        }
                    }
                    if( rc == 0 &&
                        (rc = KFileInit(&obj->dad, (const KFile_vt*)&KLoaderFile_vtbl, "KLoaderFile", filename, true, false)) == 0 ) {
                        obj->file = &obj->dad;
#if WINDOWS
                        obj->ahead = false;
#else
                        obj->ahead = read_ahead;
#endif
                        obj->realname = strdup(resolved);
                        if( obj->realname == NULL ) {
                            rc = RC(rcApp, rcFile, rcConstructing, rcMemory, rcExhausted);
                        }
                    }
                }
            }
        }
    }
    if( rc == 0 ) {
        *file = obj;
    } else {
        *file = NULL;
        KLoaderFile_Release(obj, false);
    }
    return rc;
}