shithub: mc

Download patch

ref: d6095b1b433002ab661f3ebdd3bf8275f2f1925f
parent: 58633cbf5d7bbbf095787b7b01b6ad6b032def3c
author: Ori Bernstein <[email protected]>
date: Thu Jan 25 13:40:55 EST 2018

Clean up code.

--- a/lib/std/env+posixy.myr
+++ b/lib/std/env+posixy.myr
@@ -28,10 +28,12 @@
 
 	envinit()
 	for envp : environ
-		env = cstrconvp(envp)
-		n = min(name.len, env.len)
-		if sleq(name, env[:n]) && sleq(env[n:n+1], "=")
-			-> `Some env[n+1:]
+		if envp != Zenvp
+			env = cstrconvp(envp)
+			n = min(name.len, env.len)
+			if sleq(name, env[:n]) && sleq(env[n:n+1], "=")
+				-> `Some env[n+1:]
+			;;
 		;;
 	;;
 	-> `None
@@ -49,26 +51,23 @@
 
 	envdup()
 	idx = 0
+	e = fmt("{}={}\0", name, val)
 	for envp : environ
 		if envp == Zenvp
+			slpush(&environ, (0 : byte#))
+			environ[idx] = (e : byte#)
 			break
 		;;
 		env = cstrconvp(envp)
 		n = min(name.len, env.len)
 		if sleq(name, env[:n]) && sleq(env[n:n+1], "=")
+			e = cstrconvp(environ[idx])
+			std.slfree(e)
+			environ[idx] = (e : byte#)
 			break
 		;;
 		idx++
 	;;
-	if idx == environ.len - 1
-		slpush(&environ, (0 : byte#))
-	else
-		e = cstrconvp(environ[idx])
-		std.slfree(e)
-	;;
-
-	e = fmt("{}={}\0", name, val)
-	environ[idx] = (e : byte#)
 	sys.__cenvp = (environ : byte##)
 }
 
@@ -84,7 +83,7 @@
 		len++
 		environ = sys.__cenvp[:len + 1]
 		if environ[len] == Zenvp
-			environ = sys.__cenvp[:len]
+			environ = sys.__cenvp[:len + 1]
 			break
 		;;
 	;;
@@ -100,14 +99,15 @@
 	envinit()
 	dup = std.slalloc(environ.len + 1)
 	for var i = 0; i < environ.len; i++
-		s = cstrconvp(environ[i])
-		e = std.slalloc(s.len + 1)
-		slcp(e[:e.len - 1], s)
-		e[e.len - 1] = 0
-
-		dup[i] = (e : byte#)
+		if environ[i] != Zenvp
+			s = cstrconvp(environ[i])
+			e = std.slalloc(s.len + 1)
+			slcp(e[:e.len - 1], s)
+			e[e.len - 1] = 0
+			dup[i] = (e : byte#)
+		;;
 	;;
 	dup[dup.len - 1] = Zenvp
-	environ = dup[:dup.len - 1]
+	environ = dup
 	sys.__cenvp = (environ : byte##)
 }