]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix windows line endings and fix potential memory leak from SWITCH_GLOBAL_dirs on...
authorMichael Jerris <mike@jerris.com>
Sun, 20 Aug 2006 03:36:14 +0000 (03:36 +0000)
committerMichael Jerris <mike@jerris.com>
Sun, 20 Aug 2006 03:36:14 +0000 (03:36 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2340 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch.c
src/switch_core.c

index 5e298b67d9f17ceb3b465f370e6a16c0cc71d6fe..e9e88378a127fc5687717b0bb94998e8830469c7 100644 (file)
@@ -118,52 +118,52 @@ static int freeswitch_kill_background()
 }
 
 #ifdef WIN32
-SERVICE_STATUS_HANDLE hStatus;\r
-SERVICE_STATUS status;\r
-\r
-void WINAPI ServiceCtrlHandler( DWORD control )\r
-{\r
-    switch( control )\r
-    {\r
-    case SERVICE_CONTROL_SHUTDOWN:\r
-    case SERVICE_CONTROL_STOP:\r
-        // do shutdown stuff here\r
-               switch_core_destroy();\r
-        status.dwCurrentState = SERVICE_STOPPED;\r
-        status.dwWin32ExitCode = 0;\r
-        status.dwCheckPoint = 0;\r
-        status.dwWaitHint = 0;\r
-        break;\r
-    case SERVICE_CONTROL_INTERROGATE:\r
-        // just set the current state to whatever it is...\r
-        break;\r
-    }\r
-\r
-    SetServiceStatus( hStatus, &status );\r
-}\r
-\r
-void WINAPI service_main( DWORD numArgs, char **args )\r
-{\r
+SERVICE_STATUS_HANDLE hStatus;
+SERVICE_STATUS status;
+
+void WINAPI ServiceCtrlHandler( DWORD control )
+{
+    switch( control )
+    {
+    case SERVICE_CONTROL_SHUTDOWN:
+    case SERVICE_CONTROL_STOP:
+        // do shutdown stuff here
+               switch_core_destroy();
+        status.dwCurrentState = SERVICE_STOPPED;
+        status.dwWin32ExitCode = 0;
+        status.dwCheckPoint = 0;
+        status.dwWaitHint = 0;
+        break;
+    case SERVICE_CONTROL_INTERROGATE:
+        // just set the current state to whatever it is...
+        break;
+    }
+
+    SetServiceStatus( hStatus, &status );
+}
+
+void WINAPI service_main( DWORD numArgs, char **args )
+{
        const char *err = NULL;
-    // we have to initialize the service-specific stuff\r
-    memset( &status, 0, sizeof(SERVICE_STATUS) );\r
-    status.dwServiceType = SERVICE_WIN32;\r
-    status.dwCurrentState = SERVICE_START_PENDING;\r
-    status.dwControlsAccepted = SERVICE_ACCEPT_STOP;\r
-\r
-    hStatus = RegisterServiceCtrlHandler( SERVICENAME, &ServiceCtrlHandler );\r
-\r
-    SetServiceStatus( hStatus, &status );\r
+    // we have to initialize the service-specific stuff
+    memset( &status, 0, sizeof(SERVICE_STATUS) );
+    status.dwServiceType = SERVICE_WIN32;
+    status.dwCurrentState = SERVICE_START_PENDING;
+    status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
+
+    hStatus = RegisterServiceCtrlHandler( SERVICENAME, &ServiceCtrlHandler );
+
+    SetServiceStatus( hStatus, &status );
        set_high_priority();
        if (switch_core_init_and_modload(lfile, &err) != SWITCH_STATUS_SUCCESS) {
-           status.dwCurrentState = SERVICE_STOPPED;\r
+           status.dwCurrentState = SERVICE_STOPPED;
        } else {
                status.dwCurrentState = SERVICE_RUNNING;
        }
-\r
-    SetServiceStatus( hStatus, &status );\r
-}\r
-\r
+
+    SetServiceStatus( hStatus, &status );
+}
+
 #endif
 
 int main(int argc, char *argv[])
