bugfixing

git-svn-id: svn://kolibrios.org@6412 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
siemargl
2016-04-30 13:50:04 +00:00
parent 2b5de6aa60
commit 9bafc8aa7b
23 changed files with 242 additions and 106 deletions

View File

@@ -128,7 +128,7 @@ FILE* fopen(const char* filename, const char *mode)
res->filesize=0;
res->filepos=0;
res->mode=imode;
res->filename=getfullpath(filename);
res->filename=(char*)getfullpath(filename);
if ((imode==FILE_OPEN_READ) || (imode==FILE_OPEN_APPEND))
{

View File

@@ -414,9 +414,11 @@ int format_print(char *dest, size_t maxlen,const char *fmt0, va_list argp)
flag_unsigned=1;
break;
case 'x':
case 'p':
format_flag=1;
break;
case 'X':
case 'P':
flag_register=1;
format_flag=1;
break;
@@ -451,7 +453,7 @@ int format_print(char *dest, size_t maxlen,const char *fmt0, va_list argp)
{
case 'c':
case 'C':
if ((pos+1)<maxlen)
if ((pos+1)<=maxlen)
{
//*s=(int)va_arg(argp,char*);
*s=*((char *)argp);
@@ -461,97 +463,93 @@ int format_print(char *dest, size_t maxlen,const char *fmt0, va_list argp)
break;
case 's':
case 'S':
str=va_arg(argp,char*);
length=strlen(str);
if ((pos+length)<maxlen)
{
memcpy(s,str,length);
s=s+length;pos=pos+length;
}
break;
str=va_arg(argp,char*);
length=strlen(str);
if (pos + length > maxlen)
length = maxlen - pos;
memcpy(s,str,length);
s=s+length;pos=pos+length;
break;
case 'd':
case 'D':
case 'i':
case 'I':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long*)argp);
//argp=argp+4;
if ((intdigit>0) && (flag_plus==1) && (pos+1<maxlen))
{
*s='+';
s++;
pos++;
}
length=formatted_long_to_string(intdigit,0,buf);
if ((pos+length)<maxlen)
{
memcpy(s,buf,length);
s=s+length;pos=pos+length;
}
break;
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long*)argp);
//argp=argp+4;
if ((intdigit>0) && (flag_plus==1) && (pos+1<=maxlen))
{
*s='+';
s++;
pos++;
}
length=formatted_long_to_string(intdigit,0,buf);
if (pos + length > maxlen)
length = maxlen - pos;
memcpy(s,buf,length);
s=s+length;pos=pos+length;
break;
case 'o':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long int *)argp);
//argp=argp+4;
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long int *)argp);
//argp=argp+4;
length=formatted_octa_to_string(intdigit,0,flag_register,buf);
if ((pos+length)<maxlen)
{
memcpy(s,buf,length);
s=s+length;pos=pos+length;
}
break;
length=formatted_octa_to_string(intdigit,0,flag_register,buf);
if (pos + length > maxlen)
length = maxlen - pos;
memcpy(s,buf,length);
s=s+length;pos=pos+length;
break;
case 'u':
case 'U':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long int);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long int);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
if (flag_unsigned==1) {
if (intdigit<0) {intdigit=-intdigit;}
}
if (flag_unsigned==1) {
if (intdigit<0) {intdigit=-intdigit;}
}
length=formatted_long_to_string(intdigit,0,buf);
if ((pos+length)<maxlen)
{
memcpy(s,buf,length);
s=s+length;pos=pos+length;
}
break;
length=formatted_long_to_string(intdigit,0,buf);
if (pos + length > maxlen)
length = maxlen - pos;
memcpy(s,buf,length);
s=s+length;pos=pos+length;
break;
case 'p':
case 'P':
case 'x':
case 'X':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long int *)argp);
//argp=argp+4;
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long int *)argp);
//argp=argp+4;
length=formatted_hex_to_string(intdigit,0,flag_register,buf);
if ((pos+length)<maxlen)
{
memcpy(s,buf,length);
s=s+length;pos=pos+length;
}
break;
length=formatted_hex_to_string(intdigit,0,flag_register,buf);
if (pos + length > maxlen)
length = maxlen - pos;
memcpy(s,buf,length);
s=s+length;pos=pos+length;
break;
case 'z':
case 'Z':
intdigit=va_arg(argp,size_t);
intdigit=va_arg(argp,size_t);
if (flag_unsigned==1) {
if (intdigit<0) {intdigit=-intdigit;}
}
if (flag_unsigned==1) {
if (intdigit<0) {intdigit=-intdigit;}
}
length=formatted_long_to_string(intdigit,0,buf);
if ((pos+length)<maxlen)
{
memcpy(s,buf,length);
s=s+length;pos=pos+length;
}
break;
length=formatted_long_to_string(intdigit,0,buf);
if (pos + length > maxlen)
length = maxlen - pos;
memcpy(s,buf,length);
s=s+length;pos=pos+length;
break;
default:;
}
@@ -717,10 +715,7 @@ int format_print(char *dest, size_t maxlen,const char *fmt0, va_list argp)
}
else
{
if (*fmt=='\0') {break;}
*s=*fmt;
fmt++;
s++;
if (!(*s++ = *fmt++)) break;
pos++;
}
exit_check:;

View File

@@ -1,4 +1,5 @@
#include <stdio.h>
#include <stdlib.h>
int format_print(char *dest, size_t maxlen, const char *fmt,va_list argp);

View File

@@ -4,7 +4,7 @@ void skipspaces(FILE* file)
int c;
while(1)
{
c=getc(file);
c=fgetc(file);
if (c!=' ' && c!='\r' && c!='\n')
{
ungetc(c,file);
@@ -12,6 +12,7 @@ void skipspaces(FILE* file)
}
}
}
int fscanf(FILE* file,const char* format, ...)
{
int res;
@@ -34,7 +35,7 @@ int fscanf(FILE* file,const char* format, ...)
c=fgetc(file);
if (c!=*format)
{
fungetc(c,file);
ungetc(c,file);
return -1;
}
format++;

View File

@@ -1,11 +1,13 @@
#include <stdio.h>
int fseek(FILE* file,long offset,int origin)
{
fpos_t pos;
if (origin==SEEK_CUR)
offset+=file->filepos;
else if (origin==SEEK_END)
offset+=file->filesize;
else if (origin!=SEEK_SET)
return EOF;
return fsetpos(file,offset);
pos = offset;
return fsetpos(file, &pos);
}

View File

@@ -1,4 +1,4 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <kolibrisys.h>