1/* 2 * linux/fs/befs/attribute.c 3 * 4 * Copyright (C) 2002 Will Dyson <will_dyson@pobox.com> 5 * 6 * Many thanks to Dominic Giampaolo, author of "Practical File System 7 * Design with the Be File System", for such a helpful book. 8 * 9 */ 10 11#include <linux/fs.h> 12#include <linux/kernel.h> 13#include <linux/string.h> 14 15#include "befs_fs.h" 16#include "endian.h" 17 18#define SD_DATA(sd)\ 19 (void*)((char*)sd + sizeof(*sd) + (sd->name_size - sizeof(sd->name))) 20 21#define SD_NEXT(sd)\ 22 (befs_small_data*)((char*)sd + sizeof(*sd) + (sd->name_size - \ 23 sizeof(sd->name) + sd->data_size)) 24 25int 26 list_small_data(struct super_block *sb, befs_inode * inode, filldir_t filldir); 27 28befs_small_data *find_small_data(struct super_block *sb, befs_inode * inode, 29 const char *name); 30 31int 32 read_small_data(struct super_block *sb, befs_inode * inode, 33 befs_small_data * sdata, void *buf, size_t bufsize); 34 35/** 36 * 37 * 38 * 39 * 40 * 41 */ 42befs_small_data * 43find_small_data(struct super_block *sb, befs_inode * inode, const char *name) 44{ 45 befs_small_data *sdata = inode->small_data; 46 47 while (sdata->type != 0) { 48 if (strcmp(name, sdata->name) != 0) { 49 return sdata; 50 } 51 sdata = SD_NEXT(sdata); 52 } 53 return NULL; 54} 55 56/** 57 * 58 * 59 * 60 * 61 * 62 */ 63int 64read_small_data(struct super_block *sb, befs_inode * inode, 65 const char *name, void *buf, size_t bufsize) 66{ 67 befs_small_data *sdata; 68 69 sdata = find_small_data(sb, inode, name); 70 if (sdata == NULL) 71 return BEFS_ERR; 72 else if (sdata->data_size > bufsize) 73 return BEFS_ERR; 74 75 memcpy(buf, SD_DATA(sdata), sdata->data_size); 76 77 return BEFS_OK; 78} 79 80/** 81 * 82 * 83 * 84 * 85 * 86 */ 87int 88list_small_data(struct super_block *sb, befs_inode * inode) 89{ 90 91} 92 93/** 94 * 95 * 96 * 97 * 98 * 99 */ 100int 101list_attr(struct super_block *sb, befs_inode * inode) 102{ 103 104} 105 106/** 107 * 108 * 109 * 110 * 111 * 112 */ 113int 114read_attr(struct super_block *sb, befs_inode * inode) 115{ 116 117} 118