Annotation of coherent/b/STREAMS/conf/bin/src/devadm.c, revision 1.1.1.1

1.1       root        1: #define        _DDI_DKI        1
                      2: #define        _SYSV4          1
                      3: 
                      4: /*
                      5:  * This program performs some simple processing on a device master-file,
                      6:  * mdevice (4) as specified in the "System File and Devices Reference
                      7:  * Manual" for Unix System V, Release 4.
                      8:  *
                      9:  * The first part of the program inhales the 'mdevice' file. Other processing
                     10:  * is dependent on the internal details of the character-device interface
                     11:  * used by Coherent - our aim is to supply details for a mapping layer that
                     12:  * converts the Coherent device system calling format.
                     13:  */
                     14: /*
                     15:  *-IMPORTS:
                     16:  *     <sys/compat.h>
                     17:  *             CONST
                     18:  *             PROTO
                     19:  *             ARGS ()
                     20:  *             LOCAL
                     21:  *     <stdlib.h>
                     22:  *             EXIT_SUCCESS
                     23:  *             EXIT_FAILURE
                     24:  *             NULL
                     25:  *             free ()
                     26:  *             malloc ()
                     27:  *     <unistd.h>
                     28:  *             STDERR_FILENO
                     29:  *     "mdev.h"
                     30:  *             read_mdev_file ()
                     31:  *     "sdev.h"
                     32:  *             read_sdev_file ()
                     33:  *     "symbol.h"
                     34:  *             symbol_init ()
                     35:  *     "assign.h"
                     36:  *              assign_imajors ()
                     37:  *     "mkconf.c"
                     38:  *             write_conf_c ()
                     39:  */
                     40: 
                     41: #include <sys/compat.h>
                     42: #include <stdlib.h>
                     43: #include <unistd.h>
                     44: #include <stdio.h>
                     45: #include <string.h>
                     46: #include <errno.h>
                     47: 
                     48: #include "mdev.h"
                     49: #include "sdev.h"
                     50: #include "mtune.h"
                     51: #include "stune.h"
                     52: #include "symbol.h"
                     53: #include "assign.h"
                     54: #include "mkconf.h"
                     55: #include "ehand.h"
                     56: 
                     57: /*
                     58:  * Some ancient systems do not define EXIT_SUCCESS or EXIT_FAILURE.
                     59:  */
                     60: 
                     61: #ifndef EXIT_SUCCESS
                     62: #define EXIT_SUCCESS   0
                     63: #define        EXIT_FAILURE    1
                     64: #endif
                     65: 
                     66: 
                     67: LOCAL int              _report_mode = 0;
                     68: 
                     69: /*
                     70:  * Test whether we are in report mode or not.
                     71:  */
                     72: 
                     73: #if    USE_PROTO
                     74: int (report_mode) (void)
                     75: #else
                     76: int
                     77: report_mode ARGS (())
                     78: #endif
                     79: {
                     80:        return _report_mode;
                     81: }
                     82: 
                     83: 
                     84: /*
                     85:  * For some applications, we need to be able to report conflicts in a special
                     86:  * way. By convention, "item1" is something new and "item2" is the old item
                     87:  * that it conflicts with.
                     88:  */
                     89: 
                     90: #if    USE_PROTO
                     91: void (report_conflict) (CONST unsigned char * item1,
                     92:                        CONST unsigned char * item2, CONST char * msg)
                     93: #else
                     94: void
                     95: report_conflict ARGS ((item1, item2, msg))
                     96: CONST unsigned char * item1;
                     97: CONST unsigned char * item2;
                     98: CONST char    *        msg;
                     99: #endif
                    100: {
                    101:        if (_report_mode)
                    102:                fprintf (stdout, "%s ", item2);
                    103:        else
                    104:                fprintf (stderr, "%s: %s with %s\n", item1, msg, item2);
                    105: }
                    106: 
                    107: #if    TRACE
                    108: /*
                    109:  * If some modules have been compiled with debugging on, this enables that
                    110:  * debugging output with -V
                    111:  */
                    112: 
                    113: int    do_debug;
                    114: #endif
                    115: 
                    116: 
                    117: #if    USE_PROTO
                    118: void usage (void)
                    119: #else
                    120: void
                    121: usage ()
                    122: #endif
                    123: {
                    124:        static char     usage_msg [] = {
                    125:                "Usage:\t-d\t\tGenerate device configuration tables and makefiles\n"
                    126:                "\t-t\t\tGenerate tunable parameter tables\n"
                    127:                "\t-M mdevice\tSet a line in \"mdevice\" to the values in the argument\n"
                    128:                "\t-S sdevice\tSet a line in \"sdevice\" to the values in the argument\n"
                    129:                "\t-m mtune\tSet a line in \"mtune\" to the values in the argument\n"
                    130:                "\t-s stune\tSet a line in \"stune\" to the values in the argument\n"
                    131:                "\t-W\t\tWrite out changed files\n"
                    132:                "\t-r\t\tReport conflicts caused by proposed changes\n"
                    133:                "\t-I dir\t\tDirectory where files are located\n"
                    134:        };
                    135: 
                    136:        write (STDERR_FILENO, usage_msg, sizeof (usage_msg) - 1);
                    137: }
                    138: 
                    139: 
                    140: #if    USE_PROTO
                    141: int main (int argc, char * argv [])
                    142: #else
                    143: int
                    144: main (argc, argv)
                    145: int            argc;
                    146: char         * argv [];
                    147: #endif
                    148: {
                    149:        extinfo_t     * extinfop;
                    150:        int             do_devices = 0;
                    151:        int             do_tune = 0;
                    152:        int             need_mdev = 0;
                    153:        int             need_sdev = 0;
                    154:        int             need_mtune = 0;
                    155:        int             need_stune = 0;
                    156:        int             write_changes = 0;
                    157:        mdev_t        * mdev_changes = NULL;
                    158:        sdev_t        * sdev_changes = NULL;
                    159:        mtune_t       * mtune_changes = NULL;
                    160:        stune_t       * stune_changes = NULL;
                    161:        int             i;
                    162: 
                    163:        symbol_init ();
                    164: 
                    165:        if (argc == 1) {
                    166: 
                    167:                usage ();
                    168:                return EXIT_FAILURE;
                    169:        }
                    170: 
                    171:        for (i = 1 ; i < argc ; i ++) {
                    172:                int             switches;
                    173:                int             j;
                    174: 
                    175:                if (argv [i][0] != '-') {
                    176:                        usage ();
                    177:                        return EXIT_FAILURE;
                    178:                }
                    179: 
                    180:                switches = strlen (argv [i]);
                    181: 
                    182:                for (j = 1 ; j < switches ; j ++) {
                    183:                        char          * string_arg;
                    184:                        int             next_arg;
                    185: 
                    186:                        if (argv [i][j + 1] == 0)
                    187:                                string_arg = argv [next_arg = i + 1];
                    188:                        else
                    189:                                string_arg = & argv [next_arg = i][j + 1];
                    190: 
                    191: 
                    192:                        switch (argv [i][j]) {
                    193: 
                    194:                        case 'd':
                    195:                                do_devices ++;
                    196:                                need_mdev ++;
                    197:                                need_sdev ++;
                    198:                                break;
                    199: 
                    200:                        case 't':
                    201:                                do_tune ++;
                    202:                                need_mtune ++;
                    203:                                need_stune ++;
                    204:                                break;
                    205: 
                    206: #if    TRACE
                    207:                        case 'V':
                    208:                                do_debug ++;
                    209:                                need_mdev ++;
                    210:                                need_sdev ++;
                    211:                                need_mtune ++;
                    212:                                need_stune ++;
                    213:                                break;
                    214: #endif
                    215: 
                    216:                        case 'M':
                    217:                                read_mdev_string (string_arg, & mdev_changes);
                    218:                                need_mdev ++;
                    219:                                switches = 0;
                    220:                                break;
                    221: 
                    222:                        case 'S':
                    223:                                read_sdev_string (string_arg, & sdev_changes);
                    224:                                need_mdev ++;
                    225:                                need_sdev ++;
                    226:                                switches = 0;
                    227:                                break;
                    228: 
                    229:                        case 'm':
                    230:                                read_mtune_string (string_arg,
                    231:                                                   & mtune_changes);
                    232:                                need_mtune ++;
                    233:                                switches = 0;
                    234:                                break;
                    235: 
                    236:                        case 's':
                    237:                                read_stune_string (string_arg,
                    238:                                                   & stune_changes);
                    239:                                need_mtune ++;
                    240:                                need_stune ++;
                    241:                                switches = 0;
                    242:                                break;
                    243: 
                    244:                        case 'I':
                    245:                                if (chdir (string_arg) == 0) {
                    246:                                        switches = 0;
                    247:                                        break;
                    248:                                }
                    249: 
                    250:                                throw_error ("Cannot change directory to %s, "
                    251:                                             "OS says %s", string_arg,
                    252:                                             strerror (errno));
                    253:                                return EXIT_FAILURE;
                    254: 
                    255:                        case 'W':
                    256:                                write_changes ++;
                    257:                                break;
                    258: 
                    259:                        case 'r':
                    260:                                _report_mode ++;
                    261:                                break;
                    262: 
                    263:                        default:
                    264:                                usage ();
                    265:                                return EXIT_FAILURE;
                    266:                        }
                    267: 
                    268:                        if (switches == 0) {
                    269:                                i = next_arg;
                    270:                                break;
                    271:                        }
                    272:                }
                    273:        }
                    274: 
                    275:        if (need_mdev) {
                    276:                need_mdev = mdev_changes != NULL && write_changes;
                    277:                read_mdev_file ("mdevice", need_mdev ? "mdevice.new" : NULL,
                    278:                                 & mdev_changes);
                    279:        }
                    280:        if (need_sdev) {
                    281:                need_sdev = sdev_changes != NULL && write_changes;
                    282:                read_sdev_file ("sdevice", need_sdev ? "sdevice.new" : NULL,
                    283:                                 & sdev_changes);
                    284:        }
                    285:        if (need_mtune) {
                    286:                need_mtune = mtune_changes != NULL && write_changes;
                    287:                read_mtune_file ("mtune", need_mtune ? "mtune.new" : NULL,
                    288:                                 & mtune_changes);
                    289:        }
                    290:        if (need_stune) {
                    291:                need_stune = stune_changes != NULL && write_changes;
                    292:                read_stune_file ("stune", need_stune ? "stune.new" : NULL,
                    293:                                 & stune_changes);
                    294:        }
                    295: 
                    296:        if (do_devices) {
                    297:                if ((extinfop = assign_imajors ()) != NULL) {
                    298: 
                    299:                        write_conf_c ("conf.c", extinfop);
                    300:                        free (extinfop);
                    301:                }
                    302: 
                    303:                write_link ("drvbld.mak", "template.mak");
                    304:        }
                    305: 
                    306:        if (do_tune)
                    307:                write_conf_h ("conf.h");
                    308: 
                    309:        if (need_mdev) {
                    310:                remove ("mdevice.old");
                    311:                if (rename ("mdevice", "mdevice.old") != 0 ||
                    312:                    rename ("mdevice.new", "mdevice") != 0)
                    313:                        throw_error ("Unable to update 'mdevice' file with "
                    314:                                     "new entries, OS says %s",
                    315:                                     strerror (errno));
                    316:        }
                    317:        if (need_sdev) {
                    318:                remove ("sdevice.old");
                    319:                if (rename ("sdevice", "sdevice.old") != 0 ||
                    320:                    rename ("sdevice.new", "sdevice") != 0)
                    321:                        throw_error ("Unable to update 'sdevice' file with "
                    322:                                     "new entries, OS says %s",
                    323:                                     strerror (errno));
                    324:        }
                    325:        if (need_mtune) {
                    326:                remove ("mtune.old");
                    327:                if (rename ("mtune", "mtune.old") != 0 ||
                    328:                    rename ("mtune.new", "mtune") != 0)
                    329:                        throw_error ("Unable to update 'mtune' file with "
                    330:                                     "new entries, OS says %s",
                    331:                                     strerror (errno));
                    332:        }
                    333:        if (need_stune) {
                    334:                remove ("stune.old");
                    335:                if (rename ("stune", "stune.old") != 0 ||
                    336:                    rename ("stune.new", "stune") != 0)
                    337:                        throw_error ("Unable to update 'stune' file with "
                    338:                                     "new entries, OS says %s",
                    339:                                     strerror (errno));
                    340:        }
                    341:        return EXIT_SUCCESS;
                    342: }

unix.superglobalmegacorp.com

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