@@ -183,46 +183,46 @@ int main(int argc, char *argv[])
     };
 
        if (argv[1] && !strcmp(argv[1], "-service")) {
-               if(StartServiceCtrlDispatcher( dispatchTable ) == 0 )\r
-               {\r
-                       //Not loaded as a service\r
+               if(StartServiceCtrlDispatcher( dispatchTable ) == 0 )
+               {
+                       //Not loaded as a service
                        fprintf(stderr, "Error Freeswitch loaded as a console app with -service option\n");
                        fprintf(stderr, "To install the service load freeswitch with -install\n");
-               }\r
-               exit(0);\r
+               }
+               exit(0);
        }
        if (argv[1] && !strcmp(argv[1], "-install")) {
                char exePath[1024];
            char servicePath[1024];
 
-               SC_HANDLE handle = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );\r
+               SC_HANDLE handle = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
                GetModuleFileName( NULL, exePath, 1024 );
                snprintf(servicePath, sizeof(servicePath), "%s -service", exePath);
-               CreateService(\r
-                       handle,\r
-                       SERVICENAME,\r
-                       SERVICENAME,\r
-                       GENERIC_READ | GENERIC_EXECUTE,\r
-                       SERVICE_WIN32_OWN_PROCESS,\r
-                       SERVICE_AUTO_START,\r
-                       SERVICE_ERROR_IGNORE,\r
-                       servicePath,\r
-                       NULL,\r
-                       NULL,\r
-                       NULL,\r
-                       NULL,\r
-                       NULL\r
-               );\r
+               CreateService(
+                       handle,
+                       SERVICENAME,
+                       SERVICENAME,
+                       GENERIC_READ | GENERIC_EXECUTE,
+                       SERVICE_WIN32_OWN_PROCESS,
+                       SERVICE_AUTO_START,
+                       SERVICE_ERROR_IGNORE,
+                       servicePath,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL
+               );
                exit(0);
        }
        if (argv[1] && !strcmp(argv[1], "-uninstall")) {
-               SC_HANDLE handle = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );\r
-               SC_HANDLE service = OpenService( handle, SERVICENAME, DELETE );\r
-               if( service != NULL )\r
-               {\r
-                       // remove the service!\r
-                       DeleteService( service );\r
-               }\r
+               SC_HANDLE handle = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
+               SC_HANDLE service = OpenService( handle, SERVICENAME, DELETE );
+               if( service != NULL )
+               {
+                       // remove the service!
+                       DeleteService( service );
+               }
                exit(0);
        }
 #endif
index d9cf79e9b1ff8a717f22c31e39d1e472d358638e..326391fb6ccf08310bb6cbdcdd676cafc39b9fb1 100644 (file)
@@ -2961,27 +2961,27 @@ SWITCH_DECLARE(void) switch_core_set_globals(void)
        char exePath[1024];
        char *lastbacklash;
        GetModuleFileName( NULL, exePath, BUFSIZE );
-       lastbacklash = strrchr( exePath, '\\');\r
+       lastbacklash = strrchr( exePath, '\\');
        exePath[(lastbacklash - exePath + 1)] = '\0';
