Tcl Source Code

Check-in [a9f36601c5]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[Patch #1536227]: Cygwin network pathname support
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: a9f36601c50ac1cb5da6f2552f47834a9ab4150e
User & Date: jan.nijtmans 2012-06-25 08:08:05
Context
2012-06-25
12:57
[Bug 3537605]: Make [encoding dirs ? ?] report the right error message. check-in: 0d03fa5c04 user: dkf tags: trunk
09:23
merge trunk check-in: 9460101cd7 user: dkf tags: tip-400-impl
08:08
[Patch #1536227]: Cygwin network pathname support check-in: a9f36601c5 user: jan.nijtmans tags: trunk
07:54
[Patch #1536227]: Cygwin network pathname support check-in: 299f53aadb user: jan.nijtmans tags: core-8-5-branch
2012-06-24
06:07
some wrong versions check-in: 3d36fc27c1 user: jan.nijtmans tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ChangeLog.






1
2
3
4
5
6
7





2012-06-23  Jan Nijtmans  <[email protected]>

	* unix/tclUnixNotfy.c: [Bug 3508771]: Cygwin notifier for handling
	win32 events.

2012-06-22  Reinhard Max  <[email protected]>

>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
2012-06-25  Jan Nijtmans  <[email protected]>

	* generic/tclfileName.c: [Patch #1536227]: Cygwin network pathname
	* tests/fileName.test:   support

2012-06-23  Jan Nijtmans  <[email protected]>

	* unix/tclUnixNotfy.c: [Bug 3508771]: Cygwin notifier for handling
	win32 events.

2012-06-22  Reinhard Max  <[email protected]>

Changes to generic/tclFileName.c.

420
421
422
423
424
425
426








427
428
429
430
431
432
433
434
435
436
		path += 3;
		while (isdigit(UCHAR(*path))) {
		    path++;
		}
	    }
#endif
	    if (path[0] == '/') {








		if (driveNameLengthPtr != NULL) {
		    /*
		     * We need this addition in case the QNX code was used.
		     */

		    *driveNameLengthPtr = (1 + path - origPath);
		}
	    } else {
		type = TCL_PATH_RELATIVE;
	    }







>
>
>
>
>
>
>
>


|







420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
		path += 3;
		while (isdigit(UCHAR(*path))) {
		    path++;
		}
	    }
#endif
	    if (path[0] == '/') {
#ifdef __CYGWIN__
		/*
		 * Check for Cygwin // network path prefix
		 */
		if (path[1] == '/') {
		    path++;
		}
#endif
		if (driveNameLengthPtr != NULL) {
		    /*
		     * We need this addition in case the QNX or Cygwin code was used.
		     */

		    *driveNameLengthPtr = (1 + path - origPath);
		}
	    } else {
		type = TCL_PATH_RELATIVE;
	    }
649
650
651
652
653
654
655

656











657
658
659
660
661
662
663
664
665
666
667
	path += 3;
	while (isdigit(UCHAR(*path))) { /* INTL: digit */
	    path++;
	}
    }
#endif


    if (path[0] == '/') {











	Tcl_ListObjAppendElement(NULL, result, Tcl_NewStringObj("/",1));
	p = path+1;
    } else {
	p = path;
    }

    /*
     * Split on slashes. Embedded elements that start with tilde will be
     * prefixed with "./" so they are not affected by tilde substitution.
     */








>
|
>
>
>
>
>
>
>
>
>
>
>
|
<
<
<







657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677



678
679
680
681
682
683
684
	path += 3;
	while (isdigit(UCHAR(*path))) { /* INTL: digit */
	    path++;
	}
    }
#endif

    p = path;
    if (*p == '/') {
	Tcl_Obj *rootElt = Tcl_NewStringObj("/", 1);
	p++;
#ifdef __CYGWIN__
	/*
	 * Check for Cygwin // network path prefix
	 */
	if (*p == '/') {
	    Tcl_AppendToObj(rootElt, "/", 1);
	    p++;
	}
#endif
	Tcl_ListObjAppendElement(NULL, result, rootElt);



    }

    /*
     * Split on slashes. Embedded elements that start with tilde will be
     * prefixed with "./" so they are not affected by tilde substitution.
     */

