Annotation of 43BSDReno/sys/nfs/TEST/billboard/src/bb_codata.c, revision 1.1

1.1     ! root        1: /*
        !             2:  ******************************************************************************
        !             3:  *
        !             4:  * Module: bb_codata.c
        !             5:  *
        !             6:  * Description: 
        !             7:  *
        !             8:  * Functions: 
        !             9:  *         bb_put_codata()     - Place a company data entry in the structure.
        !            10:  *         bb_get_codata()     - Get a company data entry from the structure.
        !            11:  *         bb_get_imp_cnt()    - Return the number of implementations.
        !            12:  *         bb_read_companies() - Read the company data file.
        !            13:  *         bb_read_1_codata()  - Read a single company data from the file.
        !            14:  *
        !            15:  *
        !            16:  ******************************************************************************
        !            17:  */
        !            18: 
        !            19: /*
        !            20:  ******************************************************************************
        !            21:  * Include Files
        !            22:  ******************************************************************************
        !            23:  */
        !            24: #include <stdio.h>
        !            25: #include <rpc/rpc.h>
        !            26: #include "common.h"
        !            27: #include "protocol.h"
        !            28: #include "server.h"
        !            29: 
        !            30: 
        !            31: static int             co_cnt; /* The number of company data entries.  */
        !            32: static BB_co_data      codata[BB_MAX_IMP];/* The company data records. */
        !            33: 
        !            34: void bb_get_ip_lines();
        !            35: char *strtok();
        !            36: 
        !            37: 
        !            38: int
        !            39: bb_put_codata( p_codata)
        !            40:   BB_co_data   *p_codata;      /* The company data to put in the table */
        !            41: {
        !            42:     if ( co_cnt + 1 >= BB_MAX_IMP )
        !            43:     {
        !            44:        fprintf( stderr, "FAILURE can't install company data record: %s.\n",
        !            45:                 p_codata->company);
        !            46:        return BB_FAILURE;
        !            47:     }
        !            48: 
        !            49:     memcpy( &codata[ co_cnt], p_codata, sizeof( *p_codata));
        !            50:     return co_cnt++;
        !            51: }
        !            52: 
        !            53: int
        !            54: bb_get_codata( index, p_codata)
        !            55:   int          index;          /* The index of the data to retrieve.   */
        !            56:   BB_co_data   *p_codata;      /* Space to put the data.               */
        !            57: {
        !            58:     if ( index >= co_cnt )
        !            59:     {
        !            60:        return BB_FAILURE;
        !            61:     }
        !            62: 
        !            63:     memcpy( p_codata, &codata[ index], sizeof( *p_codata));
        !            64:     return BB_SUCCESS;
        !            65: }
        !            66: 
        !            67: int
        !            68: bb_get_imp_cnt()
        !            69: {
        !            70:     return co_cnt;
        !            71: }
        !            72: 
        !            73: 
        !            74: /*************************************************************************
        !            75: **                                                                     **
        !            76: **  bb_read_companies() - Read the file containing the company data.   **
        !            77: **  For each entry create a company data record, and add an entry in the**
        !            78: **  hash table.  The company data file also contains IP addresses, which**
        !            79: **  are stored in the ip_table.                                                **
        !            80: **                                                                     **
        !            81: *************************************************************************/
        !            82: int
        !            83: bb_read_companies()
        !            84: {
        !            85:     int                status;         /* Status of function call returns.     */
        !            86:     int                index;          /* Index of the company data record.    */
        !            87:     BB_co_data cdata;          /* Space for the readding of records.   */
        !            88: 
        !            89:     while( (status = bb_read_1_codata( &cdata)) != BB_END_OF_FILE )
        !            90:     {
        !            91:        /*
        !            92:        **  If the read was not successful exit.
        !            93:        */
        !            94:        if ( status != BB_SUCCESS )
        !            95:        {
        !            96:            fprintf( stderr, "ABORTING: Can't read company data file.\n");
        !            97:            return BB_FAILURE;
        !            98:        }
        !            99:        
        !           100:        /*
        !           101:        **  Put the company data record in the array.
        !           102:        */
        !           103:        if ( (index = bb_put_codata( &cdata)) == BB_FAILURE )
        !           104:        {
        !           105:            fprintf( stderr, "ABORTING: Not enough company data space.\n");
        !           106:            return BB_FAILURE;
        !           107:        }
        !           108: 
        !           109:        /*
        !           110:        **  Fill in the hash record for the company data record.
        !           111:        */
        !           112:        if ( bb_put_hash( codata[index].id, index) != BB_SUCCESS )
        !           113:        {
        !           114:            fprintf( stderr, "ABORTING: Unable to hash company: %s.\n",
        !           115:                     cdata.company);
        !           116:            return BB_FAILURE;
        !           117:        }
        !           118:     }
        !           119: 
        !           120:     /*
        !           121:     **  Read all of the company data with no problems.
        !           122:     */
        !           123:     return BB_SUCCESS;
        !           124: }
        !           125: 
        !           126: 
        !           127: /*************************************************************************
        !           128: **                                                                     **
        !           129: **  bb_read_1_codata() - Read one company data record from the co data **
        !           130: **  file.  If the file is not open then open it and start readding. The        **
        !           131: **  file is ordered in the same manner as the BB_co_data structure.  IP        **
        !           132: **  means a set of internet addresses are on the same line.  Each of   **
        !           133: **  these addresses belongs to the companies that follow up to the next        **
        !           134: **  IP specification.                                                  **
        !           135: **                                                                     **
        !           136: *************************************************************************/
        !           137: static FILE    *file = NULL;   /* File pointer to company data file.   */
        !           138: 
        !           139: int
        !           140: bb_read_1_codata( p_codata)
        !           141:   BB_co_data   *p_codata;      /* Output a company data record.        */
        !           142: {
        !           143:     static int ip_count;       /* Number of IP addresses for company.  */
        !           144:     static int ip_index;       /* Place where IP addresses start.      */
        !           145:     bool_t     done = FALSE;   /* Done readding this codata record.    */
        !           146:     char       line[BB_MAX_LINE_LEN];  /* Input line buffer.           */
        !           147: 
        !           148:     /*
        !           149:     **  If the file is not open then it neads to be.
        !           150:     */
        !           151:     if ( file == NULL ) 
        !           152:     {
        !           153:        if ( (file = fopen( BB_CODATA_FILE, "r")) == NULL )
        !           154:        {
        !           155:            fprintf( stderr, "FAILED opening the company data file '%s'.\n",
        !           156:                     BB_CODATA_FILE);
        !           157:            return BB_FAILURE;
        !           158:        }
        !           159: 
        !           160:        ip_count = ip_index = 0;
        !           161:     }
        !           162: 
        !           163:     while ( done != TRUE )
        !           164:     {
        !           165:        do
        !           166:        {
        !           167:            if ( fgets( line, BB_MAX_LINE_LEN, file) == NULL )
        !           168:            {
        !           169:                return BB_END_OF_FILE;
        !           170:            }
        !           171:        }
        !           172:        while ( line[0] == BB_COMMENT_DESIGNATOR );
        !           173: 
        !           174:        switch ( line[BB_DES_CHAR] )
        !           175:        {
        !           176:            case BB_IP_DESIGNATOR:
        !           177:                bb_get_ip_lines( &line[BB_DES_START],
        !           178:                                 &ip_count, &ip_index);
        !           179:                break;
        !           180:            case BB_CO_DESIGNATOR:
        !           181:                line[strlen(line)-1] = NUL;
        !           182:                strncpy( p_codata->company, &line[BB_DES_START],
        !           183:                         BB_COMPANY_NAME_LEN);
        !           184:                break;
        !           185:            case BB_IMP_DESIGNATOR:
        !           186:                line[strlen(line)-1] = NUL;
        !           187:                strncpy( p_codata->imp, &line[BB_DES_START],
        !           188:                         BB_IMP_NAME_LEN);
        !           189:                break;
        !           190:            case BB_ID_DESIGNATOR:
        !           191:                line[strlen(line)-1] = NUL;
        !           192:                strncpy( p_codata->id, &line[BB_DES_START],
        !           193:                         BB_ID_NAME_LEN);
        !           194:                break;
        !           195:            case BB_BOOTH_DESIGNATOR:
        !           196:                p_codata->booth = atoi( &line[BB_DES_START]);
        !           197:                break;
        !           198:            case BB_FLAGS_DESIGNATOR:
        !           199:                p_codata->flags = atoi( &line[BB_DES_START]);
        !           200:                break;
        !           201:            case BB_END_DESIGNATOR:
        !           202:                done = TRUE;
        !           203:                break;
        !           204:            default :
        !           205:                if ( line[0] != '\n' )
        !           206:                {
        !           207:                    fprintf( stderr, "ERROR: Invalid field designator '%s'.\n",
        !           208:                            line);
        !           209:                }
        !           210:                break;
        !           211:        }
        !           212:     }
        !           213:     p_codata->ip_cnt = ip_count;
        !           214:     p_codata->ip_idx = ip_index;
        !           215: 
        !           216:     return BB_SUCCESS;
        !           217: }
        !           218: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.