Annotation of 43BSDReno/sys/nfs/TEST/billboard/src/bb_codata.c, revision 1.1.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.