2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
	    if (length == 0 && (Tcl_DStringLength(&append) == 0)) {
		if ((*name == '\\' && name[1] == '/') || (*name == '/')) {
		    Tcl_DStringAppend(&append, "/", 1);
		} else {
		    Tcl_DStringAppend(&append, ".", 1);
		}
	    }
#if defined(__CYGWIN__) && !defined(__WIN32__)
	    {
		DLLIMPORT extern int cygwin_conv_to_posix_path(const char *,
			char *);
		char winbuf[MAXPATHLEN+1];

		cygwin_conv_to_posix_path(Tcl_DStringValue(&append), winbuf);
		Tcl_DStringFree(&append);
		Tcl_DStringAppend(&append, winbuf, -1);
	    }
#endif /* __CYGWIN__ && __WIN32__ */
	    break;
	}

	/*
	 * Common for all platforms.
	 */








<
<
<
<
<
<
<
<
<
<
<







2413
2414
2415
2416
2417
2418
2419











2420
2421
2422
2423
2424
2425
2426
	    if (length == 0 && (Tcl_DStringLength(&append) == 0)) {
		if ((*name == '\\' && name[1] == '/') || (*name == '/')) {
		    Tcl_DStringAppend(&append, "/", 1);
		} else {
		    Tcl_DStringAppend(&append, ".", 1);
		}
	    }











	    break;
	}

	/*
	 * Common for all platforms.
	 */

Changes to tests/fileName.test.

192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
test filename-4.12 {Tcl_SplitPath: unix} {testsetplatform} {
    testsetplatform unix
    file split ../..
} {.. ..}
test filename-4.13 {Tcl_SplitPath: unix} {testsetplatform} {
    testsetplatform unix
    file split //foo
} {/ foo}
test filename-4.14 {Tcl_SplitPath: unix} {testsetplatform} {
    testsetplatform unix
    file split foo//bar
} {foo bar}
test filename-4.15 {Tcl_SplitPath: unix} {testsetplatform} {
    testsetplatform unix
    file split ~foo







|







192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
test filename-4.12 {Tcl_SplitPath: unix} {testsetplatform} {
    testsetplatform unix
    file split ../..
} {.. ..}
test filename-4.13 {Tcl_SplitPath: unix} {testsetplatform} {
    testsetplatform unix
    file split //foo
} "[file split //] foo"
test filename-4.14 {Tcl_SplitPath: unix} {testsetplatform} {
    testsetplatform unix
    file split foo//bar
} {foo bar}
test filename-4.15 {Tcl_SplitPath: unix} {testsetplatform} {
    testsetplatform unix
    file split ~foo
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
test filename-7.16 {Tcl_JoinPath: unix} {testsetplatform} {
    testsetplatform unix
    file join a . ./~b
} {a/./~b}
test filename-7.17 {Tcl_JoinPath: unix} {testsetplatform} {
    testsetplatform unix
    file join //a b
} {/a/b}
test filename-7.18 {Tcl_JoinPath: unix} {testsetplatform} {
    testsetplatform unix
    file join /// a b
} {/a/b}

test filename-9.1 {Tcl_JoinPath: win} {testsetplatform} {
    testsetplatform win
    file join a b
} {a/b}
test filename-9.2 {Tcl_JoinPath: win} {testsetplatform} {
    testsetplatform win







|



|







429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
test filename-7.16 {Tcl_JoinPath: unix} {testsetplatform} {
    testsetplatform unix
    file join a . ./~b
} {a/./~b}
test filename-7.17 {Tcl_JoinPath: unix} {testsetplatform} {
    testsetplatform unix
    file join //a b
} "[file split //]a/b"
test filename-7.18 {Tcl_JoinPath: unix} {testsetplatform} {
    testsetplatform unix
    file join /// a b
} "[file split //]a/b"

test filename-9.1 {Tcl_JoinPath: win} {testsetplatform} {
    testsetplatform win
    file join a b
} {a/b}
test filename-9.2 {Tcl_JoinPath: win} {testsetplatform} {
    testsetplatform win