The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/fs/hpfs/dentry.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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 static int hpfs_hash_dentry(const struct dentry *dentry, const struct inode *inode,
   16                 struct qstr *qstr)
   17 {
   18         unsigned long    hash;
   19         int              i;
   20         unsigned l = qstr->len;
   21 
   22         if (l == 1) if (qstr->name[0]=='.') goto x;
   23         if (l == 2) if (qstr->name[0]=='.' || qstr->name[1]=='.') goto x;
   24         hpfs_adjust_length(qstr->name, &l);
   25         /*if (hpfs_chk_name(qstr->name,&l))*/
   26                 /*return -ENAMETOOLONG;*/
   27                 /*return -ENOENT;*/
   28         x:
   29 
   30         hash = init_name_hash();
   31         for (i = 0; i < l; i++)
   32                 hash = partial_name_hash(hpfs_upcase(hpfs_sb(dentry->d_sb)->sb_cp_table,qstr->name[i]), hash);
   33         qstr->hash = end_name_hash(hash);
   34 
   35         return 0;
   36 }
   37 
   38 static int hpfs_compare_dentry(const struct dentry *parent,
   39                 const struct inode *pinode,
   40                 const struct dentry *dentry, const struct inode *inode,
   41                 unsigned int len, const char *str, const struct qstr *name)
   42 {
   43         unsigned al = len;
   44         unsigned bl = name->len;
   45 
   46         hpfs_adjust_length(str, &al);
   47         /*hpfs_adjust_length(b->name, &bl);*/
   48 
   49         /*
   50          * 'str' is the nane of an already existing dentry, so the name
   51          * must be valid. 'name' must be validated first.
   52          */
   53 
   54         if (hpfs_chk_name(name->name, &bl))
   55                 return 1;
   56         if (hpfs_compare_names(parent->d_sb, str, al, name->name, bl, 0))
   57                 return 1;
   58         return 0;
   59 }
   60 
   61 const struct dentry_operations hpfs_dentry_operations = {
   62         .d_hash         = hpfs_hash_dentry,
   63         .d_compare      = hpfs_compare_dentry,
   64 };

Cache object: f26744c2a0cec0552df76777af32a893


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.