packvfs
diff src/pvfs.c @ 1:a0b3b6682d92
*slowly* filling in some unimplemented functions
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Mon, 04 Nov 2013 01:01:22 +0200 |
parents | df5e9ee65a50 |
children | dc23ab0545a6 |
line diff
1.1 --- a/src/pvfs.c Fri Aug 02 06:03:38 2013 +0300 1.2 +++ b/src/pvfs.c Mon Nov 04 01:01:22 2013 +0200 1.3 @@ -1,6 +1,7 @@ 1.4 #include <string.h> 1.5 +#include <stdarg.h> 1.6 +#include <assert.h> 1.7 #include <alloca.h> 1.8 -#include <assert.h> 1.9 #include "pvfs.h" 1.10 #include "vnode.h" 1.11 1.12 @@ -23,17 +24,18 @@ 1.13 1.14 /* then locate the target vnode (if it exists) */ 1.15 if(!(destnode = vnode_lookup(target))) { 1.16 + PVFS_DIR *dir; 1.17 + PVFS_FILE *fp; 1.18 + 1.19 /* it's some error other than that target doesn't exist, fail... */ 1.20 if(pvfs_errno != ENOENT) { 1.21 return -1; 1.22 } 1.23 + 1.24 /* if it doesn't exist, it might be the case we're trying 1.25 * to mount a package file or a real directory here. let's 1.26 * try them in turn... 1.27 */ 1.28 - PVFS_DIR *dir; 1.29 - PVFS_FILE *fp; 1.30 - 1.31 if((dir = pvfs_opendir(target))) { 1.32 /* it's obviously a real dir as vnode_lookup failed before... */ 1.33 assert(dir->real); 1.34 @@ -156,18 +158,77 @@ 1.35 void pvfs_rewind(PVFS_FILE *fp); 1.36 1.37 size_t pvfs_fread(void *buf, size_t size, size_t nitems, PVFS_FILE *fp); 1.38 -size_t pvfs_write(void *buf, size_t size, size_t nitems, PVFS_FILE *fp); 1.39 +size_t pvfs_fwrite(void *buf, size_t size, size_t nitems, PVFS_FILE *fp); 1.40 1.41 -int pvfs_fgetc(PVFS_FILE *fp); 1.42 -int pvfs_fputc(int c, PVFS_FILE *fp); 1.43 +int pvfs_fgetc(PVFS_FILE *fp) 1.44 +{ 1.45 + char c; 1.46 + if(pvfs_fread(&c, 1, 1, fp) != 1) { 1.47 + return -1; 1.48 + } 1.49 + return c; 1.50 +} 1.51 1.52 -char *pvfs_fgets(char *buf, int size, PVFS_FILE *fp); 1.53 -int pvfs_fputs(char *buf, PVFS_FILE *fp); 1.54 +int pvfs_fputc(int c, PVFS_FILE *fp) 1.55 +{ 1.56 + return pvfs_fwrite(&c, 1, 1, fp) == 1 ? 0 : -1; 1.57 +} 1.58 1.59 -int pvfs_fscanf(PVFS_FILE *fp, const char *fmt, ...); 1.60 -int pvfs_vfscanf(PVFS_FILE *fp, const char *fmt, va_list ap); 1.61 -int pvfs_fprintf(PVFS_FILE *fp, const char *fmt, ...); 1.62 -int pvfs_vfprintf(PVFS_FILE *fp, const char *fmt, va_list ap); 1.63 +char *pvfs_fgets(char *buf, int size, PVFS_FILE *fp) 1.64 +{ 1.65 + int i; 1.66 + char *res = buf; 1.67 + 1.68 + for(i=0; i<size - 1; i++) { 1.69 + int c = pvfs_fgetc(fp); 1.70 + if(!c) break; 1.71 + 1.72 + *buf++ = c; 1.73 + if(c == '\n') break; 1.74 + } 1.75 + 1.76 + *buf = 0; 1.77 + return res; 1.78 +} 1.79 + 1.80 +int pvfs_fputs(char *buf, PVFS_FILE *fp) 1.81 +{ 1.82 + int len = strlen(buf); 1.83 + 1.84 + return pvfs_fwrite(buf, 1, len, fp) == 1 ? 0 : -1; 1.85 +} 1.86 + 1.87 +int pvfs_fscanf(PVFS_FILE *fp, const char *fmt, ...) 1.88 +{ 1.89 + va_list ap; 1.90 + int res; 1.91 + 1.92 + va_start(ap, fmt); 1.93 + res = pvfs_vfscanf(fp, fmt, ap); 1.94 + va_end(ap); 1.95 + return res; 1.96 +} 1.97 + 1.98 +int pvfs_vfscanf(PVFS_FILE *fp, const char *fmt, va_list ap) 1.99 +{ 1.100 + return 0; /* TODO */ 1.101 +} 1.102 + 1.103 +int pvfs_fprintf(PVFS_FILE *fp, const char *fmt, ...) 1.104 +{ 1.105 + va_list ap; 1.106 + int res; 1.107 + 1.108 + va_start(ap, fmt); 1.109 + res = pvfs_vfprintf(fp, fmt, ap); 1.110 + va_end(ap); 1.111 + return res; 1.112 +} 1.113 + 1.114 +int pvfs_vfprintf(PVFS_FILE *fp, const char *fmt, va_list ap) 1.115 +{ 1.116 + return 0; /* TODO */ 1.117 +} 1.118 1.119 void pvfs_clearerr(PVFS_FILE *fp); 1.120 int pvfs_feof(PVFS_FILE *fp); 1.121 @@ -212,6 +273,7 @@ 1.122 /* TODO */ 1.123 return -1; 1.124 } 1.125 + 1.126 struct pvfs_dirent *pvfs_readdir(PVFS_DIR *dir); 1.127 void pvfs_rewinddir(PVFS_DIR *dir); 1.128