 	}
 
 	// Compute how many bytes to read, and see whether the final newline should be dropped.
-	if ((argc >= (i + 2)) && _isdigit(argv[i+1][0])) {
+	int bytesLeft;
+	if (argc >= (i + 2) && isdigit(argv[i+1][0])) {
 		if (Tcl_GetInt(interp, argv[i+1], &bytesLeft) != TCL_OK) {
 			return TCL_ERROR;
 		}

	}
#ifndef NO_FORK
	else {
		int *inPipePtr, *outPipePtr;
		int cmdArgc, inPipe, outPipe;
		char **cmdArgv;
		if (Tcl_SplitList(interp, argv[1]+1, &cmdArgc, &cmdArgv) != TCL_OK) {
			goto error;
		}
		inPipePtr = (filePtr->writable ? &inPipe : NULL);
		outPipePtr = (filePtr->readable ? &outPipe : NULL);
		inPipe = outPipe = -1;
		filePtr->numPids = Tcl_CreatePipeline(interp, cmdArgc, cmdArgv, &filePtr->pidPtr, inPipePtr, outPipePtr, &filePtr->errorId);
		_freeFast((char *) cmdArgv);
		if (filePtr->numPids < 0) {
			goto error;
		}

		statOp = 0;
#ifdef S_IFLNK
		// This option is only included if symbolic links exist on this system (in which case S_IFLNK should be defined).
	} else if (c == 'r' && !strncmp(argv[1], "readlink", length) && length >= 5) {
		if (argc != 3) {
			argv[1] = "readlink";
			goto not3Args;
		}
		char linkValue[MAXPATHLEN+1];
		int linkLength = readlink(fileName, linkValue, sizeof(linkValue) - 1);
		if (linkLength == -1) {
			Tcl_AppendResult(interp, "couldn't readlink \"", argv[2], "\": ", Tcl_UnixError(interp), (char *)NULL);
			return TCL_ERROR;
