repo2/firmware_legacy/sockit/linuxfile.c
309 | markw | #include <stdio.h>
|
|
#include "linuxfile.h"
|
|||
#include "simplefile.h"
|
|||
#include <sys/stat.h>
|
|||
#include <unistd.h>
|
|||
char const * file_of(char const * path)
|
|||
{
|
|||
char const * start = path + strlen(path);
|
|||
while (start!=path)
|
|||
{
|
|||
--start;
|
|||
if (*start == '/')
|
|||
{
|
|||
++start;
|
|||
break;
|
|||
}
|
|||
}
|
|||
return start;
|
|||
}
|
|||
void dir_of(char * dir, char const * path)
|
|||
{
|
|||
char const * end = file_of(path);
|
|||
if (end != path)
|
|||
{
|
|||
int len = end-path;
|
|||
while (len--)
|
|||
{
|
|||
*dir++ = *path++;
|
|||
}
|
|||
--dir;
|
|||
}
|
|||
*dir = '\0';
|
|||
return;
|
|||
}
|
|||
int file_struct_size()
|
|||
{
|
|||
return sizeof(struct SimpleFile);
|
|||
}
|
|||
void file_init(struct SimpleFile * file)
|
|||
{
|
|||
file->file = 0;
|
|||
file->name[0] = '\0';
|
|||
file->path[0] = '\0';
|
|||
}
|
|||
char const * file_path(struct SimpleFile * file)
|
|||
{
|
|||
return &file->path[0];
|
|||
}
|
|||
char const * file_name(struct SimpleFile * file)
|
|||
{
|
|||
return &file->name[0];
|
|||
}
|
|||
enum SimpleFileStatus file_read(struct SimpleFile * file, void * buffer, int bytes, int * bytesread)
|
|||
{
|
|||
*bytesread = fread(buffer,1,bytes,file->file);
|
|||
return SimpleFile_OK;
|
|||
}
|
|||
enum SimpleFileStatus file_seek(struct SimpleFile * file, int offsetFromStart)
|
|||
{
|
|||
//printf("file_seek:%d\n",offsetFromStart);
|
|||
fseek(file->file,offsetFromStart,SEEK_SET);
|
|||
return SimpleFile_OK;
|
|||
}
|
|||
int file_size(struct SimpleFile * file)
|
|||
{
|
|||
/* int pos = ftell(file->file);
|
|||
fseek(file->file,0L,SEEK_SEND);
|
|||
int size = ftell(file->file);
|
|||
fseek(file->file,pos,SEEK_SET);*/
|
|||
struct stat buf;
|
|||
fstat(fileno(file->file),&buf);
|
|||
return buf.st_size;
|
|||
}
|
|||
int file_readonly(struct SimpleFile * file)
|
|||
{
|
|||
return (0==access(file->path,W_OK)) ? 0 : 1;
|
|||
}
|
|||
enum SimpleFileStatus file_write(struct SimpleFile * file, void * buffer, int bytes, int * byteswritten)
|
|||
{
|
|||
//printf("file_write:%d\n",bytes);
|
|||
*byteswritten = fwrite(buffer,1,bytes,file->file);
|
|||
//printf("written:%d\n",*byteswritten);
|
|||
return SimpleFile_OK;
|
|||
}
|
|||
enum SimpleFileStatus file_write_flush()
|
|||
{
|
|||
return SimpleFile_OK;
|
|||
}
|