2 do_truncate(TARG,arg,gimme,arglast)
8 register ARRAY *ary = stack;
9 register int sp = arglast[0] + 1;
10 off_t len = (off_t)str_gnum(ary->ary_array[sp+1]);
14 #if defined(HAS_TRUNCATE) || defined(HAS_CHSIZE)
16 if ((arg[1].arg_type & A_MASK) == A_WORD) {
17 tmpstab = arg[1].arg_ptr.arg_stab;
18 if (!stab_io(tmpstab) || !stab_io(tmpstab)->ifp ||
19 ftruncate(fileno(stab_io(tmpstab)->ifp), len) < 0)
22 else if (truncate(str_get(ary->ary_array[sp]), len) < 0)
25 if ((arg[1].arg_type & A_MASK) == A_WORD) {
26 tmpstab = arg[1].arg_ptr.arg_stab;
27 if (!stab_io(tmpstab) || !stab_io(tmpstab)->ifp ||
28 chsize(fileno(stab_io(tmpstab)->ifp), len) < 0)
34 if ((tmpfd = open(str_get(ary->ary_array[sp]), 0)) < 0)
37 if (chsize(tmpfd, len) < 0)
45 str_sset(TARG,&str_yes);
47 str_sset(TARG,&str_undef);
49 ary->ary_array[sp] = TARG;
52 fatal("truncate not implemented");