rv = PTHREAD_ATTR_INIT(&attr);
rv = _PT_PTHREAD_ATTR_INIT(&attr);
int main(int argc, char **argv){#ifdef _PR_PTHREADS    int rv;    pthread_t threadID;    pthread_attr_t attr;#elif defined(SOLARIS)    int rv;    thread_t threadID;#elif defined(WIN32)    DWORD rv;    unsigned threadID;    HANDLE hThread;#elif defined(IRIX)    int rv;    int threadID;#elif defined(OS2)    int rv;    TID threadID;#endif	/* The command line argument: -d is used to determine if the test is being run	in debug mode. The regress tool requires only one line output:PASS or FAIL.	All of the printfs associated with this test has been handled with a if (debug_mode)	test.	Usage: test_name [-d] [-c n]	*/	PLOptStatus os;	PLOptState *opt = PL_CreateOptState(argc, argv, "dc:");	while (PL_OPT_EOL != (os = PL_GetNextOpt(opt)))    {		if (PL_OPT_BAD == os) continue;        switch (opt->option)        {        case 'd':  /* debug mode */			debug_mode = 1;            break;        case 'c':  /* loop count */			count = atoi(opt->value);            break;         default:            break;        }    }	PL_DestroyOptState(opt);#if defined(WIN16)    printf("attach: This test is not valid for Win16\n");    goto exit_now;#endif	if(0 == count) count = DEFAULT_COUNT;	    /*     * To force the implicit initialization of nspr20     */    PR_SetError(0, 0);    PR_STDIO_INIT();    /*     * Platform-specific code to create a native thread.  The native     * thread will repeatedly call PR_AttachThread and PR_DetachThread.     * The primordial thread waits for this new thread to finish.     */#ifdef _PR_PTHREADS    rv = PTHREAD_ATTR_INIT(&attr);    if (debug_mode) PR_ASSERT(0 == rv);	else if (0 != rv) {		failed_already=1;		goto exit_now;	}	#ifndef _PR_DCETHREADS    rv = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);    if (debug_mode) PR_ASSERT(0 == rv);	else if (0 != rv) {		failed_already=1;		goto exit_now;	}#endif  /* !_PR_DCETHREADS */    rv = PTHREAD_CREATE(&threadID, attr, threadStartFunc, NULL);    if (rv != 0) {			fprintf(stderr, "thread creation failed: error code %d\n", rv);			failed_already=1;			goto exit_now;	}	else {		if (debug_mode)			printf ("thread creation succeeded \n");	}    rv = PTHREAD_ATTR_DESTROY(&attr);    if (debug_mode) PR_ASSERT(0 == rv);	else if (0 != rv) {		failed_already=1;		goto exit_now;	}    rv = pthread_join(threadID, NULL);    if (debug_mode) PR_ASSERT(0 == rv);	else if (0 != rv) {		failed_already=1;		goto exit_now;	}#elif defined(SOLARIS)    rv = thr_create(NULL, 0, threadStartFunc, NULL, 0, &threadID);    if (rv != 0) {	if(!debug_mode) {		failed_already=1;		goto exit_now;	} else			fprintf(stderr, "thread creation failed: error code %d\n", rv);    }    rv = thr_join(threadID, NULL, NULL);    if (debug_mode) PR_ASSERT(0 == rv);	else if (0 != rv)	{		failed_already=1;		goto exit_now;	}#elif defined(WIN32)    hThread = (HANDLE) _beginthreadex(NULL, 0, threadStartFunc, NULL,            0, &threadID);     if (hThread == 0) {        fprintf(stderr, "thread creation failed: error code %d\n",                GetLastError());		failed_already=1;		goto exit_now;    }    rv = WaitForSingleObject(hThread, INFINITE);    if (debug_mode)PR_ASSERT(rv != WAIT_FAILED);	else if (rv == WAIT_FAILED) {		failed_already=1;		goto exit_now;	}#elif defined(IRIX)    threadID = sproc(threadStartFunc, PR_SALL, NULL);    if (threadID == -1) {			fprintf(stderr, "thread creation failed: error code %d\n",					errno);			failed_already=1;			goto exit_now;		}	else {		if (debug_mode) 			printf ("thread creation succeeded \n");		sleep(3);		goto exit_now;	}    rv = waitpid(threadID, NULL, 0);    if (debug_mode) PR_ASSERT(rv != -1);	else  if (rv != -1) {		failed_already=1;		goto exit_now;	}#elif defined(OS2)    threadID = (TID) _beginthread((void(* _Optlink)(void*))threadStartFunc, NULL,            32768, NULL);     if (threadID == -1) {        fprintf(stderr, "thread creation failed: error code %d\n", errno);		failed_already=1;		goto exit_now;    }    rv = DosWaitThread(&threadID, DCWW_WAIT);    if (debug_mode)PR_ASSERT(rv == NO_ERROR);	else if (rv == NO_ERROR) {		failed_already=1;		goto exit_now;	}#else	if (!debug_mode)		failed_already=1;	else			printf("The attach test does not apply to this platform because\n"	    "either this platform does not have native threads or the\n"	    "test needs to be written for this platform.\n");	goto exit_now;#endifexit_now:   if(failed_already)			return 1;	else		return 0;}