mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 17:16:25 +00:00
164 lines
No EOL
5.5 KiB
C#
164 lines
No EOL
5.5 KiB
C#
/*-
|
|
* See the file LICENSE for redistribution information.
|
|
*
|
|
* Copyright (c) 2009, 2011 Oracle and/or its affiliates. All rights reserved.
|
|
*
|
|
*/
|
|
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
using System.Collections;
|
|
using System.Diagnostics;
|
|
using System.Text;
|
|
using System.Runtime.Serialization.Formatters.Binary;
|
|
using BerkeleyDB;
|
|
|
|
namespace excs_env {
|
|
class Program {
|
|
const int EXIT_FAILURE = 1;
|
|
const int EXIT_SUCCESS = 0;
|
|
const string progName = "excs_env";
|
|
static void Main(string[] args) {
|
|
string data_dir, home;
|
|
|
|
/*
|
|
* excs_env is meant to be run from build_windows\AnyCPU, in either
|
|
* the Debug or Release directory. The required core libraries,
|
|
* however, are in either build_windows\Win32 or build_windows\x64,
|
|
* depending upon the platform. That location needs to be added to
|
|
* the PATH environment variable for the P/Invoke calls to work.
|
|
*/
|
|
try {
|
|
String pwd = Environment.CurrentDirectory;
|
|
pwd = Path.Combine(pwd, "..");
|
|
pwd = Path.Combine(pwd, "..");
|
|
if (IntPtr.Size == 4)
|
|
pwd = Path.Combine(pwd, "Win32");
|
|
else
|
|
pwd = Path.Combine(pwd, "x64");
|
|
#if DEBUG
|
|
pwd = Path.Combine(pwd, "Debug");
|
|
#else
|
|
pwd = Path.Combine(pwd, "Release");
|
|
#endif
|
|
pwd += ";" + Environment.GetEnvironmentVariable("PATH");
|
|
Environment.SetEnvironmentVariable("PATH", pwd);
|
|
} catch (Exception e) {
|
|
Console.WriteLine(
|
|
"Unable to set the PATH environment variable.");
|
|
Console.WriteLine(e.Message);
|
|
return;
|
|
}
|
|
|
|
data_dir = home = null;
|
|
switch (args.Length) {
|
|
case 0:
|
|
data_dir = "envData";
|
|
home = "envHome";
|
|
break;
|
|
case 2:
|
|
home = args[0];
|
|
data_dir = args[1];
|
|
break;
|
|
case 1:
|
|
home = args[0];
|
|
break;
|
|
default:
|
|
usage();
|
|
return;
|
|
}
|
|
|
|
if (!Directory.Exists(home)) {
|
|
Console.WriteLine("Creating home directory: {0}", home);
|
|
try {
|
|
Directory.CreateDirectory(home);
|
|
} catch {
|
|
Console.WriteLine("Unable to create {0}", home);
|
|
return;
|
|
}
|
|
}
|
|
if (data_dir != null && !Directory.Exists(home + "/" + data_dir)) {
|
|
Console.WriteLine(
|
|
"Creating home directory: {0}/{1}", home, data_dir);
|
|
try {
|
|
Directory.CreateDirectory(home + "/" + data_dir);
|
|
} catch {
|
|
Console.WriteLine(
|
|
"Unable to create {0}/{1}", home, data_dir);
|
|
return;
|
|
}
|
|
}
|
|
|
|
/* Set up environment. */
|
|
if (SetUpEnv(home, data_dir) == EXIT_FAILURE) {
|
|
Console.WriteLine("Fail to set up the environment.");
|
|
return;
|
|
}
|
|
Console.WriteLine("Set up the environment.");
|
|
|
|
/* Tear down the environment and remove its files. */
|
|
if (TearDownEnv(home) == EXIT_FAILURE) {
|
|
Console.WriteLine(
|
|
"Fail to tear down the environment.");
|
|
return;
|
|
}
|
|
Console.WriteLine("Tear down the environment.");
|
|
}
|
|
|
|
/*
|
|
* Set up environment.
|
|
*/
|
|
public static int SetUpEnv(string home, string data_dir) {
|
|
DatabaseEnvironment env;
|
|
DatabaseEnvironmentConfig envConfig;
|
|
|
|
/* Configure an environment. */
|
|
envConfig = new DatabaseEnvironmentConfig();
|
|
envConfig.MPoolSystemCfg = new MPoolConfig();
|
|
envConfig.MPoolSystemCfg.CacheSize = new CacheInfo(
|
|
0, 64 * 1024, 1);
|
|
envConfig.Create = true;
|
|
envConfig.DataDirs.Add(data_dir);
|
|
envConfig.CreationDir = data_dir;
|
|
envConfig.ErrorPrefix = progName;
|
|
envConfig.UseLogging = true;
|
|
envConfig.UseLocking = true;
|
|
envConfig.UseMPool = true;
|
|
envConfig.UseTxns = true;
|
|
|
|
/* Create and open the environment. */
|
|
try {
|
|
env = DatabaseEnvironment.Open(home, envConfig);
|
|
} catch (Exception e) {
|
|
Console.WriteLine("{0}", e.Message);
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
Console.ReadLine();
|
|
env.Close();
|
|
return EXIT_SUCCESS;
|
|
}
|
|
|
|
/*
|
|
* Tear down environment and remove its files.
|
|
* Any log or database files and the environment
|
|
* directory are not removed.
|
|
*/
|
|
public static int TearDownEnv(string home) {
|
|
/* Remove environment regions. */
|
|
try {
|
|
DatabaseEnvironment.Remove(home);
|
|
} catch (Exception e) {
|
|
Console.WriteLine("{0}: {1}\n{2}",
|
|
e.Source, e.Message, e.StackTrace);
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|
|
|
|
public static void usage() {
|
|
Console.WriteLine("Usage: excs_env [home] [data dir]");
|
|
}
|
|
}
|
|
} |