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

Defined variables

alphabet defined in line 14; used 9 times
sccsid defined in line 2; never used

Defined macros

SEQLEN defined in line 7; used 8 times
SLOCKTIME defined in line 8; used 1 times
  • in line 35
SLOCKTRIES defined in line 9; used 2 times
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 263
Valid CSS Valid XHTML 1.0 Strict