summaryrefslogtreecommitdiff
path: root/cpp/src/slice2freeze/Main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/slice2freeze/Main.cpp')
-rw-r--r--cpp/src/slice2freeze/Main.cpp84
1 files changed, 48 insertions, 36 deletions
diff --git a/cpp/src/slice2freeze/Main.cpp b/cpp/src/slice2freeze/Main.cpp
index 0790f7ff60e..8a149b57f5d 100644
--- a/cpp/src/slice2freeze/Main.cpp
+++ b/cpp/src/slice2freeze/Main.cpp
@@ -19,6 +19,18 @@ using namespace IceUtil;
using namespace IceUtilInternal;
using namespace Slice;
+static IceUtilInternal::Output _H;
+static IceUtilInternal::Output _C;
+
+//
+// Callback for Crtl-C signal handling
+//
+static void closeCallback()
+{
+ _H.close();
+ _C.close();
+}
+
static string ICE_ENCODING_COMPARE = "Freeze::IceEncodingCompare";
struct DictIndex
@@ -1732,9 +1744,6 @@ main(int argc, char* argv[])
if(status == EXIT_SUCCESS && !preprocess)
{
- SignalHandler::addFile(fileH);
- SignalHandler::addFile(fileC);
-
u->mergeModules();
u->sort();
@@ -1748,27 +1757,30 @@ main(int argc, char* argv[])
}
}
- Output H;
- H.open(fileH.c_str());
- if(!H)
+ SignalHandler::addFile(fileH);
+ SignalHandler::addFile(fileC);
+
+ SignalHandler::setCallback(closeCallback);
+
+ _H.open(fileH.c_str());
+ if(!_H)
{
cerr << argv[0] << ": can't open `" << fileH << "' for writing: " << strerror(errno) << endl;
u->destroy();
return EXIT_FAILURE;
}
- printHeader(H);
- printFreezeTypes(H, dicts, indices);
+ printHeader(_H);
+ printFreezeTypes(_H, dicts, indices);
- Output C;
- C.open(fileC.c_str());
- if(!C)
+ _C.open(fileC.c_str());
+ if(!_C)
{
cerr << argv[0] << ": can't open `" << fileC << "' for writing: " << strerror(errno) << endl;
u->destroy();
return EXIT_FAILURE;
}
- printHeader(C);
- printFreezeTypes(C, dicts, indices);
+ printHeader(_C);
+ printFreezeTypes(_C, dicts, indices);
for(vector<string>::const_iterator i = extraHeaders.begin(); i != extraHeaders.end(); ++i)
{
@@ -1782,57 +1794,57 @@ main(int argc, char* argv[])
}
if(!guard.empty())
{
- C << "\n#ifndef " << guard;
- C << "\n#define " << guard;
+ _C << "\n#ifndef " << guard;
+ _C << "\n#define " << guard;
}
- C << "\n#include <";
+ _C << "\n#include <";
if(!include.empty())
{
- C << include << '/';
+ _C << include << '/';
}
- C << hdr << '>';
+ _C << hdr << '>';
if(!guard.empty())
{
- C << "\n#endif";
+ _C << "\n#endif";
}
}
string s = fileH;
transform(s.begin(), s.end(), s.begin(), ToIfdef());
- H << "\n#ifndef __" << s << "__";
- H << "\n#define __" << s << "__";
- H << '\n';
+ _H << "\n#ifndef __" << s << "__";
+ _H << "\n#define __" << s << "__";
+ _H << '\n';
if(dicts.size() > 0)
{
- H << "\n#include <Freeze/Map.h>";
+ _H << "\n#include <Freeze/Map.h>";
}
if(indices.size() > 0)
{
- H << "\n#include <Freeze/Index.h>";
+ _H << "\n#include <Freeze/Index.h>";
}
{
for(StringList::const_iterator p = includes.begin(); p != includes.end(); ++p)
{
- H << "\n#include <" << changeInclude(*p, includePaths) << "." + headerExtension + ">";
+ _H << "\n#include <" << changeInclude(*p, includePaths) << "." + headerExtension + ">";
}
}
- C << "\n#include <Ice/BasicStream.h>";
- C << "\n#include <";
+ _C << "\n#include <Ice/BasicStream.h>";
+ _C << "\n#include <";
if(include.size())
{
- C << include << '/';
+ _C << include << '/';
}
- C << includeH << '>';
+ _C << includeH << '>';
- printVersionCheck(H);
- printVersionCheck(C);
+ printVersionCheck(_H);
+ printVersionCheck(_C);
- printDllExportStuff(H, dllExport);
+ printDllExportStuff(_H, dllExport);
if(dllExport.size())
{
dllExport += " ";
@@ -1843,7 +1855,7 @@ main(int argc, char* argv[])
{
try
{
- if(!writeDict(argv[0], u, *p, H, C, dllExport))
+ if(!writeDict(argv[0], u, *p, _H, _C, dllExport))
{
u->destroy();
return EXIT_FAILURE;
@@ -1862,7 +1874,7 @@ main(int argc, char* argv[])
{
try
{
- if(!writeIndex(argv[0], u, *q, H, C, dllExport))
+ if(!writeIndex(argv[0], u, *q, _H, _C, dllExport))
{
u->destroy();
return EXIT_FAILURE;
@@ -1878,8 +1890,8 @@ main(int argc, char* argv[])
}
- H << "\n\n#endif\n";
- C << '\n';
+ _H << "\n\n#endif\n";
+ _C << '\n';
}