forked from KolibriOS/kolibrios
bugfixing
git-svn-id: svn://kolibrios.org@6412 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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:;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int format_print(char *dest, size_t maxlen, const char *fmt,va_list argp);
|
||||
|
||||
|
||||
@@ -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++;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <kolibrisys.h>
|
||||
|
||||
Reference in New Issue
Block a user