⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testfile.c

📁 Netscape NSPR库源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	while (thread_count) {		PR_Wait(mon, PR_INTERVAL_NO_TIMEOUT);	}	PR_ExitMonitor(mon);	/*	 * Start a bunch of reader threads	 */	offset = 0;	len = CHUNK_SIZE;	PR_EnterMonitor(mon);	for (i = 0; i < NUM_RDWR_THREADS; i++) {		fparamp = PR_NEW(File_Rdwr_Param);		if (fparamp == NULL) {			printf(			"testfile failed to alloc File_Rdwr_Param struct\n");			rv =  -1;			goto cleanup;			}		fparamp->pathname = pathname;		fparamp->buf = in_buf->data + offset;		fparamp->offset = offset;		fparamp->len = len;		t = create_new_thread(PR_USER_THREAD,			      File_Read, (void *)fparamp, 			      PR_PRIORITY_NORMAL,			      scope,			      PR_UNJOINABLE_THREAD,			      0, i);		offset += len;		if ((offset + len) > BUF_DATA_SIZE)			break;	}	thread_count = i;	/* Wait for reader threads to exit */	while (thread_count) {		PR_Wait(mon, PR_INTERVAL_NO_TIMEOUT);	}	PR_ExitMonitor(mon);	if (memcmp(in_buf->data, out_buf->data, offset) != 0) {		printf("File Test failed: file data corrupted\n");		rv =  -1;		goto cleanup;		}	if ((PR_Delete(pathname)) < 0) {		printf("testfile failed to unlink file %s\n",pathname);		rv =  -1;		goto cleanup;		}	/*	 * Test PR_Available, PR_Seek, PR_GetFileInfo, PR_Rename, PR_Access	 */	if (Misc_File_Tests(pathname) < 0) {		rv = -1;	}cleanup:	if ((PR_RmDir(TEST_DIR)) < 0) {		printf("testfile failed to rmdir %s\n", TEST_DIR);		rv = -1;	}	return rv;}struct dirtest_arg {	PRMonitor	*mon;	PRInt32		done;};static PRInt32 RunDirTest(void){int i;PRThread *t;PRMonitor *mon;struct dirtest_arg thrarg;	mon = PR_NewMonitor();	if (!mon) {		printf("RunDirTest: Error - failed to create monitor\n");		dirtest_failed = 1;		return -1;	}	thrarg.mon = mon;	for (i = 0; i < NUM_DIRTEST_THREADS; i++) {		thrarg.done= 0;		t = create_new_thread(PR_USER_THREAD,			      DirTest, &thrarg, 			      PR_PRIORITY_NORMAL,			      PR_LOCAL_THREAD,			      PR_UNJOINABLE_THREAD,			      0, i);		if (!t) {			printf("RunDirTest: Error - failed to create thread\n");			dirtest_failed = 1;			return -1;		}		PR_EnterMonitor(mon);		while (!thrarg.done)			PR_Wait(mon, PR_INTERVAL_NO_TIMEOUT);		PR_ExitMonitor(mon);	}	PR_DestroyMonitor(mon);	return 0;}static PRInt32 PR_CALLBACK DirTest(void *arg){struct dirtest_arg *tinfo = (struct dirtest_arg *) arg;PRFileDesc *fd_file;PRDir *fd_dir;int i;int path_len;PRDirEntry *dirEntry;PRFileInfo info;PRInt32 num_files = 0;#if defined(XP_PC) && defined(WIN32)HANDLE hfile;#endif#define  FILES_IN_DIR 20	/*	 * Create Test dir	 */	DPRINTF(("Creating test dir %s\n",TEST_DIR));	if ((PR_MkDir(TEST_DIR, 0777)) < 0) {		printf(			"testfile failed to create dir %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}	fd_dir = PR_OpenDir(TEST_DIR);	if (fd_dir == NULL) {		printf(			"testfile failed to open dirctory %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}	strcpy(pathname, TEST_DIR);	strcat(pathname, "/");	strcat(pathname, FILE_NAME);	path_len = strlen(pathname);		for (i = 0; i < FILES_IN_DIR; i++) {		sprintf(pathname + path_len,"%d%s",i,"");		DPRINTF(("Creating test file %s\n",pathname));		fd_file = PR_Open(pathname, PR_RDWR | PR_CREATE_FILE, 0777);		if (fd_file == NULL) {			printf(					"testfile failed to create/open file %s [%d, %d]\n",					pathname, PR_GetError(), PR_GetOSError());			return -1;		}        PR_Close(fd_file);	}#if defined(XP_UNIX) || defined(XP_MAC) || (defined(XP_PC) && defined(WIN32)) || defined(XP_OS2) || defined(XP_BEOS)	/*	 * Create a hidden file - a platform-dependent operation	 */	strcpy(pathname, TEST_DIR);	strcat(pathname, "/");	strcat(pathname, HIDDEN_FILE_NAME);#if defined(XP_UNIX) || defined(XP_MAC) || defined(XP_BEOS)	DPRINTF(("Creating hidden test file %s\n",pathname));	fd_file = PR_Open(pathname, PR_RDWR | PR_CREATE_FILE, 0777);	if (fd_file == NULL) {		printf(				"testfile failed to create/open hidden file %s [%d, %d]\n",				pathname, PR_GetError(), PR_GetOSError());		return -1;	}#if defined(XP_MAC)	{#include <files.h>	OSErr			err;	FCBPBRec		fcbpb;	CInfoPBRec		pb;	Str255			pascalMacPath;	fcbpb.ioNamePtr = pascalMacPath;	fcbpb.ioVRefNum = 0;	fcbpb.ioRefNum = fd_file->secret->md.osfd;	fcbpb.ioFCBIndx = 0;		err = PBGetFCBInfoSync(&fcbpb);	if (err != noErr) {    	PR_Close(fd_file);    	return -1;	}		pb.hFileInfo.ioNamePtr = pascalMacPath;	pb.hFileInfo.ioVRefNum = fcbpb.ioFCBVRefNum;	pb.hFileInfo.ioDirID = fcbpb.ioFCBParID;	pb.hFileInfo.ioFDirIndex = 0;		err = PBGetCatInfoSync(&pb);	if (err != noErr) {    	PR_Close(fd_file);    	return -1;	}	pb.hFileInfo.ioNamePtr = pascalMacPath;	pb.hFileInfo.ioVRefNum = fcbpb.ioFCBVRefNum;	pb.hFileInfo.ioDirID = fcbpb.ioFCBParID;	pb.hFileInfo.ioFDirIndex = 0;		pb.hFileInfo.ioFlFndrInfo.fdFlags |= fInvisible;	err = PBSetCatInfoSync(&pb);	if (err != noErr) {    	PR_Close(fd_file);    	return -1;	}	}#endif    PR_Close(fd_file);	#elif defined(XP_PC) && defined(WIN32)	DPRINTF(("Creating hidden test file %s\n",pathname));	hfile = CreateFile(pathname, GENERIC_READ,						FILE_SHARE_READ|FILE_SHARE_WRITE,						NULL,						CREATE_NEW,						FILE_ATTRIBUTE_HIDDEN,						NULL);	if (hfile == INVALID_HANDLE_VALUE) {		printf("testfile failed to create/open hidden file %s [0, %d]\n",				pathname, GetLastError());		return -1;	}	CloseHandle(hfile);						#elif defined(OS2)	DPRINTF(("Creating hidden test file %s\n",pathname));	fd_file = PR_Open(pathname, PR_RDWR | PR_CREATE_FILE, (int)FILE_HIDDEN);	if (fd_file == NULL) {		printf("testfile failed to create/open hidden file %s [%d, %d]\n",				pathname, PR_GetError(), PR_GetOSError());		return -1;	}	PR_Close(fd_file);#endif	/* XP _UNIX || XP_MAC*/#endif	/* XP_UNIX || XP_MAC ||(XP_PC && WIN32) */	if (PR_FAILURE == PR_CloseDir(fd_dir))	{		printf(			"testfile failed to close dirctory %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}	fd_dir = PR_OpenDir(TEST_DIR);	if (fd_dir == NULL) {		printf(			"testfile failed to reopen dirctory %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}  	/*	 * List all files, including hidden files	 */	DPRINTF(("Listing all files in directory %s\n",TEST_DIR));#if defined(XP_UNIX) || defined(XP_MAC) || (defined(XP_PC) && defined(WIN32)) || defined(XP_OS2) || defined(XP_BEOS)	num_files = FILES_IN_DIR + 1;#else	num_files = FILES_IN_DIR;#endif	while ((dirEntry = PR_ReadDir(fd_dir, PR_SKIP_BOTH)) != NULL) {		num_files--;		strcpy(pathname, TEST_DIR);		strcat(pathname, "/");		strcat(pathname, dirEntry->name);		DPRINTF(("\t%s\n",dirEntry->name));		if ((PR_GetFileInfo(pathname, &info)) < 0) {			printf(				"testfile failed to GetFileInfo file %s [%d, %d]\n",				pathname, PR_GetError(), PR_GetOSError());			return -1;		}				if (info.type != PR_FILE_FILE) {			printf(				"testfile incorrect fileinfo for file %s [%d, %d]\n",				pathname, PR_GetError(), PR_GetOSError());			return -1;		}	}	if (num_files != 0)	{		printf(			"testfile failed to find all files in directory %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}    PR_CloseDir(fd_dir);#if defined(XP_UNIX) || defined(XP_MAC) || (defined(XP_PC) && defined(WIN32)) || defined(XP_OS2) || defined(XP_BEOS)	/*	 * List all files, except hidden files	 */	fd_dir = PR_OpenDir(TEST_DIR);	if (fd_dir == NULL) {		printf(			"testfile failed to reopen dirctory %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}  	DPRINTF(("Listing non-hidden files in directory %s\n",TEST_DIR));	while ((dirEntry = PR_ReadDir(fd_dir, PR_SKIP_HIDDEN)) != NULL) {		DPRINTF(("\t%s\n",dirEntry->name));		if (!strcmp(HIDDEN_FILE_NAME, dirEntry->name)) {			printf("testfile found hidden file %s\n", pathname);			return -1;		}	}	/*	 * Delete hidden file	 */	strcpy(pathname, TEST_DIR);	strcat(pathname, "/");	strcat(pathname, HIDDEN_FILE_NAME);	if (PR_FAILURE == PR_Delete(pathname)) {		printf(			"testfile failed to delete hidden file %s [%d, %d]\n",			pathname, PR_GetError(), PR_GetOSError());		return -1;	}    PR_CloseDir(fd_dir);#endif	/* XP_UNIX || XP_MAC || (XP_PC && WIN32) */	strcpy(renamename, TEST_DIR);	strcat(renamename, ".RENAMED");	if (PR_FAILURE == PR_Rename(TEST_DIR, renamename)) {		printf(			"testfile failed to rename directory %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}    	if (PR_FAILURE == PR_MkDir(TEST_DIR, 0777)) {		printf(			"testfile failed to recreate dir %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}	if (PR_SUCCESS == PR_Rename(renamename, TEST_DIR)) {		printf(			"testfile renamed directory to existing name %s\n",			renamename);		return -1;	}	if (PR_FAILURE == PR_RmDir(TEST_DIR)) {		printf(			"testfile failed to rmdir %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}	if (PR_FAILURE == PR_Rename(renamename, TEST_DIR)) {		printf(			"testfile failed to rename directory %s [%d, %d]\n",			renamename, PR_GetError(), PR_GetOSError());		return -1;	}	fd_dir = PR_OpenDir(TEST_DIR);	if (fd_dir == NULL) {		printf(			"testfile failed to reopen directory %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}	strcpy(pathname, TEST_DIR);	strcat(pathname, "/");	strcat(pathname, FILE_NAME);	path_len = strlen(pathname);		for (i = 0; i < FILES_IN_DIR; i++) {		sprintf(pathname + path_len,"%d%s",i,"");		if (PR_FAILURE == PR_Delete(pathname)) {			printf(				"testfile failed to delete file %s [%d, %d]\n",				pathname, PR_GetError(), PR_GetOSError());			return -1;		}	}    PR_CloseDir(fd_dir);	if (PR_FAILURE == PR_RmDir(TEST_DIR)) {		printf(			"testfile failed to rmdir %s [%d, %d]\n",			TEST_DIR, PR_GetError(), PR_GetOSError());		return -1;	}	PR_EnterMonitor(tinfo->mon);	tinfo->done = 1;	PR_Notify(tinfo->mon);	PR_ExitMonitor(tinfo->mon);	return 0;}/************************************************************************//* * Test file and directory NSPR APIs */int main(int argc, char **argv){#ifdef WIN32	PRUint32 len;#endif#if defined(XP_UNIX) || defined(XP_OS2_EMX)        int opt;        extern char *optarg;	extern int optind;#endif#if defined(XP_UNIX) || defined(XP_OS2_EMX)        while ((opt = getopt(argc, argv, "d")) != EOF) {                switch(opt) {                        case 'd':                                _debug_on = 1;                                break;                        default:                                break;                }        }#endif	PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);    PR_STDIO_INIT();#ifdef XP_MAC	SetupMacPrintfLog("testfile.log");#endif	mon = PR_NewMonitor();	if (mon == NULL) {		printf("testfile: PR_NewMonitor failed\n");		exit(2);	}#ifdef WIN32	len = GetTempPath(TMPDIR_LEN, testdir);	if ((len > 0) && (len < (TMPDIR_LEN - 6))) {		/*		 * enough space for prdir		 */		strcpy((testdir + len),"prdir");		TEST_DIR = testdir;		printf("TEST_DIR = %s\n",TEST_DIR);	}	#endif	if (FileTest() < 0) {		printf("File Test failed\n");		exit(2);	}	printf("File Test passed\n");	if ((RunDirTest() < 0) || dirtest_failed) {		printf("Dir Test failed\n");		exit(2);	}	printf("Dir Test passed\n");	PR_DestroyMonitor(mon);	PR_Cleanup();    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -