projects
/
tinc
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a3f04cf
)
Ensure we call CloseServiceHandle() in case of errors.
author
Guus Sliepen
<guus@tinc-vpn.org>
Tue, 6 Mar 2018 18:31:17 +0000
(19:31 +0100)
committer
Guus Sliepen
<guus@tinc-vpn.org>
Tue, 6 Mar 2018 18:31:17 +0000
(19:31 +0100)
src/tincctl.c
patch
|
blob
|
history
diff --git
a/src/tincctl.c
b/src/tincctl.c
index
54816a3
..
5ba7161
100644
(file)
--- a/
src/tincctl.c
+++ b/
src/tincctl.c
@@
-722,19
+722,20
@@
static bool remove_service(void) {
SC_HANDLE manager = NULL;
SC_HANDLE service = NULL;
SERVICE_STATUS status = {0};
SC_HANDLE manager = NULL;
SC_HANDLE service = NULL;
SERVICE_STATUS status = {0};
+ bool success = false;
manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!manager) {
fprintf(stderr, "Could not open service manager: %s\n", winerror(GetLastError()));
manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!manager) {
fprintf(stderr, "Could not open service manager: %s\n", winerror(GetLastError()));
-
return false
;
+
goto exit
;
}
service = OpenService(manager, identname, SERVICE_ALL_ACCESS);
if(!service) {
fprintf(stderr, "Could not open %s service: %s\n", identname, winerror(GetLastError()));
}
service = OpenService(manager, identname, SERVICE_ALL_ACCESS);
if(!service) {
fprintf(stderr, "Could not open %s service: %s\n", identname, winerror(GetLastError()));
-
return false
;
+
goto exit
;
}
if(!ControlService(service, SERVICE_CONTROL_STOP, &status)) {
}
if(!ControlService(service, SERVICE_CONTROL_STOP, &status)) {
@@
-745,9
+746,13
@@
static bool remove_service(void) {
if(!DeleteService(service)) {
fprintf(stderr, "Could not remove %s service: %s\n", identname, winerror(GetLastError()));
if(!DeleteService(service)) {
fprintf(stderr, "Could not remove %s service: %s\n", identname, winerror(GetLastError()));
-
return false
;
+
goto exit
;
}
}
+ success = true;
+
+exit:
+
if(service) {
CloseServiceHandle(service);
}
if(service) {
CloseServiceHandle(service);
}
@@
-756,9
+761,11
@@
static bool remove_service(void) {
CloseServiceHandle(manager);
}
CloseServiceHandle(manager);
}
- fprintf(stderr, "%s service removed\n", identname);
+ if(success) {
+ fprintf(stderr, "%s service removed\n", identname);
+ }
- return
true
;
+ return
success
;
}
#endif
}
#endif