cvs-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Cvs-cvs] Changes to ccvs/src/main.c


From: Mark D . Baushke
Subject: [Cvs-cvs] Changes to ccvs/src/main.c
Date: Thu, 29 Sep 2005 17:36:12 -0400

Index: ccvs/src/main.c
diff -u ccvs/src/main.c:1.260 ccvs/src/main.c:1.261
--- ccvs/src/main.c:1.260       Thu Sep 29 20:33:02 2005
+++ ccvs/src/main.c     Thu Sep 29 21:36:11 2005
@@ -778,18 +778,31 @@
        char out[COMMITID_RAW_SIZE * 2];
        ssize_t len = 0;
        time_t rightnow = time (NULL);
-       unsigned char *p = (unsigned char *) (buf + sizeof (time_t));
-       int fd = open ("/dev/urandom", O_RDONLY, O_NOCTTY);
+       char *startrand = buf + sizeof (time_t);
+       unsigned char *p = (unsigned char *) startrand;
+       size_t randbytes = RANDOM_BYTES;
+       int flags = O_RDONLY;
+       int fd;
+#ifdef O_NOCTTY
+       flags |= O_NOCTTY;
+#endif
+       if (rightnow != (time_t)-1) {
+           /* try to use more random data */
+           randbytes = COMMITID_RAW_SIZE;
+           startrand = buf;
+       }
+       fd = open ("/dev/urandom", flags);
        if (fd >= 0) {
-           len = read (fd, buf + sizeof (time_t), RANDOM_BYTES);
+           len = read (fd, startrand, randbytes);
            close (fd);
        }
-       /* time_t can be unsigned */
-       if (len > 0 && rightnow != (time_t)-1) {
-           while (rightnow > 0) {
-               *--p = rightnow % (UCHAR_MAX + 1);
-               rightnow /= UCHAR_MAX + 1;
-           }
+       if (len > 0) {
+           /* time_t can be unsigned */
+           if (rightnow != (time_t)-1)
+               while (rightnow > 0) {
+                   *--p = rightnow % (UCHAR_MAX + 1);
+                   rightnow /= UCHAR_MAX + 1;
+               }
        } else {
            long int pid = (long int)getpid ();
            p = (unsigned char *) (buf + sizeof (buf));




reply via email to

[Prev in Thread] Current Thread [Next in Thread]