String f_shell_exec(CStrRef cmd) { ShellExecContext ctx; FILE *fp = ctx.exec(cmd.c_str()); if (!fp) return ""; StringBuffer sbuf; sbuf.read(fp); return sbuf.detach(); }
Variant HHVM_FUNCTION(shell_exec, const String& cmd) { ShellExecContext ctx; FILE *fp = ctx.exec(cmd); if (!fp) return init_null(); StringBuffer sbuf; sbuf.read(fp); auto ret = sbuf.detach(); if (ret.empty() && !RuntimeOption::EnableHipHopSyntax) { // Match php5 return init_null(); } return ret; }
void f_passthru(CStrRef command, Variant return_var /* = null */) { ShellExecContext ctx; FILE *fp = ctx.exec(command); if (!fp) return; char buffer[1024]; while (true) { int len = read(fileno(fp), buffer, sizeof(buffer) - 1); if (len == -1 && errno == EINTR) continue; if (len <= 0) break; // break on error or EOF buffer[len] = '\0'; echo(String(buffer, len, AttachLiteral)); } return_var = ctx.exit(); }
void f_passthru(const String& command, VRefParam return_var /* = null */) { ShellExecContext ctx; FILE *fp = ctx.exec(command.c_str()); if (!fp) return; char buffer[1024]; while (true) { int len = read(fileno(fp), buffer, sizeof(buffer) - 1); if (len == -1 && errno == EINTR) continue; if (len <= 0) break; // break on error or EOF buffer[len] = '\0'; echo(String(buffer, len, CopyString)); } int ret = ctx.exit(); if (WIFEXITED(ret)) ret = WEXITSTATUS(ret); return_var = ret; }
void HHVM_FUNCTION(passthru, const String& command, VRefParam return_var /* = null */) { ShellExecContext ctx; FILE *fp = ctx.exec(command); if (!fp) return; char buffer[1024]; while (true) { int len = read(fileno(fp), buffer, sizeof(buffer) - 1); if (len == -1 && errno == EINTR) continue; if (len <= 0) break; // break on error or EOF buffer[len] = '\0'; g_context->write(String(buffer, len, CopyString)); } int ret = ctx.exit(); MAYBE_WIFEXITED(ret); return_var.assignIfRef(ret); }