Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
/*********************************************************************
 *   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);
}