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

Cache object: f3df6abe2a008af7d4cfd833e8e3438a


[ 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.