~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/fs/hpfs/dentry.c

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *  linux/fs/hpfs/dentry.c
  3  *
  4  *  Mikulas Patocka (mikulas@artax.karlin.mff.cuni.cz), 1998-1999
  5  *
  6  *  dcache operations
  7  */
  8 
  9 #include "hpfs_fn.h"
 10 
 11 /*
 12  * Note: the dentry argument is the parent dentry.
 13  */
 14 
 15 int hpfs_hash_dentry(struct dentry *dentry, struct qstr *qstr)
 16 {
 17         unsigned long    hash;
 18         int              i;
 19         unsigned l = qstr->len;
 20 
 21         if (l == 1) if (qstr->name[0]=='.') goto x;
 22         if (l == 2) if (qstr->name[0]=='.' || qstr->name[1]=='.') goto x;
 23         hpfs_adjust_length((char *)qstr->name, &l);
 24         /*if (hpfs_chk_name((char *)qstr->name,&l))*/
 25                 /*return -ENAMETOOLONG;*/
 26                 /*return -ENOENT;*/
 27         x:
 28 
 29         hash = init_name_hash();
 30         for (i = 0; i < l; i++)
 31                 hash = partial_name_hash(hpfs_upcase(dentry->d_sb->s_hpfs_cp_table,qstr->name[i]), hash);
 32         qstr->hash = end_name_hash(hash);
 33 
 34         return 0;
 35 }
 36 
 37 int hpfs_compare_dentry(struct dentry *dentry, struct qstr *a, struct qstr *b)
 38 {
 39         unsigned al=a->len;
 40         unsigned bl=b->len;
 41         hpfs_adjust_length((char *)a->name, &al);
 42         /*hpfs_adjust_length((char *)b->name, &bl);*/
 43         /* 'a' is the qstr of an already existing dentry, so the name
 44          * must be valid. 'b' must be validated first.
 45          */
 46 
 47         if (hpfs_chk_name((char *)b->name, &bl)) return 1;
 48         if (hpfs_compare_names(dentry->d_sb, (char *)a->name, al, (char *)b->name, bl, 0)) return 1;
 49         return 0;
 50 }
 51 
 52 struct dentry_operations hpfs_dentry_operations = {
 53         d_hash:         hpfs_hash_dentry,
 54         d_compare:      hpfs_compare_dentry,
 55 };
 56 
 57 void hpfs_set_dentry_operations(struct dentry *dentry)
 58 {
 59         dentry->d_op = &hpfs_dentry_operations;
 60 }
 61 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.