src/Ottoman.cpp
changeset 9 629f61203db1
parent 8 21a6c17f4e3e
     1.1 --- a/src/Ottoman.cpp	Mon Sep 28 23:39:08 2009 -0700
     1.2 +++ b/src/Ottoman.cpp	Tue Sep 29 15:46:42 2009 -0700
     1.3 @@ -42,6 +42,7 @@
     1.4      
     1.5      Ottoman::Ottoman()
     1.6      :_writeable(true),
     1.7 +     _file(NULL),
     1.8       _filename(NULL),
     1.9       _lastVersion(NULL),
    1.10       _current( new OverlayDictionary(&Dictionary::kEmpty) )
    1.11 @@ -96,6 +97,9 @@
    1.12              delete _file;
    1.13              _file = curFile;
    1.14          }
    1.15 +        
    1.16 +        if (changed)
    1.17 +            versionsChanged();
    1.18          return changed;
    1.19      }
    1.20      
    1.21 @@ -196,11 +200,12 @@
    1.22          if (!lastVersion)
    1.23              lastVersion = new VersionDictionary(dstFile);
    1.24          VersionDictionary *saved = lastVersion->_appendAndOpen(_current->overlay(), 
    1.25 -                                                            dstFile,
    1.26 -                                                            _current->baseReplaced());
    1.27 +                                                               dstFile,
    1.28 +                                                               _current->baseReplaced());
    1.29          // (don't delete _lastVersion: saved->_previousVersion now points to it.)
    1.30          _lastVersion = saved;
    1.31          _current->revertTo(_lastVersion);
    1.32 +        versionsChanged();
    1.33      }
    1.34      
    1.35      bool Ottoman::save() {
    1.36 @@ -235,6 +240,7 @@
    1.37          File *dstFile = _writeTo(dstFileName, overwriteAllowed);
    1.38          free(_filename);
    1.39          _filename = strdup(dstFileName);
    1.40 +        delete _file;
    1.41          _file = dstFile;
    1.42      }
    1.43  
    1.44 @@ -242,8 +248,13 @@
    1.45          if (!_file)
    1.46              return false;
    1.47          char tempFileName[1024];
    1.48 +#ifdef _DARWIN_C_SOURCE
    1.49 +        ::strlcpy(tempFileName, _filename, sizeof(tempFileName)-1);
    1.50 +        ::strlcat(tempFileName, "~", sizeof(tempFileName));
    1.51 +#else
    1.52          ::strncpy(tempFileName, _filename, sizeof(tempFileName)-1);
    1.53          ::strncat(tempFileName, "~", sizeof(tempFileName));
    1.54 +#endif
    1.55          File *tempFile;
    1.56          {
    1.57              // Check for conflict in existing file: