Subversion Repositories Kolibri OS

Rev

Rev 145 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 145 Rev 610
Line 1... Line 1...
1
#include "stdio.h"
1
#include "stdio.h"
2
int fputc(int c,FILE* file)
2
int fputc(int c,FILE* file)
3
{
3
{
4
	void* p;
4
	dword res;
-
 
5
 
5
	if ((file->mode & 3)==FILE_OPEN_READ)
6
	if ((file->mode & 3)==FILE_OPEN_READ) return EOF;
-
 
7
 
6
		return EOF;
8
	file->buffer[0]=c;
7
	if ((file->mode & 3)==FILE_OPEN_APPEND)
9
	if ((file->mode & 3)==FILE_OPEN_APPEND)
8
		file->filepos=file->filesize;
-
 
9
	if (file->filepos==file->filesize)
-
 
10
	{
10
	{
-
 
11
		file->filepos=file->filesize;
11
		file->filesize++;
12
		file->filesize++;
12
		if (file->filesize>file->buffersize)
-
 
13
		{
-
 
14
		  p=realloc(file->buffer,file->filesize+file->filesize<<1);
13
		res=_ksys_appendtofile(file->filename,file->filepos,1,file->buffer);
15
		  if (p==0)
14
		if (res!=0) return(res);
16
		  	return EOF;
15
		file->filepos++;
17
		  file->buffersize=file->filesize+file->filesize<<1;
-
 
18
		  file->buffer=p;
16
		return(0);
19
		}
17
	}
-
 
18
	if ((file->mode & 3)==FILE_OPEN_WRITE)
-
 
19
	{
-
 
20
		if (file->filepos==0)
-
 
21
		{	//file not craeted 
-
 
22
			res=_ksys_rewritefile(file->filename,1,file->buffer);
-
 
23
			if (res!=0) return(res);
-
 
24
			file->filepos++;
-
 
25
			return 0;
20
	}
26
		}
-
 
27
		else
21
	file->buffer[file->filepos]=(char)c;
28
		{	//file craeted and need append one byte 
-
 
29
			res=_ksys_appendtofile(file->filename,file->filepos,1,file->buffer);
-
 
30
			if (res!=0) return(res);
22
	file->filepos++;
31
			file->filepos++;
23
	return 0;
32
			return 0;
24
}
33
		}
-
 
34
	}
-
 
35
}