mirror of
https://github.com/solemnwarning/ipxwrapper
synced 2024-12-30 16:45:37 +01:00
Removed "Settings saved successfully" dialog and cleaned up registry code. Registry key will only be created if necessary upon saving the configuration.
This commit is contained in:
parent
12a1004429
commit
1e71883c3e
@ -61,6 +61,8 @@ struct iface {
|
||||
typedef std::vector<iface> iface_list;
|
||||
|
||||
static void get_nics();
|
||||
static bool reg_write(const char *name, void *value, size_t size);
|
||||
static size_t reg_read(const char *name, void *buf, size_t max_size);
|
||||
static bool save_config();
|
||||
static bool store_nic();
|
||||
static bool saddr_to_bin(unsigned char *bin, const char *str, int nbytes);
|
||||
@ -286,33 +288,30 @@ static LRESULT CALLBACK groupbox_wproc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp
|
||||
}
|
||||
|
||||
int main() {
|
||||
int err = RegCreateKeyEx(
|
||||
int err = RegOpenKeyEx(
|
||||
HKEY_CURRENT_USER,
|
||||
"Software\\IPXWrapper",
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
KEY_QUERY_VALUE | KEY_SET_VALUE,
|
||||
NULL,
|
||||
®key,
|
||||
NULL
|
||||
®key
|
||||
);
|
||||
|
||||
if(err != ERROR_SUCCESS) {
|
||||
die("Error opening registry: " + w32_errmsg(err));
|
||||
if(err != ERROR_FILE_NOT_FOUND) {
|
||||
die("Error opening registry key: " + w32_errmsg(err));
|
||||
}
|
||||
|
||||
regkey = NULL;
|
||||
}
|
||||
|
||||
DWORD gsize = sizeof(global_conf);
|
||||
|
||||
if(!regkey || RegQueryValueEx(regkey, "global", NULL, NULL, (BYTE*)&global_conf, &gsize) != ERROR_SUCCESS || gsize != sizeof(global_conf)) {
|
||||
if(reg_read("global", &global_conf, sizeof(global_conf)) != sizeof(global_conf)) {
|
||||
global_conf.udp_port = DEFAULT_PORT;
|
||||
global_conf.w95_bug = 1;
|
||||
global_conf.bcast_all = 0;
|
||||
global_conf.filter = 1;
|
||||
}
|
||||
|
||||
gsize = 1;
|
||||
|
||||
if(!regkey || RegQueryValueEx(regkey, "log_calls", NULL, NULL, (BYTE*)&log_calls, &gsize) != ERROR_SUCCESS || gsize != 1) {
|
||||
if(reg_read("log_calls", &log_calls, 1) != 1) {
|
||||
log_calls = 0;
|
||||
}
|
||||
|
||||
@ -377,16 +376,14 @@ static void get_nics() {
|
||||
new_if.enabled = true;
|
||||
new_if.primary = false;
|
||||
|
||||
reg_value rval;
|
||||
DWORD rsize = sizeof(rval);
|
||||
bool primary = false;
|
||||
reg_value regval;
|
||||
|
||||
if(RegQueryValueEx(regkey, new_if.hwaddr, NULL, NULL, (BYTE*)&rval, &rsize) == ERROR_SUCCESS && rsize == sizeof(rval)) {
|
||||
baddr_to_str(new_if.ipx_net, rval.ipx_net, 4);
|
||||
baddr_to_str(new_if.ipx_node, rval.ipx_node, 6);
|
||||
if(reg_read(new_if.hwaddr, ®val, sizeof(regval)) != sizeof(regval)) {
|
||||
baddr_to_str(new_if.ipx_net, regval.ipx_net, 4);
|
||||
baddr_to_str(new_if.ipx_node, regval.ipx_node, 6);
|
||||
|
||||
new_if.enabled = rval.enabled;
|
||||
primary = rval.primary;
|
||||
new_if.enabled = regval.enabled;
|
||||
new_if.primary = regval.primary;
|
||||
}
|
||||
|
||||
nics.push_back(new_if);
|
||||
@ -396,6 +393,29 @@ static void get_nics() {
|
||||
}
|
||||
|
||||
static bool reg_write(const char *name, void *value, size_t size) {
|
||||
if(!regkey) {
|
||||
int err = RegCreateKeyEx(
|
||||
HKEY_CURRENT_USER,
|
||||
"Software\\IPXWrapper",
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
KEY_QUERY_VALUE | KEY_SET_VALUE,
|
||||
NULL,
|
||||
®key,
|
||||
NULL
|
||||
);
|
||||
|
||||
if(err != ERROR_SUCCESS) {
|
||||
std::string msg = "Error creating registry key: " + w32_errmsg(err);
|
||||
MessageBox(NULL, msg.c_str(), "Error", MB_OK | MB_TASKMODAL | MB_ICONERROR);
|
||||
|
||||
regkey = NULL;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int err = RegSetValueEx(regkey, name, 0, REG_BINARY, (BYTE*)value, size);
|
||||
if(err != ERROR_SUCCESS) {
|
||||
std::string msg = "Error writing value to registry: " + w32_errmsg(err);
|
||||
@ -407,6 +427,26 @@ static bool reg_write(const char *name, void *value, size_t size) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static size_t reg_read(const char *name, void *buf, size_t max_size) {
|
||||
if(!regkey) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD size = max_size;
|
||||
|
||||
int err = RegQueryValueEx(regkey, name, NULL, NULL, (BYTE*)buf, &size);
|
||||
if(err != ERROR_SUCCESS) {
|
||||
if(err != ERROR_MORE_DATA && err != ERROR_FILE_NOT_FOUND) {
|
||||
std::string msg = "Error reading value from registry: " + w32_errmsg(err);
|
||||
MessageBox(NULL, msg.c_str(), "Error", MB_OK | MB_TASKMODAL | MB_ICONERROR);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static bool save_config() {
|
||||
if(!store_nic()) {
|
||||
return false;
|
||||
@ -447,13 +487,6 @@ static bool save_config() {
|
||||
return false;
|
||||
}
|
||||
|
||||
MessageBox(
|
||||
windows.main,
|
||||
"Settings saved successfully",
|
||||
"Message",
|
||||
MB_OK | MB_ICONINFORMATION
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user