From 53cffb32ab7cc5a650d0bbaa66686a44ea206888 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Mon, 12 May 2008 04:02:28 +0000 Subject: [PATCH] windows-unicode-normalize-btree-20080511 LICENSE MIT Attempt to normalize afs directory strings before inserting them into the B+tree. --- src/WINNT/afsd/cm_btree.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/WINNT/afsd/cm_btree.c b/src/WINNT/afsd/cm_btree.c index fc39c69e4..ee81843e2 100644 --- a/src/WINNT/afsd/cm_btree.c +++ b/src/WINNT/afsd/cm_btree.c @@ -1853,10 +1853,21 @@ int cm_BPlusDirFoo(struct cm_scache *scp, struct cm_dirEntry *dep, keyT key = {dep->name}; dataT data; char shortName[13]; - + long normalized_len; + char *normalized_name=NULL; cm_SetFid(&data.fid, scp->fid.cell, scp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique)); data.longname = NULL; + normalized_len = cm_NormalizeUtf8String(dep->name, -1, NULL, 0); + if (normalized_len) + normalized_name = malloc(normalized_len); + if (normalized_name) { + cm_NormalizeUtf8String(dep->name, -1, normalized_name, normalized_len); + key.name = normalized_name; + } else { + key.name = dep->name; + } + /* the Write lock is held in cm_BPlusDirBuildTree() */ insert(scp->dirBplus, key, data); if (!cm_Is8Dot3(dep->name)) { @@ -1871,6 +1882,9 @@ int cm_BPlusDirFoo(struct cm_scache *scp, struct cm_dirEntry *dep, insert(scp->dirBplus, key, data); } + if (normalized_name) + free(normalized_name); + #ifdef BTREE_DEBUG findAllBtreeValues(scp->dirBplus); #endif -- 2.39.5