Project

General

Profile

#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;
}

(4-4/7)