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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? nfsdlib.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號(hào):
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);    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频精品在线| 精品国产乱码久久久久久牛牛 | 久久精品在这里| 蜜臀av性久久久久蜜臀aⅴ| 欧美日本精品一区二区三区| 亚洲中国最大av网站| 色综合一个色综合亚洲| 亚洲欧洲99久久| 99热国产精品| 日韩毛片在线免费观看| 97久久久精品综合88久久| 国产精品妹子av| av色综合久久天堂av综合| 国产精品国产三级国产普通话99| 国产不卡视频在线播放| 国产人久久人人人人爽| 国产不卡视频在线播放| 国产精品美女久久久久久 | 国产精品一区在线观看你懂的| 精品久久人人做人人爽| 国内不卡的二区三区中文字幕 | 欧美人动与zoxxxx乱| 亚洲.国产.中文慕字在线| 欧美日产国产精品| 视频一区在线视频| 日韩欧美电影一二三| 激情欧美一区二区三区在线观看| 久久夜色精品国产欧美乱极品| 国产精品资源站在线| 中文字幕av一区 二区| 972aa.com艺术欧美| 亚洲一区二区五区| 51精品秘密在线观看| 久久99九九99精品| 国产色产综合色产在线视频| 99久久免费视频.com| 亚洲一区二区视频在线观看| 日韩一区二区三区在线视频| 狠狠色狠狠色综合系列| 国产精品不卡视频| 欧美日韩成人综合| 国产在线一区二区| 国产精品国产三级国产| 欧美亚一区二区| 精品综合久久久久久8888| 国产精品视频看| 欧美图区在线视频| 精品一区二区三区视频在线观看 | 中文字幕欧美一| 在线观看日韩高清av| 青青青爽久久午夜综合久久午夜| 久久久久国产精品麻豆| 色婷婷精品大在线视频| 日韩电影在线一区二区三区| 国产欧美日韩另类视频免费观看| 91免费国产在线观看| 日本大胆欧美人术艺术动态| 欧美高清一级片在线观看| 91激情在线视频| 久久99精品国产麻豆婷婷| 亚洲日本在线a| 日韩精品一区二区三区四区视频 | 成人激情小说网站| 亚洲成人资源在线| 国产欧美日韩精品a在线观看| 在线精品观看国产| 国产又黄又大久久| 亚洲自拍偷拍九九九| 久久久久久久久久久99999| 欧美色综合久久| 国产激情精品久久久第一区二区 | 免费看欧美女人艹b| 国产精品福利一区二区| 日韩写真欧美这视频| caoporn国产精品| 美女爽到高潮91| 一区二区三区在线不卡| 国产午夜精品一区二区三区嫩草| 欧美色倩网站大全免费| 成人免费视频一区二区| 日本系列欧美系列| 亚洲精品国产成人久久av盗摄 | 日韩精品欧美精品| 综合电影一区二区三区| 精品蜜桃在线看| 欧美日韩国产一级| 94色蜜桃网一区二区三区| 国产麻豆午夜三级精品| 日韩av中文字幕一区二区三区| 国产精品美女久久久久av爽李琼| 日韩视频一区在线观看| 日本道精品一区二区三区| 国产99久久久精品| 久久99久久久欧美国产| 亚洲h动漫在线| 亚洲美女屁股眼交3| 国产日韩欧美综合在线| 欧美一区二区二区| 欧美亚男人的天堂| 色综合久久久久综合| 高清免费成人av| 国产麻豆视频精品| 麻豆精品一区二区综合av| 亚洲一级二级在线| 亚洲激情在线激情| 中文字幕乱码久久午夜不卡| 欧美变态口味重另类| 欧美精品xxxxbbbb| 91福利区一区二区三区| 99精品视频在线观看| 丰满亚洲少妇av| 国产成人综合网站| 国产一区二区三区四区在线观看 | 午夜av电影一区| 一区二区三区精品视频在线| 亚洲三级久久久| 亚洲欧美日韩人成在线播放| 成人欧美一区二区三区小说| 国产调教视频一区| 久久久久久久久岛国免费| 久久一区二区视频| 久久一二三国产| 国产三级一区二区| 久久尤物电影视频在线观看| 久久婷婷国产综合精品青草| 精品久久久久久综合日本欧美| 日韩亚洲欧美综合| 日韩免费在线观看| 日韩精品中文字幕一区| 日韩一二三四区| 欧美精品一区二区久久久| 精品日韩一区二区| 欧美sm美女调教| 久久伊99综合婷婷久久伊| 久久亚洲一区二区三区明星换脸 | 精品三级在线看| xnxx国产精品| 久久女同互慰一区二区三区| 国产拍欧美日韩视频二区| 欧美高清在线一区| ●精品国产综合乱码久久久久| 亚洲欧洲av色图| 亚洲午夜电影网| 日韩一区欧美二区| 久久精品国产77777蜜臀| 狠狠v欧美v日韩v亚洲ⅴ| 国产真实乱偷精品视频免| 大胆亚洲人体视频| 91最新地址在线播放| 欧美三级午夜理伦三级中视频| 欧美乱熟臀69xxxxxx| 日韩欧美一区二区久久婷婷| 久久亚洲欧美国产精品乐播| 亚洲国产精品v| 亚洲另类色综合网站| 午夜精品久久久久久久久久| 美女视频网站黄色亚洲| 国产精品91一区二区| 91丝袜美女网| 欧美精品一二三区| 精品免费国产二区三区| 国产精品午夜春色av| 亚洲精品国产无套在线观| 日本欧美在线观看| 国产精品一区二区三区网站| 91欧美激情一区二区三区成人| 精品视频1区2区| 久久久久青草大香线综合精品| 亚洲欧美激情插| 日韩—二三区免费观看av| 国产成人精品一区二区三区四区 | 国产精品三级av| 亚洲一区影音先锋| 精品无人码麻豆乱码1区2区 | 久久久亚洲午夜电影| 亚洲日本电影在线| 喷白浆一区二区| 成人激情图片网| 欧美一区二区三区四区高清| 国产精品嫩草影院com| 午夜久久久久久电影| 国产毛片精品视频| 欧美网站一区二区| 国产亚洲欧洲一区高清在线观看| 一区二区三区在线视频观看58| 九九精品一区二区| 色婷婷久久99综合精品jk白丝| 精品美女一区二区| 一区二区在线观看视频| 精品亚洲免费视频| 欧美吻胸吃奶大尺度电影| 国产视频在线观看一区二区三区| 亚洲成人av资源| 丁香婷婷综合网| 91精品免费在线| 亚洲日本韩国一区| 国产在线日韩欧美| 欧美日韩aaa| 亚洲天天做日日做天天谢日日欢| 麻豆91在线播放免费|