Showing the changes to java/pkg2/java/io/File_L.b (1 of 18352 files). Show all
Unified · Split
| @@ -0,0 +1,332 @@ | |||
| 1 | implement File_L; | ||
| 2 | |||
| 3 | # javal v1.3 generated file: edit with care | ||
| 4 | |||
| 5 | include "jni.m"; | ||
| 6 | jni : JNI; | ||
| 7 | ClassModule, | ||
| 8 | JString, | ||
| 9 | JArray, | ||
| 10 | JArrayI, | ||
| 11 | JArrayC, | ||
| 12 | JArrayB, | ||
| 13 | JArrayS, | ||
| 14 | JArrayJ, | ||
| 15 | JArrayF, | ||
| 16 | JArrayD, | ||
| 17 | JArrayZ, | ||
| 18 | JArrayJObject, | ||
| 19 | JArrayJClass, | ||
| 20 | JArrayJString, | ||
| 21 | JClass, | ||
| 22 | JThread, | ||
| 23 | JObject : import jni; | ||
| 24 | |||
| 25 | #>> extra pre includes here | ||
| 26 | sys : import jni; | ||
| 27 | str : import jni; | ||
| 28 | FALSE : import jni; | ||
| 29 | TRUE : import jni; | ||
| 30 | #<< | ||
| 31 | |||
| 32 | include "File_L.m"; | ||
| 33 | |||
| 34 | #>> extra post includes here | ||
| 35 | include "workdir.m"; | ||
| 36 | include "regex.m"; | ||
| 37 | str_mod : String; | ||
| 38 | #<< | ||
| 39 | |||
| 40 | init( jni_p : JNI ) | ||
| 41 | { | ||
| 42 | # save java native inteface mod instance | ||
| 43 | jni = jni_p; | ||
| 44 | #>>extra initialization here | ||
| 45 | sys = jni->sys; | ||
| 46 | str_mod = jni->str; | ||
| 47 | #<< | ||
| 48 | } | ||
| 49 | |||
| 50 | exists0_Z( this : ref File_obj) : int | ||
| 51 | {#>> | ||
| 52 | (ok, nil) := sys->stat(this.path.str); | ||
| 53 | if (ok == -1) | ||
| 54 | return (FALSE); | ||
| 55 | return (TRUE); | ||
| 56 | }#<< | ||
| 57 | |||
| 58 | canWrite0_Z( this : ref File_obj) : int | ||
| 59 | {#>> | ||
| 60 | # this routine is real cludgy...try to open the file for writing | ||
| 61 | # to see if you have WRITE access rights or not. | ||
| 62 | |||
| 63 | local_fd := sys->open(this.path.str, sys->OWRITE); | ||
| 64 | if (local_fd == nil) | ||
| 65 | return (FALSE); | ||
| 66 | return (TRUE); | ||
| 67 | }#<< | ||
| 68 | |||
| 69 | canRead0_Z( this : ref File_obj) : int | ||
| 70 | {#>> | ||
| 71 | # this routine is real cludgy...try to open the file for reading | ||
| 72 | # to see if you have READ access rights or not. | ||
| 73 | |||
| 74 | local_fd := sys->open(this.path.str, sys->OREAD); | ||
| 75 | if (local_fd == nil) | ||
| 76 | return (FALSE); | ||
| 77 | return (TRUE); | ||
| 78 | }#<< | ||
| 79 | |||
| 80 | isFile0_Z( this : ref File_obj) : int | ||
| 81 | {#>> | ||
| 82 | (ok, dir) := sys->stat(this.path.str); | ||
| 83 | if(ok >= 0 && !(dir.mode & Sys->CHDIR)) | ||
| 84 | return (TRUE); | ||
| 85 | return (FALSE); | ||
| 86 | }#<< | ||
| 87 | |||
| 88 | isDirectory0_Z( this : ref File_obj) : int | ||
| 89 | {#>> | ||
| 90 | (ok, dir) := sys->stat(this.path.str); | ||
| 91 | if(ok >= 0 && (dir.mode & Sys->CHDIR)) | ||
| 92 | return (TRUE); | ||
| 93 | return (FALSE); | ||
| 94 | }#<< | ||
| 95 | |||
| 96 | lastModified0_J( this : ref File_obj) : big | ||
| 97 | {#>> | ||
| 98 | (ok, dir) := sys->stat(this.path.str); | ||
| 99 | if(ok >= 0) | ||
| 100 | return (big dir.mtime); | ||
| 101 | return (big 0); | ||
| 102 | }#<< | ||
| 103 | |||
| 104 | length0_J( this : ref File_obj) : big | ||
| 105 | {#>> | ||
| 106 | (ok, dir) := sys->stat(this.path.str); | ||
| 107 | if(ok >= 0) | ||
| 108 | return (big dir.length); | ||
| 109 | return (big 0); | ||
| 110 | }#<< | ||
| 111 | |||
| 112 | mkdir0_Z( this : ref File_obj) : int | ||
| 113 | {#>> | ||
| 114 | (ok, nil) := sys->stat(this.path.str); | ||
| 115 | if(ok >= 0) | ||
| 116 | return (FALSE); | ||
| 117 | fd := sys->create(this.path.str, sys->OREAD, sys->CHDIR + 8r777); | ||
| 118 | if(fd == nil) | ||
| 119 | return (FALSE); | ||
| 120 | fd = nil; | ||
| 121 | return (TRUE); | ||
| 122 | }#<< | ||
| 123 | |||
| 124 | renameTo0_rFile_Z( this : ref File_obj, p0 : ref File_obj) : int | ||
| 125 | {#>> | ||
| 126 | # this routine is based on the appl/cmd/mv command in inferno.... | ||
| 127 | |||
| 128 | #put from and to file names into complete path names | ||
| 129 | frompath := pathname(this.path.str); | ||
| 130 | topath := pathname(p0.path.str); | ||
| 131 | |||
| 132 | #seperate the name of the file from the directory the files reside in | ||
| 133 | (fromdir, fromname) := split(frompath); | ||
| 134 | (todir, toname) := split(topath); | ||
| 135 | |||
| 136 | (i, dirf) := sys->stat(this.path.str); | ||
| 137 | if ( i == -1 ) | ||
| 138 | return FALSE; | ||
| 139 | |||
| 140 | # are the files in the same directory???? | ||
| 141 | if ( samefile(fromdir, todir) ) { | ||
| 142 | if ( toname == fromname ) | ||
| 143 | return TRUE; | ||
| 144 | (j, dirt) := sys->stat(p0.path.str); | ||
| 145 | if ( j == 0 ) { | ||
| 146 | if ( (dirf.mode | dirt.mode) & Sys->CHDIR ) | ||
| 147 | return FALSE; | ||
| 148 | hardremove(topath); | ||
| 149 | } | ||
| 150 | dirf.name = toname; | ||
| 151 | if ( sys->wstat(this.path.str, dirf) >= 0 ) | ||
| 152 | return TRUE; | ||
| 153 | } | ||
| 154 | #open the from file.... | ||
| 155 | if ( (fdf := sys->open(this.path.str, Sys->OREAD)) == nil ) | ||
| 156 | return FALSE; | ||
| 157 | |||
| 158 | #open the to file.... | ||
| 159 | if ( (fdt := sys->create(p0.path.str, Sys->OWRITE, dirf.mode)) == nil ) | ||
| 160 | return FALSE;; | ||
| 161 | |||
| 162 | #copy data from from file to to file.... | ||
| 163 | if ( (stat := copy1(fdf, fdt)) == TRUE ) { | ||
| 164 | fdf = nil; | ||
| 165 | if ( sys->remove(this.path.str) < 0 ) | ||
| 166 | return FALSE; | ||
| 167 | } | ||
| 168 | else { | ||
| 169 | fdt = nil; | ||
| 170 | sys->remove(p0.path.str); | ||
| 171 | } | ||
| 172 | return stat; | ||
| 173 | }#<< | ||
| 174 | |||
| 175 | delete0_Z( this : ref File_obj) : int | ||
| 176 | {#>> | ||
| 177 | if (isFile0_Z(this) == TRUE) | ||
| 178 | return (remove0_b(this)); | ||
| 179 | return (FALSE); | ||
| 180 | }#<< | ||
| 181 | |||
| 182 | rmdir0_Z( this : ref File_obj) : int | ||
| 183 | {#>> | ||
| 184 | if (isDirectory0_Z(this) == TRUE) | ||
| 185 | return (remove0_b(this)); | ||
| 186 | return (FALSE); | ||
| 187 | }#<< | ||
| 188 | |||
| 189 | list0_aString( this : ref File_obj) : JArrayJString | ||
| 190 | {#>> | ||
| 191 | fd := sys->open(this.path.str, sys->OREAD); | ||
| 192 | if(fd == nil) { | ||
| 193 | return nil; | ||
| 194 | } | ||
| 195 | |||
| 196 | dir_array := array[200] of Sys->Dir; | ||
| 197 | n := 0; | ||
| 198 | for(;;){ | ||
| 199 | if(len dir_array - n == 0){ | ||
| 200 | # expand dir_array | ||
| 201 | nd := array[2 * len dir_array] of Sys->Dir; | ||
| 202 | nd[0:] = dir_array; | ||
| 203 | dir_array = nd; | ||
| 204 | } | ||
| 205 | nr := sys->dirread(fd, dir_array[n:]); | ||
| 206 | if(nr < 0) | ||
| 207 | return nil; | ||
| 208 | if(nr == 0) | ||
| 209 | break; | ||
| 210 | n += nr; | ||
| 211 | } | ||
| 212 | file_name := array[n] of string; | ||
| 213 | |||
| 214 | for(i := 0; i < n; i++) | ||
| 215 | file_name[i] = dir_array[i].name; | ||
| 216 | |||
| 217 | return (jni->MkAString(file_name)); | ||
| 218 | }#<< | ||
| 219 | |||
| 220 | canonPath_rString_rString( this : ref File_obj, p0 : JString) : JString | ||
| 221 | {#>> | ||
| 222 | TRACE_1 := this; # to remove warning msg at compile time; | ||
| 223 | |||
| 224 | path := pathname(p0.str) + "/"; | ||
| 225 | |||
| 226 | regex := load Regex Regex->PATH; | ||
| 227 | if ( regex == nil ) | ||
| 228 | jni->InitError( sys->sprint( "java.io.File: could not load %s: %r", Regex->PATH ) ); | ||
| 229 | |||
| 230 | path = squeeze_out(regex, regex->compile("//", 0), "/", path); | ||
| 231 | path = squeeze_out(regex, regex->compile("/\\./", 0), "/", path); | ||
| 232 | path = squeeze_out(regex, regex->compile("/[^/]+/\\.\\./", 0), "/", path); | ||
| 233 | |||
| 234 | if ( len path > 1 && path[len path - 1] == '/' ) | ||
| 235 | path = path[0:len path - 1]; | ||
| 236 | |||
| 237 | return (jni->NewString( path)); | ||
| 238 | }#<< | ||
| 239 | |||
| 240 | isAbsolute_Z( this : ref File_obj) : int | ||
| 241 | {#>> | ||
| 242 | if (str_mod->prefix("/", this.path.str)) | ||
| 243 | return (TRUE); | ||
| 244 | return (FALSE); | ||
| 245 | }#<< | ||
| 246 | |||
| 247 | |||
| 248 | |||
| 249 | |||
| 250 | |||
| 251 | remove0_b( this : ref File_obj) : int | ||
| 252 | { | ||
| 253 | if (sys->remove(this.path.str) < 0) | ||
| 254 | return (FALSE); | ||
| 255 | return (TRUE); | ||
| 256 | } | ||
| 257 | |||
| 258 | copy1(fdf, fdt : ref Sys->FD): int | ||
| 259 | { | ||
| 260 | n : int; | ||
| 261 | buf := array[8192] of byte; | ||
| 262 | |||
| 263 | for ( ; ; ) { | ||
| 264 | n = sys->read(fdf, buf, len buf); | ||
| 265 | if (n<=0) | ||
| 266 | break; | ||
| 267 | n1 := sys->write(fdt, buf, n); | ||
| 268 | if ( n1 != n ) | ||
| 269 | return FALSE; | ||
| 270 | } | ||
| 271 | if ( n < 0 ) | ||
| 272 | return FALSE; | ||
| 273 | return TRUE; | ||
| 274 | } | ||
| 275 | |||
| 276 | #convert a file name into complete path name | ||
| 277 | pathname(p : string) : string | ||
| 278 | { | ||
| 279 | if ( p == nil || p[0] == '/' ) | ||
| 280 | return p; | ||
| 281 | gwd := load Workdir Workdir->PATH; | ||
| 282 | if ( gwd == nil ) | ||
| 283 | jni->InitError( sys->sprint( "java.io.File: could not load %s: %r", Workdir->PATH ) ); | ||
| 284 | |||
| 285 | wd := gwd->init(); | ||
| 286 | if ( len wd == 0 ) | ||
| 287 | return p; | ||
| 288 | return wd + "/" + p; | ||
| 289 | } | ||
| 290 | |||
| 291 | #pull out the name of the file only | ||
| 292 | split(name : string): (string,string) | ||
| 293 | { | ||
| 294 | (d,t) := str_mod->splitr(name, "/"); | ||
| 295 | if ( d != nil ) | ||
| 296 | return(d,t); | ||
| 297 | else if ( name == ".." ) | ||
| 298 | return("../","."); | ||
| 299 | else | ||
| 300 | return("./",name); | ||
| 301 | } | ||
| 302 | |||
| 303 | # return TRUE if file a is same as file b | ||
| 304 | samefile(a,b : string): int | ||
| 305 | { | ||
| 306 | if ( a == b ) | ||
| 307 | return 1; | ||
| 308 | (i, file_a) := sys->stat(a); | ||
| 309 | (j, file_b) := sys->stat(b); | ||
| 310 | if ( i < 0 || j < 0 ) | ||
| 311 | return 0; | ||
| 312 | i = ((file_a.qid.path == file_b.qid.path) && (file_a.qid.vers == file_b.qid.vers) && | ||
| 313 | (file_a.dev == file_b.dev) && (file_a.dtype == file_b.dtype)); | ||
| 314 | return i; | ||
| 315 | } | ||
| 316 | |||
| 317 | hardremove(a: string) | ||
| 318 | { | ||
| 319 | do; while ( sys->remove(a) != -1 ); | ||
| 320 | } | ||
| 321 | |||
| 322 | squeeze_out(r : Regex, pat : Regex->Re, repl, str :string) : string | ||
| 323 | { | ||
| 324 | while ( str_mod->prefix("/../", str) ) | ||
| 325 | str = str[3:]; | ||
| 326 | a := r->execute(pat, str); | ||
| 327 | if (a == nil) | ||
| 328 | return str; | ||
| 329 | (beg, end) := a[0]; | ||
| 330 | str = str[0:beg] + repl + str[end:]; | ||
| 331 | return squeeze_out(r, pat, repl, str); | ||
| 332 | } | ||