1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-
+
|
/*
* tclUnixFile.c --
*
* This file contains wrappers around UNIX file handling functions.
* These wrappers mask differences between Windows and UNIX.
*
* Copyright (c) 1995-1998 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclUnixFile.c,v 1.26 2002/07/19 12:31:10 dkf Exp $
* RCS: @(#) $Id: tclUnixFile.c,v 1.27 2002/07/20 01:01:41 vincentdarley Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
static int NativeMatchType(CONST char* nativeName, Tcl_GlobTypeData *types);
|
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
|
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
|
-
+
|
if (length < 0) {
return NULL;
}
Tcl_ExternalToUtfDString(NULL, link, length, linkPtr);
return Tcl_DStringValue(linkPtr);
#else
return NULL;
return NULL;
#endif
}
/*
*----------------------------------------------------------------------
*
* TclpObjStat --
|
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
|
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
|
+
-
+
+
-
+
+
+
|
return toPtr;
} else {
Tcl_Obj* linkPtr = NULL;
char link[MAXPATHLEN];
int length;
char *native;
Tcl_DString ds;
if (Tcl_FSGetTranslatedPath(NULL, pathPtr) == NULL) {
return NULL;
}
length = readlink(Tcl_FSGetNativePath(pathPtr), link, sizeof(link));
if (length < 0) {
return NULL;
}
/*
* Allocate and copy the name, taking care since the
* name need not be null terminated.
*/
native = (char*)ckalloc((unsigned)(1+length));
strncpy(native, link, (unsigned)length);
native[length] = '\0';
Tcl_ExternalToUtfDString(NULL, native, length, &ds);
linkPtr = Tcl_FSNewNativePath(&tclNativeFilesystem, native);
linkPtr = Tcl_NewStringObj(Tcl_DStringValue(&ds),
Tcl_DStringLength(&ds));
Tcl_DStringFree(&ds);
if (linkPtr != NULL) {
Tcl_IncrRefCount(linkPtr);
}
return linkPtr;
}
}
|