亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? proc.c

?? apr-1.2.7.tar.gz源碼 支持svn的需求
?? C
字號:
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as * applicable. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#include "apr_arch_threadproc.h"#include "apr_arch_file_io.h"#include "apr_strings.h"#include "apr_portable.h"#include <proc.h>apr_status_t apr_netware_proc_cleanup(void *theproc){    apr_proc_t *proc = theproc;    int exit_int;    int waitpid_options = WUNTRACED | WNOHANG;    if (proc->pid > 0) {        waitpid(proc->pid, &exit_int, waitpid_options);    }/*	NXVmDestroy(proc->pid); */    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_create(apr_procattr_t **new,apr_pool_t *pool){    (*new) = (apr_procattr_t *)apr_pcalloc(pool, sizeof(apr_procattr_t));    if ((*new) == NULL) {        return APR_ENOMEM;    }    (*new)->pool = pool;    (*new)->cmdtype = APR_PROGRAM;    /* Default to a current path since NetWare doesn't handle it very well */    apr_filepath_get(&((*new)->currdir), APR_FILEPATH_NATIVE, pool);    (*new)->detached = 1;    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_io_set(apr_procattr_t *attr, apr_int32_t in,                                  apr_int32_t out, apr_int32_t err){    apr_status_t status;    if (in != 0) {        if ((status = apr_file_pipe_create(&attr->child_in, &attr->parent_in,                                    attr->pool)) != APR_SUCCESS) {            return status;        }        switch (in) {        case APR_FULL_BLOCK:            break;        case APR_PARENT_BLOCK:            apr_file_pipe_timeout_set(attr->child_in, 0);            break;        case APR_CHILD_BLOCK:            apr_file_pipe_timeout_set(attr->parent_in, 0);            break;        default:            apr_file_pipe_timeout_set(attr->child_in, 0);            apr_file_pipe_timeout_set(attr->parent_in, 0);        }    }     if (out) {        if ((status = apr_file_pipe_create(&attr->parent_out, &attr->child_out,                                    attr->pool)) != APR_SUCCESS) {            return status;        }        switch (out) {        case APR_FULL_BLOCK:            break;        case APR_PARENT_BLOCK:            apr_file_pipe_timeout_set(attr->child_out, 0);            break;        case APR_CHILD_BLOCK:            apr_file_pipe_timeout_set(attr->parent_out, 0);            break;        default:            apr_file_pipe_timeout_set(attr->child_out, 0);            apr_file_pipe_timeout_set(attr->parent_out, 0);        }    }     if (err) {        if ((status = apr_file_pipe_create(&attr->parent_err, &attr->child_err,                                    attr->pool)) != APR_SUCCESS) {            return status;        }        switch (err) {        case APR_FULL_BLOCK:            break;        case APR_PARENT_BLOCK:            apr_file_pipe_timeout_set(attr->child_err, 0);            break;        case APR_CHILD_BLOCK:            apr_file_pipe_timeout_set(attr->parent_err, 0);            break;        default:            apr_file_pipe_timeout_set(attr->child_err, 0);            apr_file_pipe_timeout_set(attr->parent_err, 0);        }    }     return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_child_in_set(apr_procattr_t *attr, apr_file_t *child_in,                                   apr_file_t *parent_in){    if (attr->child_in == NULL && attr->parent_in == NULL)        apr_file_pipe_create(&attr->child_in, &attr->parent_in, attr->pool);    if (child_in != NULL)        apr_file_dup2(attr->child_in, child_in, attr->pool);    if (parent_in != NULL)        apr_file_dup2(attr->parent_in, parent_in, attr->pool);    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_child_out_set(apr_procattr_t *attr, apr_file_t *child_out,                                    apr_file_t *parent_out){    if (attr->child_out == NULL && attr->parent_out == NULL)        apr_file_pipe_create(&attr->child_out, &attr->parent_out, attr->pool);    if (child_out != NULL)        apr_file_dup2(attr->child_out, child_out, attr->pool);    if (parent_out != NULL)        apr_file_dup2(attr->parent_out, parent_out, attr->pool);    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_child_err_set(apr_procattr_t *attr, apr_file_t *child_err,                                   apr_file_t *parent_err){    if (attr->child_err == NULL && attr->parent_err == NULL)        apr_file_pipe_create(&attr->child_err, &attr->parent_err, attr->pool);    if (child_err != NULL)        apr_file_dup2(attr->child_err, child_err, attr->pool);    if (parent_err != NULL)        apr_file_dup2(attr->parent_err, parent_err, attr->pool);    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_dir_set(apr_procattr_t *attr,                                const char *dir) {    return apr_filepath_merge(&attr->currdir, NULL, dir,                               APR_FILEPATH_NATIVE, attr->pool);}APR_DECLARE(apr_status_t) apr_procattr_cmdtype_set(apr_procattr_t *attr,                                     apr_cmdtype_e cmd) {    /* won't ever be called on this platform, so don't save the function pointer */    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_detach_set(apr_procattr_t *attr, apr_int32_t detach) {    attr->detached = detach;    return APR_SUCCESS;}#if APR_HAS_FORKAPR_DECLARE(apr_status_t) apr_proc_fork(apr_proc_t *proc, apr_pool_t *pool){    int pid;        if ((pid = fork()) < 0) {        return errno;    }    else if (pid == 0) {        proc->pid = pid;        proc->in = NULL;         proc->out = NULL;         proc->err = NULL;         return APR_INCHILD;    }    proc->pid = pid;    proc->in = NULL;     proc->out = NULL;     proc->err = NULL;     return APR_INPARENT;}#endifstatic apr_status_t limit_proc(apr_procattr_t *attr){#if APR_HAVE_STRUCT_RLIMIT && APR_HAVE_SETRLIMIT#ifdef RLIMIT_CPU    if (attr->limit_cpu != NULL) {        if ((setrlimit(RLIMIT_CPU, attr->limit_cpu)) != 0) {            return errno;        }    }#endif#ifdef RLIMIT_NPROC    if (attr->limit_nproc != NULL) {        if ((setrlimit(RLIMIT_NPROC, attr->limit_nproc)) != 0) {            return errno;        }    }#endif#if defined(RLIMIT_AS)    if (attr->limit_mem != NULL) {        if ((setrlimit(RLIMIT_AS, attr->limit_mem)) != 0) {            return errno;        }    }#elif defined(RLIMIT_DATA)    if (attr->limit_mem != NULL) {        if ((setrlimit(RLIMIT_DATA, attr->limit_mem)) != 0) {            return errno;        }    }#elif defined(RLIMIT_VMEM)    if (attr->limit_mem != NULL) {        if ((setrlimit(RLIMIT_VMEM, attr->limit_mem)) != 0) {            return errno;        }    }#endif#else    /*     * Maybe make a note in error_log that setrlimit isn't supported??     */#endif    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_child_errfn_set(apr_procattr_t *attr,                                                       apr_child_errfn_t *errfn){    /* won't ever be called on this platform, so don't save the function pointer */    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_error_check_set(apr_procattr_t *attr,                                                       apr_int32_t chk){    /* won't ever be used on this platform, so don't save the flag */    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_addrspace_set(apr_procattr_t *attr,                                                       apr_int32_t addrspace){    attr->addrspace = addrspace;    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *newproc,									const char *progname, 									const char * const *args, 									const char * const *env,                              		apr_procattr_t *attr,                               		apr_pool_t *pool){	wiring_t		wire;    int             addr_space;    wire.infd  = attr->child_in ? attr->child_in->filedes : FD_UNUSED;    wire.outfd = attr->child_out ? attr->child_out->filedes : FD_UNUSED;    wire.errfd = attr->child_err ? attr->child_err->filedes : FD_UNUSED;    newproc->in = attr->parent_in;    newproc->out = attr->parent_out;    newproc->err = attr->parent_err;    /* attr->detached and PROC_DETACHED do not mean the same thing.  attr->detached means     * start the NLM in a separate address space.  PROC_DETACHED means don't wait for the     * NLM to unload by calling wait() or waitpid(), just clean up */    addr_space = PROC_LOAD_SILENT | (attr->addrspace ? 0 : PROC_CURRENT_SPACE);    addr_space |= (attr->detached ? PROC_DETACHED : 0);    if (attr->currdir) {        char *fullpath = NULL;        apr_status_t rv;        if ((rv = apr_filepath_merge(&fullpath, attr->currdir, progname,                                      APR_FILEPATH_NATIVE, pool)) != APR_SUCCESS) {            return rv;        }        progname = fullpath;    }     if ((newproc->pid = procve(progname, addr_space, (const char**)env, &wire,         NULL, NULL, 0, NULL, (const char **)args)) == -1) {        return errno;    }    if (attr->child_in) {        apr_pool_cleanup_kill(apr_file_pool_get(attr->child_in),                               attr->child_in, apr_unix_file_cleanup);        apr_file_close(attr->child_in);    }    if (attr->child_out) {        apr_pool_cleanup_kill(apr_file_pool_get(attr->child_out),                               attr->child_out, apr_unix_file_cleanup);        apr_file_close(attr->child_out);    }    if (attr->child_err) {        apr_pool_cleanup_kill(apr_file_pool_get(attr->child_err),                               attr->child_err, apr_unix_file_cleanup);        apr_file_close(attr->child_err);    }    apr_pool_cleanup_register(pool, (void *)newproc, apr_netware_proc_cleanup,        apr_pool_cleanup_null);    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_proc_wait_all_procs(apr_proc_t *proc,                                                  int *exitcode,                                                  apr_exit_why_e *exitwhy,                                                  apr_wait_how_e waithow,                                                  apr_pool_t *p){    proc->pid = -1;    return apr_proc_wait(proc, exitcode, exitwhy, waithow);}APR_DECLARE(apr_status_t) apr_proc_wait(apr_proc_t *proc,                                        int *exitcode, apr_exit_why_e *exitwhy,                                        apr_wait_how_e waithow){    pid_t pstatus;    int waitpid_options = WUNTRACED;    int exit_int;    int ignore;    apr_exit_why_e ignorewhy;    if (exitcode == NULL) {        exitcode = &ignore;    }    if (exitwhy == NULL) {        exitwhy = &ignorewhy;    }    if (waithow != APR_WAIT) {        waitpid_options |= WNOHANG;    }    /* If the pid is 0 then the process was started detached. There        is no need to wait since there is nothing to wait for on a        detached process.  Starting a process as non-detached and       then calling wait or waitpid could cause the thread to hang.       The reason for this is because NetWare does not have a way        to kill or even signal a process to be killed.  Starting        all processes as detached avoids the possibility of a        thread hanging. */    if (proc->pid == 0) {        *exitwhy = APR_PROC_EXIT;        *exitcode = 0;        return APR_CHILD_DONE;    }    if ((pstatus = waitpid(proc->pid, &exit_int, waitpid_options)) > 0) {        proc->pid = pstatus;        if (WIFEXITED(exit_int)) {            *exitwhy = APR_PROC_EXIT;            *exitcode = WEXITSTATUS(exit_int);        }        else if (WIFSIGNALED(exit_int)) {            *exitwhy = APR_PROC_SIGNAL;            *exitcode = WIFTERMSIG(exit_int);        }        else {            /* unexpected condition */            return APR_EGENERAL;        }        return APR_CHILD_DONE;    }    else if (pstatus == 0) {        return APR_CHILD_NOTDONE;    }    return errno;}APR_DECLARE(apr_status_t) apr_procattr_limit_set(apr_procattr_t *attr, apr_int32_t what,                           struct rlimit *limit){    switch(what) {        case APR_LIMIT_CPU:#ifdef RLIMIT_CPU            attr->limit_cpu = limit;            break;#else            return APR_ENOTIMPL;#endif        case APR_LIMIT_MEM:#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)            attr->limit_mem = limit;            break;#else            return APR_ENOTIMPL;#endif        case APR_LIMIT_NPROC:#ifdef RLIMIT_NPROC            attr->limit_nproc = limit;            break;#else            return APR_ENOTIMPL;#endif    }    return APR_SUCCESS;}  APR_DECLARE(apr_status_t) apr_procattr_user_set(apr_procattr_t *attr,                                                 const char *username,                                                const char *password){    /* Always return SUCCESS because NetWare threads don't run as a user */    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_procattr_group_set(apr_procattr_t *attr,                                                 const char *groupname){    /* Always return SUCCESS because NetWare threads don't run within a group */    return APR_SUCCESS;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码日产精品bd| 成人激情免费视频| 亚洲精品老司机| 日本一区二区免费在线| 精品国精品国产| 日韩精品中文字幕一区| 欧美成人在线直播| www成人在线观看| 精品久久人人做人人爰| 久久影视一区二区| 国产日韩欧美a| 亚洲视频一二区| 亚洲少妇30p| 亚洲午夜久久久久久久久电影网| 夜夜精品浪潮av一区二区三区 | 日韩精品1区2区3区| 午夜伊人狠狠久久| 石原莉奈一区二区三区在线观看| 欧美bbbbb| 国产高清在线观看免费不卡| 成人黄色大片在线观看| 欧美亚洲综合色| 日韩精品一区二区三区在线| 亚洲国产精品av| 亚洲一区二区精品视频| 欧美bbbbb| 成人av电影在线播放| 91丨porny丨首页| 精品成人一区二区三区| 日韩美女天天操| 日韩一区有码在线| 亚洲国产日韩在线一区模特| 麻豆精品在线播放| 成人免费视频免费观看| 欧美日韩免费观看一区三区| 日韩欧美美女一区二区三区| 国产精品女主播在线观看| 亚洲电影中文字幕在线观看| 激情六月婷婷久久| 在线国产电影不卡| 国产三级一区二区| 午夜av一区二区三区| 成人爱爱电影网址| 日韩欧美专区在线| 夜夜精品视频一区二区| 国产盗摄一区二区| 欧美一级欧美一级在线播放| 亚洲天堂免费在线观看视频| 激情文学综合网| 欧美日韩一区视频| 国产精品久久久久久户外露出| 日韩成人一级大片| 色偷偷88欧美精品久久久 | 国产一区二区三区高清播放| 91黄色免费版| 最新日韩在线视频| 国产成人在线免费观看| 欧美一区二区三区影视| 亚洲一线二线三线久久久| 成人午夜伦理影院| 久久影视一区二区| 极品瑜伽女神91| 日韩精品影音先锋| 日本午夜精品视频在线观看| 欧美三级韩国三级日本一级| 亚洲久本草在线中文字幕| 成人av网站免费观看| 337p日本欧洲亚洲大胆色噜噜| 视频一区二区中文字幕| 精品视频1区2区| 一区二区三区波多野结衣在线观看| 成人免费高清视频在线观看| 久久久久久久久97黄色工厂| 经典三级一区二区| 久久久亚洲综合| 精品亚洲成a人| 久久久久久久综合色一本| 日韩制服丝袜av| 91精品国产综合久久久蜜臀粉嫩| 亚洲一区二区在线免费看| 欧美在线免费视屏| 亚洲线精品一区二区三区八戒| 欧美主播一区二区三区美女| 亚洲妇女屁股眼交7| 精品视频1区2区3区| 视频在线观看国产精品| 欧美人牲a欧美精品| 美女在线观看视频一区二区| 欧美精品一卡二卡| 久久成人久久爱| 欧美国产一区在线| 色天使久久综合网天天| 亚洲成av人片www| 精品久久久久99| 成人午夜精品在线| 一区二区三区视频在线看| 色综合久久中文字幕| 懂色av中文字幕一区二区三区| 欧美经典三级视频一区二区三区| 成人动漫av在线| 午夜成人在线视频| 久久欧美一区二区| 色呦呦国产精品| 免费的成人av| 亚洲天堂av一区| 91精品国产高清一区二区三区蜜臀 | 日韩欧美国产一区二区三区 | 日韩女优制服丝袜电影| 国产激情视频一区二区在线观看| 中文字幕高清一区| 欧美日韩一区精品| 国产麻豆一精品一av一免费| 亚洲欧美色图小说| 日韩欧美国产综合在线一区二区三区| 国产盗摄视频一区二区三区| 亚洲在线视频网站| 国产亚洲成aⅴ人片在线观看| 日本黄色一区二区| 国产激情精品久久久第一区二区 | 欧美日韩免费一区二区三区| 韩国中文字幕2020精品| 夜夜嗨av一区二区三区| 精品国产污污免费网站入口 | 精品美女在线播放| 91亚洲大成网污www| 久久av资源网| 亚洲国产aⅴ天堂久久| 中文字幕第一区二区| 日韩视频在线永久播放| 一本色道久久综合亚洲aⅴ蜜桃 | 一区二区免费在线播放| 精品国产91乱码一区二区三区 | 日韩中文字幕亚洲一区二区va在线 | 日本不卡高清视频| 亚洲免费av高清| 国产欧美一二三区| 精品国产乱码久久久久久免费 | 青青草成人在线观看| 亚洲人成影院在线观看| 久久久久国色av免费看影院| 91精品在线麻豆| 欧美日韩在线免费视频| 91在线观看下载| 成人小视频在线观看| 精品影院一区二区久久久| 日韩国产欧美一区二区三区| 一级精品视频在线观看宜春院| 国产精品不卡在线| 中文字幕av免费专区久久| 久久久精品天堂| 日韩视频一区在线观看| 国产精品国产精品国产专区不蜜 | 日韩理论片中文av| 中国色在线观看另类| 国产欧美视频一区二区| 国产精品无圣光一区二区| 国产欧美一区二区精品性色超碰 | 狂野欧美性猛交blacked| 亚洲成av人片一区二区三区| 玉足女爽爽91| 亚洲成人免费视| 美女在线一区二区| 国产一区二区不卡在线| 国产在线播精品第三| 精品一区二区三区蜜桃| 国产一区免费电影| 国产成人精品三级| 99久久er热在这里只有精品15| 91色在线porny| 欧美日韩国产美| 精品福利在线导航| 中文字幕乱码一区二区免费| 亚洲色图欧美偷拍| 婷婷开心激情综合| 精品一区二区免费在线观看| 懂色一区二区三区免费观看| 91激情在线视频| 欧美一级黄色录像| 欧美国产日韩一二三区| 亚洲精品视频一区| 麻豆精品久久久| 国产suv精品一区二区三区| 成人av资源在线观看| 在线免费观看日韩欧美| 欧美猛男男办公室激情| 国产婷婷色一区二区三区| 亚洲色图第一区| 免费观看日韩电影| av电影在线观看一区| 91精品欧美综合在线观看最新| 久久久久国产精品麻豆ai换脸| 亚洲人亚洲人成电影网站色| 日韩精品电影在线观看| youjizz国产精品| 91精品国产综合久久小美女| 国产精品乱码人人做人人爱| 午夜精品福利视频网站| 成人av在线看| 精品久久五月天| 午夜精品成人在线|