diff --git a/res/res_agi.c b/res/res_agi.c
index d8bca507cd750dc382ebde0303d89b8ca05dcdb6..01d3d6ac1e91fdf9994e594e0f8dba525d9c78be 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -1905,25 +1905,10 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi
 				ast_frfree(f);
 			}
 		} else if (outfd > -1) {
-			size_t len = sizeof(buf);
-			size_t buflen = 0;
-
 			retry = AGI_NANDFS_RETRY;
 			buf[0] = '\0';
 
-			while (buflen < (len - 1)) {
-				fgets(buf + buflen, len, readf);
-				if (feof(readf)) 
-					break;
-				if (ferror(readf) && ((errno != EINTR) && (errno != EAGAIN))) 
-					break;
-				buflen = strlen(buf);
-				len -= buflen;
-				if (agidebug)
-					ast_verbose( "AGI Rx << temp buffer %s - errno %s\n", buf, strerror(errno));
-			}
-
-			if (!buf[0]) {
+			if (!fgets(buf, sizeof(buf), readf)) {
 				/* Program terminated */
 				if (returnstatus && returnstatus != AST_PBX_KEEPALIVE)
 					returnstatus = -1;