~ubuntu-branches/ubuntu/dapper/fpc/dapper

« back to all changes in this revision

Viewing changes to rtl/linux/osmain.inc

  • Committer: Bazaar Package Importer
  • Author(s): Carlos Laviola
  • Date: 2005-05-30 11:59:10 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20050530115910-x5pbzm4qqta4i94h
Tags: 2.0.0-2
debian/fp-compiler.postinst.in: forgot to reapply the patch that
correctly creates the slave link to pc(1).  (Closes: #310907)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
{
2
 
    $Id: osmain.inc,v 1.18 2004/05/16 18:51:20 peter Exp $
3
 
    This file is part of the Free Pascal run time library.
4
 
 
5
 
    POSIX Interface to the system unit
6
 
 
7
 
    See the file COPYING.FPC, included in this distribution,
8
 
    for details about the copyright.
9
 
 
10
 
    This is the core of the system unit *nix systems (now FreeBSD
11
 
     and Unix).
12
 
 
13
 
    This program is distributed in the hope that it will be useful,
14
 
    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
 
 
17
 
 **********************************************************************}
18
 
 
19
 
const
20
 
     { Default creation mode for directories and files }
21
 
 
22
 
     { read/write permission for everyone }
23
 
     MODE_OPEN = S_IWUSR OR S_IRUSR OR
24
 
                 S_IWGRP OR S_IRGRP OR
25
 
                 S_IWOTH OR S_IROTH;
26
 
     { read/write search permission for everyone }
27
 
     MODE_MKDIR = MODE_OPEN OR
28
 
                 S_IXUSR OR S_IXGRP OR S_IXOTH;
29
 
 
30
 
 
31
 
{*****************************************************************************
32
 
                       Misc. System Dependent Functions
33
 
*****************************************************************************}
34
 
 
35
 
procedure haltproc(e:longint);cdecl;external name '_haltproc';
36
 
 
37
 
procedure System_exit;
38
 
begin
39
 
  haltproc(ExitCode);
40
 
End;
41
 
 
42
 
 
43
 
Function ParamCount: Longint;
44
 
Begin
45
 
  Paramcount:=argc-1
46
 
End;
47
 
 
48
 
 
49
 
function BackPos(c:char; const s: shortstring): integer;
50
 
var
51
 
 i: integer;
52
 
Begin
53
 
  for i:=length(s) downto 0 do
54
 
    if s[i] = c then break;
55
 
  if i=0 then
56
 
    BackPos := 0
57
 
  else
58
 
    BackPos := i;
59
 
end;
60
 
 
61
 
 
62
 
 { variable where full path and filename and executable is stored }
63
 
 { is setup by the startup of the system unit.                    }
64
 
var
65
 
 execpathstr : shortstring;
66
 
 
67
 
function paramstr(l: longint) : string;
68
 
 var
69
 
  s: string;
70
 
  s1: string;
71
 
 begin
72
 
   { stricly conforming POSIX applications  }
73
 
   { have the executing filename as argv[0] }
74
 
   if l=0 then
75
 
     begin
76
 
       paramstr := execpathstr;
77
 
     end
78
 
   else
79
 
     paramstr:=strpas(argv[l]);
80
 
 end;
81
 
 
82
 
Procedure Randomize;
83
 
Begin
84
 
  randseed:=longint(Fptime(nil));
85
 
End;
86
 
 
87
 
 
88
 
{*****************************************************************************
89
 
                              Heap Management
90
 
*****************************************************************************}
91
 
 
92
 
var
93
 
  _HEAP : longint;external name 'HEAP';
94
 
  _HEAPSIZE : longint;external name 'HEAPSIZE';
95
 
 
96
 
{$ifndef SYSTEM_HAS_GETHEAPSTART}
97
 
function getheapstart:pointer;
98
 
begin
99
 
  getheapstart := @_HEAP;
100
 
end;
101
 
{$endif}
102
 
 
103
 
 
104
 
{$ifndef SYSTEM_HAS_GETHEAPSIZE}
105
 
function getheapsize:longint;
106
 
begin
107
 
  getheapsize := _HEAPSIZE;
108
 
end;
109
 
{$endif}
110
 
 
111
 
 
112
 
{*****************************************************************************
113
 
                          Low Level File Routines
114
 
*****************************************************************************}
115
 
 
116
 
{
117
 
  The lowlevel file functions should take care of setting the InOutRes to the
118
 
  correct value if an error has occured, else leave it untouched
119
 
}
120
 
 
121
 
Function PosixToRunError  (PosixErrno : longint) : longint;
122
 
{
123
 
  Convert ErrNo error to the correct Inoutres value
124
 
}
125
 
 
126
 
begin
127
 
  if PosixErrNo=0 then { Else it will go through all the cases }
128
 
   exit(0);
129
 
  case PosixErrNo of
130
 
   ESysENFILE,
131
 
   ESysEMFILE : Inoutres:=4;
132
 
   ESysENOENT : Inoutres:=2;
133
 
    ESysEBADF : Inoutres:=6;
134
 
   ESysENOMEM,
135
 
   ESysEFAULT : Inoutres:=217;
136
 
   ESysEINVAL : Inoutres:=218;
137
 
    ESysEPIPE,
138
 
    ESysEINTR,
139
 
      ESysEIO,
140
 
   ESysEAGAIN,
141
 
   ESysENOSPC : Inoutres:=101;
142
 
 ESysENAMETOOLONG : Inoutres := 3;
143
 
    ESysEROFS,
144
 
   ESysEEXIST,
145
 
   ESysENOTEMPTY,
146
 
   ESysEACCES : Inoutres:=5;
147
 
   ESysEISDIR : InOutRes:=5;
148
 
  else
149
 
    begin
150
 
       InOutRes := Integer(PosixErrno);
151
 
    end;
152
 
  end;
153
 
 PosixToRunError:=InOutRes;
154
 
end;
155
 
 
156
 
 
157
 
Function Errno2InoutRes : longint;
158
 
begin
159
 
  Errno2InoutRes:=PosixToRunError(getErrno);
160
 
  InoutRes:=Errno2InoutRes;
161
 
end;
162
 
 
163
 
 
164
 
Procedure Do_Close(Handle:thandle);
165
 
Begin
166
 
  Fpclose(cint(Handle));
167
 
End;
168
 
 
169
 
 
170
 
Procedure Do_Erase(p:pchar);
171
 
var
172
 
  fileinfo : stat;
173
 
Begin
174
 
  { verify if the filename is actually a directory }
175
 
  { if so return error and do nothing, as defined  }
176
 
  { by POSIX                                       }
177
 
  if Fpstat(p,fileinfo)<0 then
178
 
   begin
179
 
     Errno2Inoutres;
180
 
     exit;
181
 
   end;
182
 
  if FpS_ISDIR(fileinfo.st_mode) then
183
 
   begin
184
 
     InOutRes := 2;
185
 
     exit;
186
 
   end;
187
 
  if Fpunlink(p)<0 then
188
 
   Errno2Inoutres
189
 
  Else
190
 
   InOutRes:=0;
191
 
End;
192
 
 
193
 
{ truncate at a given position }
194
 
procedure do_truncate (handle:thandle;fpos:longint);
195
 
begin
196
 
  { should be simulated in cases where it is not }
197
 
  { available.                                   }
198
 
  If Fpftruncate(handle,fpos)<0 Then
199
 
   Errno2Inoutres
200
 
  Else
201
 
   InOutRes:=0;
202
 
end;
203
 
 
204
 
 
205
 
Procedure Do_Rename(p1,p2:pchar);
206
 
Begin
207
 
  If Fprename(p1,p2)<0 Then
208
 
   Errno2Inoutres
209
 
  Else
210
 
   InOutRes:=0;
211
 
End;
212
 
 
213
 
 
214
 
Function Do_Write(Handle:thandle;Addr:Pointer;Len:SizeInt):SizeInt;
215
 
Begin
216
 
  repeat
217
 
    Do_Write:=Fpwrite(Handle,addr,len);
218
 
  until (Do_Write>=0) or (getErrNo<>ESysEINTR);
219
 
  If Do_Write<0 Then
220
 
   Begin
221
 
    Errno2InOutRes;
222
 
    Do_Write:=0;
223
 
   End
224
 
  else
225
 
   InOutRes:=0;
226
 
End;
227
 
 
228
 
 
229
 
Function Do_Read(Handle:thandle;Addr:Pointer;Len:SizeInt):SizeInt;
230
 
Begin
231
 
  repeat
232
 
    Do_Read:=Fpread(Handle,addr,len);
233
 
  until (Do_Read>=0) or (getErrNo<>ESysEINTR);
234
 
  If Do_Read<0 Then
235
 
   Begin
236
 
    Errno2InOutRes;
237
 
    Do_Read:=0;
238
 
   End
239
 
  else
240
 
   InOutRes:=0;
241
 
End;
242
 
 
243
 
 
244
 
function Do_FilePos(Handle: thandle):longint;
245
 
Begin
246
 
  do_FilePos:=Fplseek(Handle, 0, SEEK_CUR);
247
 
  If Do_FilePos<0 Then
248
 
    Errno2InOutRes
249
 
  else
250
 
   InOutRes:=0;
251
 
End;
252
 
 
253
 
 
254
 
Procedure Do_Seek(Handle:thandle;Pos:Longint);
255
 
Begin
256
 
  If Fplseek(Handle, pos, SEEK_SET)<0 Then
257
 
   Errno2Inoutres
258
 
  Else
259
 
   InOutRes:=0;
260
 
End;
261
 
 
262
 
 
263
 
Function Do_SeekEnd(Handle:thandle): Longint;
264
 
begin
265
 
  Do_SeekEnd:=Fplseek(Handle,0,SEEK_END);
266
 
  If Do_SeekEnd<0 Then
267
 
   Errno2Inoutres
268
 
  Else
269
 
   InOutRes:=0;
270
 
end;
271
 
 
272
 
 
273
 
Function Do_FileSize(Handle:thandle): Longint;
274
 
var
275
 
  Info : Stat;
276
 
  Ret  : Longint;
277
 
Begin
278
 
  Ret:=Fpfstat(handle,info);
279
 
  If Ret=0 Then
280
 
   Do_FileSize:=Info.st_size
281
 
  else
282
 
   Do_FileSize:=0;
283
 
  If Ret<0 Then
284
 
   Errno2InOutRes
285
 
  Else
286
 
   InOutRes:=0;
287
 
End;
288
 
 
289
 
 
290
 
Procedure Do_Open(var f;p:pchar;flags:longint);
291
 
{
292
 
  FileRec and textrec have both Handle and mode as the first items so
293
 
  they could use the same routine for opening/creating.
294
 
  when (flags and $100)   the file will be append
295
 
  when (flags and $1000)  the file will be truncate/rewritten
296
 
  when (flags and $10000) there is no check for close (needed for textfiles)
297
 
}
298
 
var
299
 
  oflags : cint;
300
 
Begin
301
 
{ close first if opened }
302
 
  if ((flags and $10000)=0) then
303
 
   begin
304
 
     case FileRec(f).mode of
305
 
      fminput,fmoutput,fminout : Do_Close(FileRec(f).Handle);
306
 
      fmclosed : ;
307
 
     else
308
 
      begin
309
 
        inoutres:=102; {not assigned}
310
 
        exit;
311
 
      end;
312
 
     end;
313
 
   end;
314
 
{ reset file Handle }
315
 
  FileRec(f).Handle:=UnusedHandle;
316
 
{ We do the conversion of filemodes here, concentrated on 1 place }
317
 
  case (flags and 3) of
318
 
   0 : begin
319
 
         oflags :=O_RDONLY;
320
 
         FileRec(f).mode:=fminput;
321
 
       end;
322
 
   1 : begin
323
 
         oflags :=O_WRONLY;
324
 
         FileRec(f).mode:=fmoutput;
325
 
       end;
326
 
   2 : begin
327
 
         oflags :=O_RDWR;
328
 
         FileRec(f).mode:=fminout;
329
 
       end;
330
 
  end;
331
 
  if (flags and $1000)=$1000 then
332
 
   oflags:=oflags or (O_CREAT or O_TRUNC)
333
 
  else
334
 
   if (flags and $100)=$100 then
335
 
    oflags:=oflags or (O_APPEND);
336
 
{ empty name is special }
337
 
  if p[0]=#0 then
338
 
   begin
339
 
     case FileRec(f).mode of
340
 
       fminput :
341
 
         FileRec(f).Handle:=StdInputHandle;
342
 
       fminout, { this is set by rewrite }
343
 
       fmoutput :
344
 
         FileRec(f).Handle:=StdOutputHandle;
345
 
       fmappend :
346
 
         begin
347
 
           FileRec(f).Handle:=StdOutputHandle;
348
 
           FileRec(f).mode:=fmoutput; {fool fmappend}
349
 
         end;
350
 
     end;
351
 
     exit;
352
 
   end;
353
 
{ real open call }
354
 
  FileRec(f).Handle:=Fpopen(p,oflags,MODE_OPEN);
355
 
  if (FileRec(f).Handle<0) and
356
 
     (getErrNo=ESysEROFS) and
357
 
     ((OFlags and O_RDWR)<>0) then
358
 
   begin
359
 
     Oflags:=Oflags and not(O_RDWR);
360
 
     FileRec(f).Handle:=Fpopen(p,oflags,MODE_OPEN);
361
 
   end;
362
 
  If Filerec(f).Handle<0 Then
363
 
   Errno2Inoutres
364
 
  else
365
 
   InOutRes:=0;
366
 
End;
367
 
 
368
 
 
369
 
 
370
 
{*****************************************************************************
371
 
                           Directory Handling
372
 
*****************************************************************************}
373
 
 
374
 
Procedure MkDir(Const s: String);[IOCheck];
375
 
Var
376
 
  Buffer: Array[0..255] of Char;
377
 
Begin
378
 
  If (s='') or (InOutRes <> 0) then
379
 
   exit;
380
 
  Move(s[1], Buffer, Length(s));
381
 
  Buffer[Length(s)] := #0;
382
 
  If Fpmkdir(@buffer, MODE_MKDIR)<0 Then
383
 
   Errno2Inoutres
384
 
  Else
385
 
   InOutRes:=0;
386
 
End;
387
 
 
388
 
Procedure RmDir(Const s: String);[IOCheck];
389
 
Var
390
 
  Buffer: Array[0..255] of Char;
391
 
Begin
392
 
  if (s = '.') then
393
 
    InOutRes := 16;
394
 
  If (s='') or (InOutRes <> 0) then
395
 
   exit;
396
 
  Move(s[1], Buffer, Length(s));
397
 
  Buffer[Length(s)] := #0;
398
 
  If Fprmdir(@buffer)<0 Then
399
 
   Errno2Inoutres
400
 
  Else
401
 
   InOutRes:=0;
402
 
End;
403
 
 
404
 
 
405
 
Procedure ChDir(Const s: String);[IOCheck];
406
 
Var
407
 
  Buffer: Array[0..255] of Char;
408
 
Begin
409
 
  If (s='') or (InOutRes <> 0) then
410
 
   exit;
411
 
  Move(s[1], Buffer, Length(s));
412
 
  Buffer[Length(s)] := #0;
413
 
  If Fpchdir(@buffer)<0 Then
414
 
   Errno2Inoutres
415
 
  Else
416
 
   InOutRes:=0;
417
 
  { file not exists is path not found under tp7 }
418
 
  if InOutRes=2 then
419
 
   InOutRes:=3;
420
 
End;
421
 
 
422
 
procedure getdir(drivenr : byte;var dir : shortstring);
423
 
var
424
 
{$ifndef usegetcwd}
425
 
  cwdinfo      : stat;
426
 
  rootinfo     : stat;
427
 
  thedir,dummy : string[255];
428
 
  dirstream    : pdir;
429
 
  d            : pdirent;
430
 
  name         : string[255];
431
 
  thisdir      : stat;
432
 
  tmp          : string[255];
433
 
{$else}
434
 
  tmp          : array[0..4095] of char;
435
 
{$endif}
436
 
 
437
 
begin
438
 
{$ifdef usegetcwd}
439
 
 if Fpgetcwd(@tmp,10240+512)<>NIL then
440
 
  dir:=pchar(@tmp)
441
 
 else
442
 
  begin
443
 
    dir:='';
444
 
    writeln(geterrno);
445
 
  end;
446
 
{$else}
447
 
  dir:='';
448
 
  thedir:='';
449
 
  dummy:='';
450
 
 
451
 
  { get root directory information }
452
 
  tmp := '/'+#0;
453
 
  if Fpstat(@tmp[1],rootinfo)<0 then
454
 
    Exit;
455
 
  repeat
456
 
    tmp := dummy+'.'+#0;
457
 
    { get current directory information }
458
 
    if Fpstat(@tmp[1],cwdinfo)<0 then
459
 
      Exit;
460
 
    tmp:=dummy+'..'+#0;
461
 
    { open directory stream }
462
 
    { try to find the current inode number of the cwd }
463
 
    dirstream:=Fpopendir(@tmp[1]);
464
 
    if dirstream=nil then
465
 
      exit;
466
 
    repeat
467
 
      name:='';
468
 
      d:=Fpreaddir(dirstream);
469
 
      { no more entries to read ... }
470
 
      if not assigned(d) then
471
 
        break;
472
 
      tmp:=dummy+'../'+strpas(d^.d_name) + #0;
473
 
      if (Fpstat(@tmp[1],thisdir)=0) then
474
 
       begin
475
 
         { found the entry for this directory name }
476
 
         if (cwdinfo.st_dev=thisdir.st_dev) and (cwdinfo.st_ino=thisdir.st_ino) then
477
 
          begin
478
 
            { are the filenames of type '.' or '..' ? }
479
 
            { then do not set the name.               }
480
 
            if (not ((d^.d_name[0]='.') and ((d^.d_name[1]=#0) or
481
 
                    ((d^.d_name[1]='.') and (d^.d_name[2]=#0))))) then
482
 
              name:='/'+strpas(d^.d_name);
483
 
          end;
484
 
       end;
485
 
    until (name<>'');
486
 
    If Fpclosedir(dirstream)<0 THen
487
 
      Exit;
488
 
    thedir:=name+thedir;
489
 
    dummy:=dummy+'../';
490
 
    if ((cwdinfo.st_dev=rootinfo.st_dev) and (cwdinfo.st_ino=rootinfo.st_ino)) then
491
 
      begin
492
 
        if thedir='' then
493
 
          dir:='/'
494
 
        else
495
 
          dir:=thedir;
496
 
        exit;
497
 
      end;
498
 
  until false;
499
 
 {$endif}
500
 
end;
501
 
 
502
 
 
503
 
{*****************************************************************************
504
 
                         SystemUnit Initialization
505
 
*****************************************************************************}
506
 
 
507
 
// signal handler is arch dependant due to processorexception to language
508
 
// exception translation
509
 
 
510
 
{$i sighnd.inc}
511
 
 
512
 
var
513
 
  act: SigActionRec;
514
 
 
515
 
Procedure InstallSignals;
516
 
begin
517
 
  { Initialize the sigaction structure }
518
 
  { all flags and information set to zero }
519
 
  FillChar(act, sizeof(SigActionRec),0);
520
 
  { initialize handler                    }
521
 
  act.sa_handler := signalhandler(@SignalToRunError);
522
 
{$ifdef RTSIGACTION}
523
 
  act.sa_flags:=4
524
 
{$ifdef x86_64}
525
 
    or $4000000
526
 
{$endif x86_64}
527
 
    ;
528
 
{$endif RTSIGACTION}
529
 
  FpSigAction(SIGFPE,@act,nil);
530
 
  FpSigAction(SIGSEGV,@act,nil);
531
 
  FpSigAction(SIGBUS,@act,nil);
532
 
  FpSigAction(SIGILL,@act,nil);
533
 
end;
534
 
 
535
 
procedure SetupCmdLine;
536
 
var
537
 
  bufsize,
538
 
  len,j,
539
 
  size,i : longint;
540
 
  found  : boolean;
541
 
  buf    : pchar;
542
 
 
543
 
  procedure AddBuf;
544
 
  begin
545
 
    reallocmem(cmdline,size+bufsize);
546
 
    move(buf^,cmdline[size],bufsize);
547
 
    inc(size,bufsize);
548
 
    bufsize:=0;
549
 
  end;
550
 
 
551
 
begin
552
 
  GetMem(buf,ARG_MAX);
553
 
  size:=0;
554
 
  bufsize:=0;
555
 
  i:=0;
556
 
  while (i<argc) do
557
 
   begin
558
 
     len:=strlen(argv[i]);
559
 
     if len>ARG_MAX-2 then
560
 
      len:=ARG_MAX-2;
561
 
     found:=false;
562
 
     for j:=1 to len do
563
 
      if argv[i][j]=' ' then
564
 
       begin
565
 
         found:=true;
566
 
         break;
567
 
       end;
568
 
     if bufsize+len>=ARG_MAX-2 then
569
 
      AddBuf;
570
 
     if found then
571
 
      begin
572
 
        buf[bufsize]:='"';
573
 
        inc(bufsize);
574
 
      end;
575
 
     move(argv[i]^,buf[bufsize],len);
576
 
     inc(bufsize,len);
577
 
     if found then
578
 
      begin
579
 
        buf[bufsize]:='"';
580
 
        inc(bufsize);
581
 
      end;
582
 
     if i<argc then
583
 
      buf[bufsize]:=' '
584
 
     else
585
 
      buf[bufsize]:=#0;
586
 
     inc(bufsize);
587
 
     inc(i);
588
 
   end;
589
 
  AddBuf;
590
 
  FreeMem(buf,ARG_MAX);
591
 
end;
592
 
 
593
 
{
594
 
 $Log: osmain.inc,v $
595
 
 Revision 1.18  2004/05/16 18:51:20  peter
596
 
   * use thandle in do_*
597
 
 
598
 
 Revision 1.17  2004/05/01 15:59:17  florian
599
 
   * x86_64 exception handling fixed
600
 
 
601
 
 Revision 1.16  2004/04/27 20:47:00  florian
602
 
   * tried to fix x86-64 signal handling
603
 
 
604
 
 Revision 1.15  2004/04/22 21:16:35  peter
605
 
   * do_write/do_read fix
606
 
 
607
 
 Revision 1.14  2004/03/27 14:33:45  florian
608
 
   * tell sigaction to pass siginfo on arm
609
 
 
610
 
 Revision 1.13  2004/03/10 20:35:33  peter
611
 
   * call _haltproc instead of exit(). This is required for libc linking
612
 
 
613
 
 Revision 1.12  2004/01/01 14:19:55  marco
614
 
  * use_getcwd updates because FPC_USE_LIBC uses that
615
 
 
616
 
 Revision 1.11  2003/12/30 16:26:10  marco
617
 
  * some more fixes. Testing on idefix
618
 
 
619
 
 Revision 1.10  2003/12/21 20:30:49  peter
620
 
   * don't exit in getdir when fpstat gives a failure
621
 
 
622
 
 Revision 1.9  2003/12/14 14:28:36  peter
623
 
   * only check errno if the syscall failed
624
 
 
625
 
 Revision 1.8  2003/11/01 01:58:11  marco
626
 
  * more small fixes.
627
 
 
628
 
 Revision 1.7  2003/10/31 20:36:01  marco
629
 
  * i386 specific fixes that hopefully fix texception4.
630
 
        Only the "generic" signal handler was ported to the unix rtl.
631
 
 
632
 
 Revision 1.6  2003/09/27 12:51:33  peter
633
 
   * fpISxxx macros renamed to C compliant fpS_ISxxx
634
 
 
635
 
 Revision 1.5  2003/05/01 08:05:23  florian
636
 
   * started to make the rtl 64 bit save by introducing SizeInt and SizeUInt (similar to size_t of C)
637
 
 
638
 
 Revision 1.4  2002/12/24 19:45:40  peter
639
 
   * Fix do_erase which was wrong with inoutres setting
640
 
 
641
 
 Revision 1.3  2002/12/23 22:23:43  peter
642
 
   * fixed Getdir to not set Inoutres
643
 
   * broken symlinks are now ignored in getdir instead of aborting
644
 
     the search
645
 
 
646
 
 Revision 1.2  2002/12/18 20:43:27  peter
647
 
   * removed stackcheck, the generic stackcheck is used
648
 
   * fixed return value for error conversion when no error was passed
649
 
 
650
 
 Revision 1.1  2002/12/18 16:43:26  marco
651
 
  * new unix rtl, linux part.....
652
 
 
653
 
 Revision 1.7  2002/11/14 12:18:03  marco
654
 
  * fixed Fptime call to (NIL)
655
 
 
656
 
 Revision 1.6  2002/10/27 17:21:29  marco
657
 
  * Only "difficult" functions + execvp + termios + rewinddir left to do
658
 
 
659
 
 Revision 1.5  2002/10/26 18:27:52  marco
660
 
  * First series POSIX calls commits. Including getcwd.
661
 
 
662
 
 Revision 1.4  2002/09/07 16:01:26  peter
663
 
   * old logs removed and tabs fixed
664
 
 
665
 
 Revision 1.3  2002/08/20 12:50:22  marco
666
 
  * New errno handling. Should be libc compatible.
667
 
 
668
 
 Revision 1.2  2002/08/10 13:42:36  marco
669
 
  * Fixes Posix dir copied to devel branch
670
 
 
671
 
 Revision 1.1.2.18  2002/03/10 11:45:02  carl
672
 
 * InOutRes := 16 with rmdir()
673
 
 * InOutRes := 5 more checking
674
 
 
675
 
 Revision 1.1.2.17  2002/03/03 15:11:51  carl
676
 
 * erase() bugfix (erasing a directory is done via rmdir() only!)
677
 
 
678
 
 Revision 1.1.2.16  2002/02/15 18:13:35  carl
679
 
 * bugfix for paramstr(0)
680
 
 
681
 
}