fixup! gluon-core: implement popen3() in gluon/util.lua
This commit is contained in:
		
							parent
							
								
									c1df15690b
								
							
						
					
					
						commit
						0b3f0e9b4e
					
				| @ -190,20 +190,20 @@ function M.log(message, verbose) | |||||||
| 	posix_syslog.syslog(posix_syslog.LOG_INFO, message) | 	posix_syslog.syslog(posix_syslog.LOG_INFO, message) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| M.PipePolicies = { | M.subprocess = {} | ||||||
| 	DISCARD=-1, | 
 | ||||||
| 	INHERIT=0, | M.subprocess.DEVNULL = -1 | ||||||
| 	CREATE=1 | M.subprocess.INHERIT = nil | ||||||
| } | M.subprocess.PIPE = 1 | ||||||
| 
 | 
 | ||||||
| -- Execute a program found using command PATH search, like the shell. | -- Execute a program found using command PATH search, like the shell. | ||||||
| -- Return the pid, as well as the I/O streams as pipes or nil on error. | -- Return the pid, as well as the I/O streams as pipes or nil on error. | ||||||
| function M.popen3(policies, path, ...) | function M.subprocess.popen(policies, path, ...) | ||||||
| 	local childfds = {} | 	local childfds = {} | ||||||
| 	local parentfds = {} | 	local parentfds = {} | ||||||
| 
 | 
 | ||||||
| 	for fd, policy in pairs(policies) do | 	for fd, policy in pairs(policies) do | ||||||
| 		if policy==M.PipePolicies.CREATE then | 		if policy==M.subprocess.PIPE then | ||||||
| 			local piper, pipew = posix_unistd.pipe() | 			local piper, pipew = posix_unistd.pipe() | ||||||
| 			if fd==posix_unistd.STDIN_FILENO then | 			if fd==posix_unistd.STDIN_FILENO then | ||||||
| 				childfds[fd]=piper | 				childfds[fd]=piper | ||||||
| @ -224,17 +224,17 @@ function M.popen3(policies, path, ...) | |||||||
| 		return nil, errmsg, errnum | 		return nil, errmsg, errnum | ||||||
| 	elseif pid == 0 then | 	elseif pid == 0 then | ||||||
| 		local null=-1 | 		local null=-1 | ||||||
| 		if M.contains(policies, M.PipePolicies.DISCARD) then | 		if M.contains(policies, M.subprocess.DEVNULL) then | ||||||
| 			-- only open, if there's anything to discard | 			-- only open, if there's anything to discard | ||||||
| 			null = posix_fcntl.open('/dev/null', posix_fcntl.O_WRONLY) | 			null = posix_fcntl.open('/dev/null', posix_fcntl.O_WRONLY) | ||||||
| 		end | 		end | ||||||
| 
 | 
 | ||||||
| 		for fd, policy in pairs(policies) do | 		for fd, policy in pairs(policies) do | ||||||
| 			if policy==M.PipePolicies.DISCARD then | 			if policy==M.subprocess.DEVNULL then | ||||||
| 				if fd~=posix_unistd.STDIN_FILENO then | 				if fd~=posix_unistd.STDIN_FILENO then | ||||||
| 					posix_unistd.dup2(null, fd) | 					posix_unistd.dup2(null, fd) | ||||||
| 				end | 				end | ||||||
| 			elseif policy==M.PipePolicies.CREATE then | 			elseif policy==M.subprocess.PIPE then | ||||||
| 				-- only close these, if they exist | 				-- only close these, if they exist | ||||||
| 				posix_unistd.close(parentfds[fd]) | 				posix_unistd.close(parentfds[fd]) | ||||||
| 				posix_unistd.dup2(childfds[fd], fd) | 				posix_unistd.dup2(childfds[fd], fd) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user