Annotation of 42BSD/usr.bin/uucp/gename.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)gename.c   5.2 (Berkeley) 7/19/83";
                      3: #endif
                      4: 
                      5: #include "uucp.h"
                      6: #include <sys/types.h>
                      7: 
                      8: #define SEQLEN 4
                      9: 
                     10: /*******
                     11:  *     gename(pre, sys, grade, file)   generate file name
                     12:  *     char grade, *sys, pre, *file;
                     13:  *
                     14:  *     return codes:  none
                     15:  */
                     16: 
                     17: gename(pre, sys, grade, file)
                     18: char pre, *sys, grade, *file;
                     19: {
                     20:        static char sqnum[5];
                     21: 
                     22:        getseq(sqnum);
                     23:        sprintf(file, "%c.%.7s%c%.*s", pre, sys, grade, SEQLEN, sqnum);
                     24:        DEBUG(4, "file - %s\n", file);
                     25:        return;
                     26: }
                     27: 
                     28: 
                     29: #define SLOCKTIME 10L
                     30: #define SLOCKTRIES 5
                     31: 
                     32: /*******
                     33:  *     getseq(snum)    get next sequence number
                     34:  *     char *snum;
                     35:  *
                     36:  *     return codes:  none
                     37:  */
                     38: 
                     39: static
                     40: getseq(snum)
                     41: register char *snum;
                     42: {
                     43:        /*
                     44:         * the alphabet can be anything, but if it's not in ascii order,
                     45:         * sequence ordering is not preserved
                     46:         */
                     47:        char    *alphabet =
                     48:            "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
                     49:        register int i, fd;
                     50:        static char *lastchar;
                     51: 
                     52:        if (lastchar == NULL || (snum[SEQLEN-1] = *(lastchar++)) == '\0') {
                     53:                for (i = 0; i < SLOCKTRIES; i++) {
                     54:                        if (!ulockf(SEQLOCK, (time_t)SLOCKTIME))
                     55:                                break;
                     56:                        sleep(5);
                     57:                }
                     58: 
                     59:                ASSERT(i < SLOCKTRIES, "CAN NOT GET", "SEQLOCK", 0);
                     60: 
                     61:                if ((fd = open(SEQFILE, 2)) >= 0) {
                     62:                        int alphalen;
                     63:                        register char   *p;
                     64:                        char *index();
                     65: 
                     66:                        alphalen = strlen(alphabet);
                     67:                        read(fd, snum, SEQLEN);
                     68:                        /* increment the penultimate character */
                     69:                        for (i = SEQLEN - 2; i >= 0; --i) {
                     70:                                if ((p = index(alphabet, snum[i])) == NULL) {
                     71:                                        /* drastic but effective */
                     72:                                        snum[i] = alphabet[alphalen - 1];
                     73:                                        DEBUG(6, "bad seqf: %s\n", snum);
                     74:                                }
                     75:                                if (++p < &alphabet[alphalen]) {
                     76:                                        snum[i] = *p;
                     77:                                        break;
                     78:                                } else          /* carry */
                     79:                                        snum[i] = alphabet[0];  /* continue */
                     80:                        }
                     81:                        snum[SEQLEN-1] = alphabet[0];
                     82:                } else {
                     83:                        if ((fd = creat(SEQFILE, 0666)) < 0)
                     84:                                return(FAIL);
                     85:                        for (i = 0; i < SEQLEN; i++)
                     86:                                snum[i] = alphabet[0];
                     87:                }
                     88: 
                     89:                lseek(fd, 0L, 0);
                     90:                write(fd, snum, SEQLEN);
                     91:                close(fd);
                     92:                rmlock(SEQLOCK);
                     93:                lastchar = alphabet + 1;
                     94:        }
                     95:        return(0);
                     96: }

unix.superglobalmegacorp.com

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