As ftruncate is not availabe on all platforms, switch back to
authorBodo Möller <bodo@openssl.org>
Sun, 23 Jan 2000 19:58:03 +0000 (19:58 +0000)
committerBodo Möller <bodo@openssl.org>
Sun, 23 Jan 2000 19:58:03 +0000 (19:58 +0000)
opening the output file with "wb" to truncate it except on VMS
(where the file now keeps its original length because it is opened
with "rb+" -- does VMS have ftruncate?)

crypto/rand/randfile.c

index e9721f66c25f210261fe6599b087779ebbdf7306..1882d7df2cb4a6c683f764a0dac8c77facaa1637 100644 (file)
@@ -121,27 +121,23 @@ int RAND_write_file(const char *file)
        FILE *out = NULL;
        int n;
 
+#ifdef VMS
        /* Under VMS, fopen(file, "wb") will create a new version of the
           same file.  This is not good, so let's try updating an existing
-          one, and create file only if it doesn't already exist.  This
-          should be completely harmless on system that have no file
-          versions.                                    -- Richard Levitte */
+          one, and create file only if it doesn't already exist. */
        out=fopen(file,"rb+");
-       if (out == NULL
-#ifdef ENOENT
-           && errno == ENOENT
+       if (out == NULL && errno != ENOENT)
+               goto err;
 #endif
-          )
+
+       if (out == NULL)
                {
-               errno = 0;
 #if defined O_CREAT && defined O_EXCL
                /* chmod(..., 0600) is too late to protect the file,
                 * permissions should be restrictive from the start */
-               {
-                   int fd = open(file, O_CREAT | O_EXCL, 0600);
-                   if (fd != -1)
+               int fd = open(file, O_CREAT | O_EXCL, 0600);
+               if (fd != -1)
                        out = fdopen(fd, "wb");
-               }
 #else          
                out=fopen(file,"wb");
 #endif
@@ -166,8 +162,6 @@ int RAND_write_file(const char *file)
                ret+=i;
                if (n <= 0) break;
                }
-       if (ret > 0)
-               ftruncate(fileno(out), ret);
        fclose(out);
        memset(buf,0,BUFSIZE);
 err: