bool CAnyAdapter::disconnect(CAdapterConnection *pa_poAdConn){ bool bRetVal = CAdapter::disconnect(pa_poAdConn); //clean interface data and reset to empty interface freeAllData(); setupFBInterface(&scm_stFBInterfaceSpec, 0, 0, false); return bRetVal; }
/********************************************************************* * Function: void sfSetCurrent( sf, list ) * * Description: Sets 'list' to current scan. * Updates SpecFile structure. * Parameters: * Input : (1) SpecFile pointer * (2) New scan * *********************************************************************/ int sfSetCurrent( SpecFile *sf, long index,int *error ) { ObjectList *list, *flist; SpecScan *scan, *fscan; long nbytes; long fileheadsize,start; /* * If same scan nothing to do */ if (sfSameScan(sf,index)) return(0); /* * It is a new scan. Free memory allocated for previous one. */ freeAllData(sf); /* * Find scan */ list = findScanByIndex(&(sf->list),index); if (list == (ObjectList *)NULL) { *error = SF_ERR_SCAN_NOT_FOUND; return(-1); } /* * Read full scan into buffer */ scan = list->contents; if (sf->scanbuffer != ( char * ) NULL) free(sf->scanbuffer); sf->scanbuffer = ( char *) malloc(scan->size); if (sf->scanbuffer == (char *)NULL) { *error = SF_ERR_MEMORY_ALLOC; return(-1); } lseek(sf->fd,scan->offset,SEEK_SET); nbytes = read(sf->fd,sf->scanbuffer,scan->size); if ( nbytes == -1) { *error = SF_ERR_FILE_READ; return(-1); } if ( sf->scanbuffer[0] != '#' || sf->scanbuffer[1] != 'S') { *error = SF_ERR_FILE_READ; return(-1); } sf->scanheadersize = scan->data_offset - scan->offset; /* * if different file read fileheader also */ if (!sfSameFile(sf,list)) { if (sf->filebuffer != ( char * ) NULL) free(sf->filebuffer); start = scan->file_header; flist = findFirstInFile(&(sf->list),scan->file_header); if (flist == (ObjectList *) NULL) { fileheadsize = 0; sf->filebuffersize = fileheadsize; } else { fscan = flist->contents; fileheadsize = fscan->offset - start; } if (fileheadsize > 0) { sf->filebuffer = ( char *) malloc(fileheadsize); if (sf->filebuffer == (char *)NULL) { *error = SF_ERR_MEMORY_ALLOC; return(-1); } lseek(sf->fd,start,SEEK_SET); read(sf->fd,sf->filebuffer,fileheadsize); if ( nbytes == -1) { *error = SF_ERR_FILE_READ; return(-1); } sf->filebuffersize = fileheadsize; } } sf->scansize = scan->size; sf->current = list; return(1); }