🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Jacques Savoy Wed, 04 Oct 1989 14:55
Bug with flag a_createonly
#469
Author: Jacques Savoy
Date: Wed, 04 Oct 1989 14:55
122 lines
2815 bytes
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)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads