Changeset 195 for trunk/base
- Timestamp:
- Aug 18, 2002, 12:04:29 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/base/Tcl/port1.0/Pextlib.c
r182 r195 3 3 #include <errno.h> 4 4 #include <string.h> 5 #include <dirent.h> 5 6 #include <sys/file.h> 7 #include <sys/types.h> 6 8 #include <tcl.h> 7 9 8 10 #define BUFSIZ 1024 9 static const char ui_proc[] = "ui_info {"; 11 12 static int ui_info(Tcl_Interp *interp, char *mesg) { 13 const char ui_proc[] = "ui_info {"; 14 char *script, *p; 15 int scriptlen, ret; 16 17 scriptlen = sizeof(ui_proc) + strlen(mesg); 18 script = malloc(scriptlen); 19 if (script == NULL) 20 return TCL_ERROR; 21 else 22 p = script; 23 24 memcpy(script, ui_proc, sizeof(ui_proc)); 25 strcat(script, mesg); 26 p += scriptlen - 2; 27 *p = '}'; 28 return (Tcl_EvalEx(interp, script, scriptlen - 1, 0)); 29 } 10 30 11 31 int SystemCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) … … 80 100 81 101 while (fgets(buf, BUFSIZ, pipe) != NULL) { 82 char *script, *p; 83 int scriptlen, ret; 84 85 scriptlen = sizeof(ui_proc) + strlen(buf); 86 script = malloc(scriptlen); 87 if (script == NULL) 88 break; 89 else 90 p = script; 91 92 memcpy(script, ui_proc, sizeof(ui_proc)); 93 strcat(script, buf); 94 p += scriptlen - 2; 95 *p = '}'; 96 if ((ret = Tcl_EvalEx(interp, script, scriptlen - 1, 0)) != TCL_OK) 102 int ret = ui_info(interp, buf); 103 if (ret != TCL_OK) 97 104 return ret; 98 105 Tcl_AppendResult(interp, buf, NULL); … … 164 171 } 165 172 173 int ReaddirCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) 174 { 175 DIR *dirp; 176 struct dirent *dp; 177 Tcl_Obj *tcl_result; 178 char *path; 179 180 if (objc != 2) { 181 Tcl_WrongNumArgs(interp, 1, objv, "directory"); 182 return TCL_ERROR; 183 } 184 185 path = Tcl_GetString(objv[1]); 186 dirp = opendir(path); 187 if (!dirp) { 188 Tcl_SetResult(interp, "Directory not found", TCL_STATIC); 189 return TCL_ERROR; 190 } 191 tcl_result = Tcl_NewListObj(0, NULL); 192 while (dp = readdir(dirp)) { 193 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewStringObj(dp->d_name, -1)); 194 } 195 closedir(dirp); 196 Tcl_SetObjResult(interp, tcl_result); 197 198 return TCL_OK; 199 } 200 166 201 int Pextlib_Init(Tcl_Interp *interp) 167 202 { 168 203 Tcl_CreateObjCommand(interp, "system", SystemCmd, NULL, NULL); 169 204 Tcl_CreateObjCommand(interp, "flock", FlockCmd, NULL, NULL); 205 Tcl_CreateObjCommand(interp, "readdir", ReaddirCmd, NULL, NULL); 170 206 if(Tcl_PkgProvide(interp, "Pextlib", "1.0") != TCL_OK) 171 207 return TCL_ERROR;
Note: See TracChangeset
for help on using the changeset viewer.