git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git]
/
Usermode
/
Libraries
/
liburi.so_src
/
main.c
diff --git
a/Usermode/Libraries/liburi.so_src/main.c
b/Usermode/Libraries/liburi.so_src/main.c
index
2d785f3
..
e8f8dea
100644
(file)
--- a/
Usermode/Libraries/liburi.so_src/main.c
+++ b/
Usermode/Libraries/liburi.so_src/main.c
@@
-32,11
+32,12
@@
void URI_Close(tURIFile *File);
size_t URI_file_Read(int Handle, size_t Bytes, void *Buffer);
size_t URI_file_Write(int Handle, size_t Bytes, void *Buffer);
void URI_file_Close(int Handle);
size_t URI_file_Read(int Handle, size_t Bytes, void *Buffer);
size_t URI_file_Write(int Handle, size_t Bytes, void *Buffer);
void URI_file_Close(int Handle);
+off_t URI_file_GetSize(int Handle);
// === CONSTANTS ===
// Builtin URI protocol handlers
tURIHandler caBuiltinHandlers[] = {
// === CONSTANTS ===
// Builtin URI protocol handlers
tURIHandler caBuiltinHandlers[] = {
- {"file", 0, URI_file_Open, URI_file_Close, URI_file_Read, URI_file_Write}
+ {"file", 0, URI_file_Open, URI_file_Close, URI_file_Read, URI_file_Write
, URI_file_GetSize
}
};
#define NUM_BUILTIN_HANDLERS (sizeof(caBuiltinHandlers)/sizeof(caBuiltinHandlers[0]))
};
#define NUM_BUILTIN_HANDLERS (sizeof(caBuiltinHandlers)/sizeof(caBuiltinHandlers[0]))
@@
-55,7
+56,7
@@
tURI *URI_Parse(const char *String)
if(!String) return NULL;
protolen = 0;
if(!String) return NULL;
protolen = 0;
- while( isalpha(*tmp)
)
tmp++, protolen++;
+ while( isalpha(*tmp)
|| isdigit(*tmp) )
tmp++, protolen++;
// true URI
if(tmp[0] == ':' && tmp[1] == '/' && tmp[2] == '/')
// true URI
if(tmp[0] == ':' && tmp[1] == '/' && tmp[2] == '/')
@@
-75,7
+76,7
@@
tURI *URI_Parse(const char *String)
if( *tmp == '[' )
{
tmp ++;
if( *tmp == '[' )
{
tmp ++;
- while( *tmp != ']' ) {
+ while( *tmp
&& *tmp
!= ']' ) {
ret->Host[hostlen] = *tmp;
tmp ++;
hostlen ++;
ret->Host[hostlen] = *tmp;
tmp ++;
hostlen ++;
@@
-86,7
+87,7
@@
tURI *URI_Parse(const char *String)
// IPv4/DNS
else
{
// IPv4/DNS
else
{
- while( *tmp != '/' && *tmp != ':' )
+ while( *tmp
&& *tmp
!= '/' && *tmp != ':' )
{
ret->Host[hostlen] = *tmp;
tmp ++;
{
ret->Host[hostlen] = *tmp;
tmp ++;
@@
-119,6
+120,7
@@
tURI *URI_Parse(const char *String)
else {
ret->PortStr = NULL;
ret->PortNum = -1;
else {
ret->PortStr = NULL;
ret->PortNum = -1;
+ portlen = 0;
}
if(*tmp == '\0')
}
if(*tmp == '\0')
@@
-225,6
+227,19
@@
tURIFile *URI_Open(int Mode, tURI *URI)
return ret;
}
return ret;
}
+int URI_GetSize(tURIFile *File, size_t *Size)
+{
+ if( !File || !Size ) return -1;
+
+ if( File->Handler->GetSize )
+ {
+ *Size = File->Handler->GetSize(File->Handle);
+ return 0; // Success
+ }
+
+ return 1; // Size not avaliable
+}
+
/**
* \brief Read from a URI file
*/
/**
* \brief Read from a URI file
*/
@@
-235,7
+250,7
@@
size_t URI_Read(tURIFile *File, size_t Bytes, void *Buffer)
size_t tmp;
printf("URI_Read(File=%p, Bytes=%u, Buffer=%p)\n",
size_t tmp;
printf("URI_Read(File=%p, Bytes=%u, Buffer=%p)\n",
- File, Bytes, Buffer);
+ File,
(unsigned int)
Bytes, Buffer);
if(!File || !Buffer) return -1;
if(Bytes == 0) return 0;
if(!File || !Buffer) return -1;
if(Bytes == 0) return 0;
@@
-301,24
+316,33
@@
int URI_file_Open(char *Host, int Port, char *Path, int Mode)
if(Mode & URI_MODE_READ) smode |= OPENFLAG_READ;
if(Mode & URI_MODE_WRITE) smode |= OPENFLAG_WRITE;
if(Mode & URI_MODE_READ) smode |= OPENFLAG_READ;
if(Mode & URI_MODE_WRITE) smode |= OPENFLAG_WRITE;
-
printf("URI_file_Open: open('%s', 0x%x)\n", Path, smode);
+
//
printf("URI_file_Open: open('%s', 0x%x)\n", Path, smode);
{
int ret;
{
int ret;
- ret =
o
pen(Path, smode);
+ ret =
_SysO
pen(Path, smode);
return ret;
}
}
size_t URI_file_Read(int Handle, size_t Bytes, void *Buffer)
{
return ret;
}
}
size_t URI_file_Read(int Handle, size_t Bytes, void *Buffer)
{
-
printf("URI_file_Read: (Handle=%i, Bytes=%i, Buffer=%p
)\n",
-
Handle, Bytes, Buffer
);
- return
read(Handle, Bytes, Buffer
);
+
// printf("URI_file_Read: (Handle=%i, Buffer=%p, Bytes=%i
)\n",
+
// Handle, Buffer, (int)Bytes
);
+ return
_SysRead(Handle, Buffer, Bytes
);
}
size_t URI_file_Write(int Handle, size_t Bytes, void *Buffer)
{
}
size_t URI_file_Write(int Handle, size_t Bytes, void *Buffer)
{
- return
write(Handle, Bytes, Buffer
);
+ return
_SysWrite(Handle, Buffer, Bytes
);
}
void URI_file_Close(int Handle)
{
}
void URI_file_Close(int Handle)
{
- close(Handle);
+ _SysClose(Handle);
+}
+off_t URI_file_GetSize(int Handle)
+{
+ uint64_t curpos = _SysTell(Handle);
+ off_t ret;
+ _SysSeek(Handle, 0, SEEK_END);
+ ret = _SysTell(Handle);
+ _SysSeek(Handle, curpos, SEEK_SET);
+ return ret;
}
}
UCC
git Repository :: git.ucc.asn.au