-       if ((SWITCH_GLOBAL_dirs.base_dir = (char *) malloc(BUFSIZE))) {
+       if (!SWITCH_GLOBAL_dirs.base_dir && (SWITCH_GLOBAL_dirs.base_dir = (char *) malloc(BUFSIZE))) {
                snprintf(SWITCH_GLOBAL_dirs.base_dir, BUFSIZE, "%s", exePath);
        }
-       if ((SWITCH_GLOBAL_dirs.mod_dir = (char *) malloc(BUFSIZE))) {
+       if (!SWITCH_GLOBAL_dirs.mod_dir && (SWITCH_GLOBAL_dirs.mod_dir = (char *) malloc(BUFSIZE))) {
                snprintf(SWITCH_GLOBAL_dirs.mod_dir, BUFSIZE, "%s\\mod", exePath);
        }
-       if ((SWITCH_GLOBAL_dirs.conf_dir = (char *) malloc(BUFSIZE))) {
+       if (!SWITCH_GLOBAL_dirs.conf_dir && (SWITCH_GLOBAL_dirs.conf_dir = (char *) malloc(BUFSIZE))) {
                snprintf(SWITCH_GLOBAL_dirs.conf_dir, BUFSIZE, "%s\\conf", exePath);
        }
-       if ((SWITCH_GLOBAL_dirs.log_dir = (char *) malloc(BUFSIZE))) {
+       if (!SWITCH_GLOBAL_dirs.log_dir && (SWITCH_GLOBAL_dirs.log_dir = (char *) malloc(BUFSIZE))) {
                snprintf(SWITCH_GLOBAL_dirs.log_dir, BUFSIZE, "%s\\log", exePath);
        }
-       if ((SWITCH_GLOBAL_dirs.db_dir = (char *) malloc(BUFSIZE))) {
+       if (!SWITCH_GLOBAL_dirs.db_dir && (SWITCH_GLOBAL_dirs.db_dir = (char *) malloc(BUFSIZE))) {
                snprintf(SWITCH_GLOBAL_dirs.db_dir, BUFSIZE, "%s\\db", exePath);
        }
-       if ((SWITCH_GLOBAL_dirs.script_dir = (char *) malloc(BUFSIZE))) {
+       if (!SWITCH_GLOBAL_dirs.script_dir && (SWITCH_GLOBAL_dirs.script_dir = (char *) malloc(BUFSIZE))) {
                snprintf(SWITCH_GLOBAL_dirs.script_dir, BUFSIZE, "%s\\scripts", exePath);
        }
-       if ((SWITCH_GLOBAL_dirs.htdocs_dir = (char *) malloc(BUFSIZE))) {
+       if (!SWITCH_GLOBAL_dirs.htdocs_dir && (SWITCH_GLOBAL_dirs.htdocs_dir = (char *) malloc(BUFSIZE))) {
                snprintf(SWITCH_GLOBAL_dirs.htdocs_dir, BUFSIZE, "%s\\mod", exePath);
        }
 #else
@@ -2998,7 +2998,7 @@ SWITCH_DECLARE(void) switch_core_set_globals(void)
 #else
 #ifdef WIN32
        GetTempPath(dwBufSize, lpPathBuffer);
-       if ((SWITCH_GLOBAL_dirs.htdocs_dir = (char *) malloc(BUFSIZE))) {
+       if (!SWITCH_GLOBAL_dirs.htdocs_dir && (SWITCH_GLOBAL_dirs.htdocs_dir = (char *) malloc(BUFSIZE))) {
                snprintf(SWITCH_GLOBAL_dirs.htdocs_dir, BUFSIZE, "%s", lpPathBuffer);
        }
 #else
@@ -3270,5 +3270,16 @@ SWITCH_DECLARE(switch_status_t) switch_core_destroy(void)
                apr_terminate();
        }
 
+#ifdef WIN32
+       free(SWITCH_GLOBAL_dirs.base_dir);
+       free(SWITCH_GLOBAL_dirs.mod_dir);
+       free(SWITCH_GLOBAL_dirs.conf_dir);
+       free(SWITCH_GLOBAL_dirs.log_dir);
+       free(SWITCH_GLOBAL_dirs.db_dir);
+       free(SWITCH_GLOBAL_dirs.script_dir);
+       free(SWITCH_GLOBAL_dirs.htdocs_dir);
+       free(SWITCH_GLOBAL_dirs.temp_dir);
+#endif
+
        return SWITCH_STATUS_SUCCESS;
 }