# 2.11BSD#431 - /usr/src/usr.bin/uucp/gename.c

##### Functions

    gename            X

##### Macros

    SEQLEN            X
    SLOCKTIME         X
    SLOCKTRIES        X

       1: #ifndef lint
       2: static char sccsid[] = "@(#)gename.c	5.6 (Berkeley) 10/9/85";
       3: #endif
       4:
       5: #include "uucp.h"
       6:
       7: #define SEQLEN 4
       8: #define SLOCKTIME 10L
       9: #define SLOCKTRIES 5
      10: /*
      11:  * the alphabet can be anything, but if it's not in ascii order,
      12:  * sequence ordering is not preserved
      13:  */
      14: static char alphabet[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
      15:
      16: #ifdef BSD4_2
      17: #include <sys/file.h>
      18: #endif BSD4_2
      19:
      20: /*LINTLIBRARY*/
      21:
      22: /*
      23:  *	generate file name
      24:  */
      25: gename(pre, sys, grade, file)
      26: char pre, *sys, grade, *file;
      27: {
      28:     register int i, fd;
      29:     static char snum[5];
      30:     static char *lastchar = NULL;
      31:
      32:     if (lastchar == NULL || (snum[SEQLEN-1] = *(lastchar++)) == '\0') {
      33: #ifndef BSD4_2
      34:         for (i = 0; i < SLOCKTRIES; i++) {
      35:             if (!ulockf(SEQLOCK, SLOCKTIME))
      36:                 break;
      37:             sleep(5);
      38:         }
      39:
      40:         if (i >= SLOCKTRIES) {
      41:             logent(SEQLOCK, "CAN NOT LOCK");
      42:             goto getrandseq;
      43:         }
      44: #endif !BSD4_2
      45:
      46:         if ((fd = open(SEQFILE, 2)) >= 0) {
      47:             register char *p;
      48: #ifdef BSD4_2
      49:             flock(fd, LOCK_EX);
      50: #endif !BSD4_2
      51:             read(fd, snum, SEQLEN);
      52:             /* increment the penultimate character */
      53:             for (i = SEQLEN - 2; i >= 0; --i) {
      54:                 if ((p = index(alphabet, snum[i])) == NULL)
      55:                     goto getrandseq;
      56:                 if (++p < &alphabet[sizeof alphabet - 1]) {
      57:                     snum[i] = *p;
      58:                     break;
      59:                 } else      /* carry */
      60:                     snum[i] = alphabet[0];  /* continue */
      61:             }
      62:             snum[SEQLEN-1] = alphabet[0];
      63:         } else {
      64:             extern int errno;
      65:             fd = creat(SEQFILE, 0666);
      66: getrandseq:     srand((int)time((time_t *)0));
      67:             assert(SEQFILE, "is missing or trashed\n", errno);
      68:             for (i = 0; i < SEQLEN; i++)
      69:                 snum[i] = alphabet[rand() % (sizeof alphabet - 1)];
      70:             snum[SEQLEN-1] = alphabet[0];
      71:         }
      72:
      73:         if (fd >= 0) {
      74:             lseek(fd, 0L, 0);
      75:             write(fd, snum, SEQLEN);
      76:             close(fd);
      77:         }
      78: #ifndef BSD4_2
      79:         rmlock(SEQLOCK);
      80: #endif !BSD4_2
      81:         lastchar = alphabet + 1;
      82:     }
      83:     sprintf(file,"%c.%.*s%c%.*s", pre, SYSNSIZE, sys, grade, SEQLEN, snum);
      84:     DEBUG(4, "file - %s\n", file);
      85: }

#### Defined functions

gename defined in line 25; used 14 times

- in /usr/src/usr.bin/uucp/cico.c line 379
- in /usr/src/usr.bin/uucp/uucp.c line 326, 415
- in /usr/src/usr.bin/uucp/uux.c line 150-153(2), 191, 289, 327, 355-360(2), 410, 429
- in /usr/src/usr.bin/uucp/uuxqt.c line 264, 347

#### Defined variables

alphabet defined in line 14; used 9 times

- in line 54-62(5), 69-70(3), 81

sccsid defined in line 2; never used

#### Defined macros

SEQLEN defined in line 7; used 8 times

- in line 32, 51-53(2), 62, 68-75(3), 83

SLOCKTIME defined in line 8; used 1 times

- in line 35

SLOCKTRIES defined in line 9; used 2 times

- in line 34, 40

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 935 |