[Initng-svn] r4400 - initng/trunk/plugins/service_file

svn at initng.thinktux.net svn at initng.thinktux.net
Wed Jun 7 23:28:14 CEST 2006


Author: jimmy
Date: Wed Jun  7 23:28:11 2006
New Revision: 4400

Modified:
   initng/trunk/plugins/service_file/initng_service_file.c

Log:
Some cleanups, and fixed segfault.


Modified: initng/trunk/plugins/service_file/initng_service_file.c
==============================================================================
--- initng/trunk/plugins/service_file/initng_service_file.c	(original)
+++ initng/trunk/plugins/service_file/initng_service_file.c	Wed Jun  7 23:28:11 2006
@@ -789,29 +789,40 @@
 	{
 		char *new_argv[3];
 		char *new_env[4];
+
 		new_argv[0] = file;
 		new_argv[1] = i_strdup("internal_setup");
 		new_argv[2] = NULL;
-		
+
 		/* SERVICE=getty/tty1 */
 		new_env[0] = i_calloc(strlen(name) + 20, sizeof(char));
 		strcpy(new_env[0], "SERVICE=");
 		strcat(new_env[0], name);
-		
+
 		/* SERVICE_FILE=/etc/init/getty */
 		new_env[1] = i_calloc(strlen(file) + 20, sizeof(char));
 		strcpy(new_env[1], "SERVICE_FILE=");
-		strcat(new_env[1], name);
-	
+		strcat(new_env[1], file);
+
 		/* NAME=tty1 */
 		{
-			char * tmp = strrchr(name, '/') + 1;
-			new_env[2] = i_calloc(strlen(tmp ? tmp : name) + 20, sizeof(char));
-			strcpy(new_env[2], "NAME=");
-			strcat(new_env[2], tmp ? tmp : name);
+			char * tmp = strrchr(name, '/');
+			if(tmp && tmp[0] == '/') tmp++;
+
+			if(tmp && tmp[0])
+			{
+				new_env[2] = i_calloc(strlen(tmp) + 20, sizeof(char));
+				strcpy(new_env[2], "NAME=");
+				strcat(new_env[2], tmp);
+			} else {
+				new_env[2] = i_calloc(strlen(name) + 20, sizeof(char));
+				strcpy(new_env[2], "NAME=");
+				strcat(new_env[2], name);
+			}
 		}
 	
 		new_env[3]=NULL;
+		
 		execve(new_argv[0], new_argv, new_env);
 		_exit(10);
 	}


More information about the Initng-svn mailing list