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

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

?? nfsdlib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
readdirres * nfsproc_readdir_2    (    readdirargs * readDir	/* Directory to read */    )    {    struct entry *  dirEntries;    filename *      fileNames;    int             fileNameSize;    int             entrySpace;    char *          currentName;    char *          dirName;    DIR	*	    theDir = NULL;    struct dirent * localEntry;    readdirres *    retVal;    int		    dirCount = 0;    char *          newFile;    int             numEntries;    int             entryCurrent;    if ((dirName = (char *) alloca (nfsMaxPath)) == NULL)	return (NULL);    if ((newFile = (char *) alloca (nfsMaxPath)) == NULL)	return (NULL);    /* Increment statistics */    nfsdServerStatus.readdirCalls++;    /* Compute the amount of space needed for each directory entry */    fileNameSize = MEM_ROUND_UP (NAME_LEN + 1);    entrySpace = MEM_ROUND_UP (sizeof (readdirres)) +	         MEM_ROUND_UP (sizeof (entry)) +	         fileNameSize;        /* Compute the number of possible entries to return */        numEntries = readDir->count / entrySpace;    /* Allocate space for the entries */        if ((retVal = KHEAP_ALLOC(numEntries * entrySpace)) == NULL)	{        return (NULL);	}    else	{	bzero ((char *) retVal, numEntries * entrySpace);	dirEntries = ((struct entry *) retVal) + 1;	fileNames = (filename *) (dirEntries + numEntries);	}    nfsdFhNtoh ((NFS_FILE_HANDLE *) &readDir->dir);        /* Create the directory name */    if (nfsdFhToName ((NFS_FILE_HANDLE *) &readDir->dir, dirName) == ERROR)    	{	retVal->status = nfsdErrToNfs (errno);	return (retVal);	}    /* Open the directory and set the cookie field to what was     * passed in readDir     */    if ((theDir = opendir (dirName)) == NULL)    	{	retVal->status = nfsdErrToNfs (errno);	return (retVal);	}    else        theDir->dd_cookie = *((int *) &readDir->cookie);    retVal->readdirres_u.reply.eof = FALSE;        /* Read through all the files in the directory */    for (entryCurrent = 0; entryCurrent < numEntries; entryCurrent++)	{	errno = OK;	localEntry = readdir (theDir);	if (localEntry == NULL)	    {	    if (errno != OK)		{		retVal->status = nfsdErrToNfs (errno);		closedir (theDir);		return (retVal);		}	    else		{		retVal->readdirres_u.reply.eof = TRUE;		if (entryCurrent != 0)		    dirEntries[entryCurrent - 1].nextentry = NULL;		else		    retVal->readdirres_u.reply.entries = NULL;	        break;		}	    }	strcpy (newFile, dirName);	strcat (newFile, "/");	strcat (newFile, localEntry->d_name);	dirEntries[entryCurrent].fileid = 	   nameToInode (((NFS_FILE_HANDLE *) &readDir->dir)->volumeId, newFile);	if (dirEntries[entryCurrent].fileid == ERROR)	    {	    retVal->status = nfsdErrToNfs (errno);	    closedir (theDir);	    return (retVal);	    }	currentName = ((char *) fileNames) + entryCurrent * fileNameSize;	strcpy(currentName, localEntry->d_name);	dirEntries[entryCurrent].name = currentName;	*((int *) dirEntries[entryCurrent].cookie) = theDir->dd_cookie;	if (entryCurrent == numEntries - 1)	    dirEntries[entryCurrent].nextentry = NULL;	else	    dirEntries[entryCurrent].nextentry = &dirEntries[entryCurrent + 1];	    	dirCount++;	}    retVal->status = NFS_OK;    if (dirCount != 0)	retVal->readdirres_u.reply.entries = dirEntries;    else	retVal->readdirres_u.reply.entries = NULL;    closedir (theDir);    return (retVal);    }/******************************************************************************** nfsproc_statfs_2 - Get filesystem attributes* * Return information about the filesystem.  The NFS equivalent of statfs().** NOMANUAL*/statfsres * nfsproc_statfs_2    (    nfs_fh * fh    )    {    char *        fileName;    struct statfs statInfo;    statfsres *   retVal = KHEAP_ALLOC(sizeof (statfsres));    if (retVal == NULL)        return (NULL);    if ((fileName = (char *) alloca (nfsMaxPath)) == NULL)	return (NULL);    /* Increment statistics */    nfsdServerStatus.statfsCalls++;    nfsdFhNtoh ((NFS_FILE_HANDLE *) fh);    if (nfsdFhToName ((NFS_FILE_HANDLE *) fh, fileName) == ERROR)    	{	retVal->status = nfsdErrToNfs (errno);	return (retVal);	}    if (statfs (fileName, &statInfo) == ERROR)    	{	retVal->status = nfsdErrToNfs (errno);	return (retVal);	}    retVal->status = NFS_OK;    retVal->statfsres_u.reply.tsize  = 8 * 1024;    retVal->statfsres_u.reply.bsize  = statInfo.f_bsize;    retVal->statfsres_u.reply.blocks = statInfo.f_blocks;    retVal->statfsres_u.reply.bfree  = statInfo.f_bfree;    retVal->statfsres_u.reply.bavail = statInfo.f_bavail;    return (retVal);    }/******************************************************************************** nfsdStatusGet - get the status of the NFS server* * This routine gets status information about the NFS server.* * RETURNS: OK, or ERROR if the information cannot be obtained.*/STATUS nfsdStatusGet    (    NFS_SERVER_STATUS * serverStats /* pointer to status structure */    )    {    memcpy (serverStats, &nfsdServerStatus, sizeof (nfsdServerStatus));    return (OK);    }/******************************************************************************** nfsdStatusShow - show the status of the NFS server* * This routine shows status information about the NFS server.* * RETURNS: OK, or ERROR if the information cannot be obtained.*/STATUS nfsdStatusShow    (    int options			/* unused */    )    {    NFS_SERVER_STATUS serverStat;    char*             outputFormat = "%15s	%8d\n";    if (nfsdStatusGet (&serverStat) == ERROR)        return (ERROR);    printf ("%15s    %8s\n", "Service", "Number of Calls");    printf ("%15s    %8s\n", "-------", "---------------");    printf (outputFormat, "null", serverStat.nullCalls);    printf (outputFormat, "getattr", serverStat.getattrCalls);    printf (outputFormat, "setattr", serverStat.setattrCalls);    printf (outputFormat, "root", serverStat.rootCalls);    printf (outputFormat, "lookup", serverStat.lookupCalls);    printf (outputFormat, "readlink", serverStat.readlinkCalls);    printf (outputFormat, "read", serverStat.readCalls);    printf (outputFormat, "writecache", serverStat.writecacheCalls);    printf (outputFormat, "write", serverStat.writeCalls);    printf (outputFormat, "create", serverStat.createCalls);    printf (outputFormat, "remove", serverStat.removeCalls);    printf (outputFormat, "rename", serverStat.renameCalls);    printf (outputFormat, "link", serverStat.linkCalls);    printf (outputFormat, "symlink", serverStat.symlinkCalls);    printf (outputFormat, "mkdir", serverStat.mkdirCalls);    printf (outputFormat, "rmdir", serverStat.rmdirCalls);    printf (outputFormat, "readdir", serverStat.readdirCalls);    printf (outputFormat, "statfs", serverStat.statfsCalls);    return (OK);    }/******************************************************************************** nfsdFhCreate - Create an NFS file handle** Given a handle to the parent directory, and the name of a file inside that* directory, create a new file handle that specifies the file.* * RETURNS:  OK, or ERROR if a file handle for the specified file could not be* created.** NOMANUAL*/STATUS nfsdFhCreate    (    NFS_FILE_HANDLE * parentDir,    char *            fileName,    NFS_FILE_HANDLE * fh    )    {    struct stat       str;    char *            fullName;    char              *p;       /* to remove slash from end of fileName */    if ((fullName = (char *) alloca (nfsMaxPath)) == NULL)	return (ERROR);    memset (fh, 0, NFS_FHSIZE);        if (nfsdFhToName (parentDir, fullName) == ERROR)        return (ERROR);        /* build fullname, but remove slash from the end of fileName */    /* in order to lkup correspond name from nfsHash             */     strcat (fullName, "/");    strcat (fullName, fileName);    pathCondense (fullName);    for (p = strchr (fullName, EOS); p != fullName && *--p == '/'; )         *p = EOS;    if (stat (fullName, &str) == ERROR)        return (ERROR);    fh->volumeId = parentDir->volumeId;    fh->fsId     = parentDir->fsId;    fh->inode    = nfsNmLkupIns (parentDir->volumeId, fullName);    if (fh->inode == ERROR)	return (ERROR);    return (OK);    }/******************************************************************************** nfsdFhToName - Convert a file handle to a complete file name* * Given a file handle, fill in the variable fileName with a string specifying* that file.* * RETURNS:  OK, or ERROR if the file name could not be created.** NOMANUAL*/STATUS nfsdFhToName    (    NFS_FILE_HANDLE * fh,    char *            fileName    )    {    NFS_EXPORT_ENTRY *  fileSys;    if ((fileSys = nfsExportFindById (fh->volumeId)) == NULL)        return (ERROR);    if (nfsFhLkup (fh, fileName) == ERROR)        {	errno = NFSERR_STALE;        return (ERROR);	}    return (OK);    }/******************************************************************************** nfsdFattrGet - Get the file attributes for a file specified by a file handle* * Given a file handle, fill in the file attribute structure pointed to by* fileAttributes.* * RETURNS:  OK, or ERROR if the file attributes could not be obtained.** NOMANUAL*/STATUS nfsdFattrGet    (    NFS_FILE_HANDLE * fh,    struct fattr *    fileAttributes    )    {    char *         fileName;    struct stat    str;        if ((fileName = (char *) alloca (nfsMaxPath)) == NULL)	return (ERROR);    if (nfsdFhToName (fh, fileName) == ERROR)        return (ERROR);        if (stat (fileName, &str) == ERROR)        return (ERROR);    /* set the type */    switch (str.st_mode & S_IFMT)	{	case S_IFIFO:	    fileAttributes->type = NFFIFO;	    break;	case S_IFCHR:	    fileAttributes->type = NFCHR;	    break;	case S_IFDIR:	    fileAttributes->type = NFDIR;	    break;	case S_IFBLK:	    fileAttributes->type = NFBLK;	    break;	case S_IFREG:	    fileAttributes->type = NFREG;	    break;	case S_IFLNK:	    fileAttributes->type = NFLNK;	    break;	case S_IFSOCK:	    fileAttributes->type = NFSOCK;	    break;	}    fileAttributes->mode      = str.st_mode;    fileAttributes->nlink     = str.st_nlink;    fileAttributes->uid       = str.st_uid;    fileAttributes->gid       = str.st_gid;    fileAttributes->size      = str.st_size;    fileAttributes->blocksize = str.st_blksize;    fileAttributes->rdev      = str.st_rdev;    fileAttributes->blocks    = str.st_blocks + 1;    fileAttributes->fileid    = fh->inode;    fileAttributes->fsid      = str.st_dev;    fileAttributes->rdev      = str.st_rdev;    fileAttributes->atime.seconds = str.st_atime;    fileAttributes->mtime.seconds = str.st_mtime;    fileAttributes->ctime.seconds = str.st_ctime;    fileAttributes->atime.useconds = 0;    fileAttributes->mtime.useconds = 0;    fileAttributes->ctime.useconds = 0;    return (OK);    }/******************************************************************************** nfsdErrToNfs - Convert a VxWorks error number to an NFS error number* * Given a VxWorks error number, find the equivalent NFS error number.* If an exact match is not found, return NFSERR_IO.* * RETURNS:  The NFS error number.** NOMANUAL*/nfsstat nfsdErrToNfs    (    int theErr			/* The error number to convert  */    )    {    switch (theErr)	{	case EPERM:	case S_dosFsLib_READ_ONLY:	case S_dosFsLib_WRITE_ONLY:	    return (NFSERR_PERM);	    break;	    	case ENOENT:	case S_dosFsLib_FILE_NOT_FOUND:	    return (NFSERR_NOENT);	    break;	case EIO:	    return (NFSERR_IO);	    break;	    	case ENXIO:	case S_dosFsLib_VOLUME_NOT_AVAILABLE:	    return (NFSERR_NXIO);	    break;	    	case EACCES:	    return (NFSERR_ACCES);	    break;	    	case EEXIST:	case S_dosFsLib_FILE_EXISTS:	    return (NFSERR_EXIST);	    break;	case ENODEV:	    return (NFSERR_NODEV);	    break;	    	case ENOTDIR:	case S_dosFsLib_NOT_DIRECTORY:	    return (NFSERR_NOTDIR);	    break;	    	case EISDIR:	    return (NFSERR_ISDIR);	    break;	    	case EFBIG:	    return (NFSERR_FBIG);	    break;	    	case ENOSPC:	case S_dosFsLib_DISK_FULL:	    return (NFSERR_NOSPC);	    break;	    	case EROFS:	    return (NFSERR_ROFS);	    break;	    	case ENAMETOOLONG:	case S_dosFsLib_ILLEGAL_NAME:	    return (NFSERR_NAMETOOLONG);	    break;	    	case S_dosFsLib_DIR_NOT_EMPTY:	case ENOTEMPTY:	    return (NFSERR_NOTEMPTY);	    break;	            default:	    /* If the error number is less than 100, just return it.	     * NFS client implementations should understand anything	     * that looks like a UNIX error number.  If it's greater than	     * 100, return NFSERR_IO.	     */		    if (theErr < 100)		return theErr;	    else		return (NFSERR_IO);	    break;	}    }/******************************************************************************** nfsdFhHton - convert a file handle from host to network byte order** NOMANUAL*/void nfsdFhHton    (    NFS_FILE_HANDLE * fh    )    {    fh->volumeId = htonl (fh->volumeId);    fh->fsId = htonl (fh->fsId);    fh->inode = htonl (fh->inode);    }/******************************************************************************** nfsdFhNtoh - convert a file handle from host to network byte order** NOMANUAL*/void nfsdFhNtoh    (    NFS_FILE_HANDLE * fh    )    {    fh->volumeId = ntohl (fh->volumeId);    fh->fsId = ntohl (fh->fsId);    fh->inode = ntohl (fh->inode);    }/******************************************************************************** nfsdFsReadOnly - get the mode of the NFS file system* * This routine returns TRUE if the filesystem that contains the file* pointed to by <fh> is exported read-only.* * RETURNS: TRUE, or FALSE if the filesystem is exported read-write.* * NOMANUAL*/LOCAL BOOL nfsdFsReadOnly    (    NFS_FILE_HANDLE * fh    )    {    NFS_EXPORT_ENTRY *  fileSys;    if ((fileSys = nfsExportFindById (fh->volumeId)) == NULL)        return (ERROR);    else	return (fileSys->readOnly);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线小视频| 美女免费视频一区| 精品久久人人做人人爰| 欧美天堂一区二区三区| 欧美日韩国产天堂| 欧美r级在线观看| 欧美成人精品二区三区99精品| 日韩欧美一级二级三级| 日韩欧美一区在线| 欧美国产精品专区| 亚洲高清免费在线| 精品伊人久久久久7777人| 成人99免费视频| 在线成人午夜影院| 国产日韩av一区| 婷婷开心激情综合| 99视频超级精品| 精品久久久久久久人人人人传媒| 欧美精彩视频一区二区三区| 亚洲国产一二三| 夫妻av一区二区| 日韩精品综合一本久道在线视频| 国产精品网站在线| 看片的网站亚洲| 丁香婷婷综合色啪| 日韩亚洲欧美成人一区| 亚洲免费观看在线视频| 精品一区在线看| 69堂精品视频| 亚洲婷婷国产精品电影人久久| 国产精品自拍毛片| 精品国产污污免费网站入口| 亚洲sss视频在线视频| 日本高清不卡视频| 日韩一区中文字幕| 99re热这里只有精品视频| 国产欧美一区二区精品婷婷 | 日本不卡一二三| 91免费版在线看| 一区二区欧美在线观看| 在线亚洲一区二区| 亚洲高清免费观看高清完整版在线观看| 福利电影一区二区| 亚洲色图一区二区三区| 色综合天天综合网国产成人综合天 | 日韩欧美中文一区| 久久se精品一区精品二区| 7777精品伊人久久久大香线蕉 | 一区在线中文字幕| 99麻豆久久久国产精品免费| 1000部国产精品成人观看| 在线影院国内精品| 秋霞国产午夜精品免费视频| 91激情五月电影| 亚洲精品成人在线| 久久久.com| www.日韩av| 国产精品久久久一本精品| 亚洲欧美怡红院| 粉嫩蜜臀av国产精品网站| 欧美日韩美女一区二区| 自拍偷拍亚洲欧美日韩| 天堂蜜桃91精品| 久久精品一区二区三区不卡| 亚洲美女视频在线观看| 蜜桃av噜噜一区二区三区小说| 成人精品小蝌蚪| 精品国产91久久久久久久妲己| 最新日韩av在线| 亚洲欧洲一区二区三区| 在线播放91灌醉迷j高跟美女 | 91麻豆精品国产91久久久使用方法 | 亚洲人成精品久久久久久| 972aa.com艺术欧美| 日韩高清不卡一区二区| 久久久久久夜精品精品免费| 成人一区在线观看| 91麻豆国产精品久久| 日本美女一区二区三区| 亚洲精选视频免费看| 国产精品美女久久久久久久久| 欧美图片一区二区三区| 欧洲一区在线电影| 日本韩国欧美国产| 大尺度一区二区| 国产美女主播视频一区| 国产精品一区在线观看乱码| 国产一区二区免费在线| 日韩成人av影视| 麻豆高清免费国产一区| 免费观看一级特黄欧美大片| 国产高清视频一区| 免费看黄色91| 99久久99久久免费精品蜜臀| 日韩精品专区在线影院重磅| 国产精品国产馆在线真实露脸 | 欧美国产精品一区二区三区| 久久综合国产精品| 国产蜜臀97一区二区三区| 亚洲精品免费在线| 日本伊人色综合网| 成人app软件下载大全免费| 在线精品视频免费观看| 欧美一区二区二区| 中文字幕一区二区三区在线观看| 亚洲欧美电影一区二区| 另类人妖一区二区av| av高清不卡在线| 欧美tk—视频vk| 午夜精品国产更新| 成人免费视频caoporn| 日韩一区二区在线观看| 国产精品美女久久久久久2018| 视频在线在亚洲| 91久久精品一区二区| 久久新电视剧免费观看| 丝袜亚洲另类欧美综合| 色欧美乱欧美15图片| 久久伊人中文字幕| 日本不卡视频一二三区| 欧美体内she精视频| 国产精品欧美综合在线| 国产一区二区在线免费观看| 欧美一级二级在线观看| 亚洲欧美国产高清| k8久久久一区二区三区 | 韩国在线一区二区| 欧美一级二级在线观看| 日韩在线卡一卡二| 欧美群妇大交群中文字幕| 亚洲成人三级小说| 在线综合亚洲欧美在线视频| 午夜久久电影网| 欧美电影免费观看高清完整版在| 亚洲自拍偷拍综合| 欧美猛男超大videosgay| 亚洲欧洲无码一区二区三区| 色综合一个色综合| 日韩精品成人一区二区三区| 日韩精品一区二区三区中文精品 | 欧美一区二区在线视频| 天堂va蜜桃一区二区三区 | 国产高清亚洲一区| 亚洲日穴在线视频| 日韩一区二区在线看片| 国产成人免费xxxxxxxx| 亚洲三级理论片| 欧美色手机在线观看| 国产麻豆午夜三级精品| 亚洲色图欧美偷拍| 精品国产一区二区三区久久久蜜月| 国产乱淫av一区二区三区| 一个色在线综合| 精品国产青草久久久久福利| 色欲综合视频天天天| 麻豆国产精品777777在线| 亚洲丝袜另类动漫二区| 91精选在线观看| 欧美日韩一级黄| 成人精品视频一区二区三区| 天堂午夜影视日韩欧美一区二区| 久久久久国色av免费看影院| 制服丝袜一区二区三区| proumb性欧美在线观看| 高潮精品一区videoshd| 麻豆精品一区二区综合av| 亚洲国产成人porn| 亚洲特黄一级片| 亚洲综合久久av| 一区二区欧美在线观看| 一区二区三区资源| 亚洲欧美一区二区久久| 国产精品久久综合| 国产精品欧美一区二区三区| 久久久久久麻豆| 中文字幕精品一区| 国产精品欧美久久久久无广告 | 国产精品一二三区在线| 国产成人精品免费一区二区| 激情五月婷婷综合| 粉嫩一区二区三区性色av| 99久久免费精品| 91久久精品一区二区三| 欧美麻豆精品久久久久久| 欧美高清性hdvideosex| 欧美大片国产精品| 中文字幕 久热精品 视频在线| 国产精品麻豆一区二区| 亚洲国产另类av| 国产一区二区不卡老阿姨| 成人av电影在线播放| 欧美精品视频www在线观看| 日韩限制级电影在线观看| 中文字幕欧美日韩一区| 亚洲午夜激情av| 成人午夜视频网站| 欧美电影一区二区三区| √…a在线天堂一区| 免费一级片91| 色综合久久综合网|