[gnu.g++.bug] Bug with flag a_createonly

savoy@iro.umontreal.ca (Jacques Savoy) (10/04/89)

BUG : The flag a_createonly in GNU C++ Version 1.35

In the class File, i found a bug when i use the following 
instruction :

   if (stto.open(to, io_writeonly, a_createonly) == NULL) {

The flag a_createonly (create the file, fail if it already exists)
doesn't do the correct jog.  
If the file doesn't exist, the file is not open.
If the file exists, the file is truncated.

Here is my program :

------------------------------------------------------------------------
// File bugfile.cc 

#include <stream.h>

void error(char* msg)
{
   cerr << msg;
   exit(-1);
}

void copyFile(char* from, char* to)
{
   File stfrom, stto; 
   char c, msg[128];

// Open for read only (io_readonly), fail if file doesn't exists (a_useonly)
   if (stfrom.open(from, io_readonly, a_useonly) == NULL) {
      strcpy(msg, "can't open file ");
      strcat(msg, from);
      error(msg);
      }

// Open for write only (io_writeonly), 
// fail if file doesn't exists (a_createonly)
   if (stto.open(to, io_writeonly, a_createonly) == NULL) {
      strcpy(msg, "can't open file ");
      strcat(msg, to);
      error(msg);
      }

   while (stfrom.get(c))
      stto.put(c);

   if (stfrom.close() != NULL) {
      strcpy(msg, "can't close file ");
      strcat(msg, from);
      error(msg);
      }
   if (stto.close() != NULL) {
      strcpy(msg, "can't close file ");
      strcat(msg, to);
      error(msg);
      }
}

main(int argc, char* argv[])
{
   char *prgname;

   prgname = argv[0];
   if (argc != 3) {
      error("I need two arguments\n");
      exit(-1);
      }
   cout << "Copy from file " << argv[1];
   cout << " to file " << argv[2] << "\n";
   copyFile(argv[1], argv[2]);
   cout << "End of job\n";
   exit(0);
}

// EOF File bugfile.cc
------------------------------------------------------------------------------
result of $ls t*

t1
test.c
test.cc
test1.cc
test2.cc
treebinptr.cc
ttt

result of $cat ttt
aaaa
bbbb
cccc
dddd

result of $cat t1
Hello
How
Are
You
Today
?

result of $bugfile ttt t2
Copy from file ttt to file t2

error in File t2: No such file or directory
can't open file t2

result of $bugfile ttt t1
Copy from file ttt to file t1
End of job

result of $cat t1
aaaa
bbbb
cccc
dddd
day
?

J.SAVOY  (savoy@iro.umontreal.ca)