<blockquote>
<p>Not it's not, it's hashed as an inode, but the key is a filename, so the equal function will compare the string pointers.</p>
</blockquote>
<p>ahhh, ok.  So a) it doesn't work now because its wrong, and b) comparing strings won't actually work either if both paths resolve to the same inode, the hash table will see the hash collide but the strings being different and add it again.</p>
<p>So using inode as the hash is just a slow way of making a hash of a file path. In fact Anjuta seems to have made a right hash of the whole thing [pun intended].  Maybe thats why it switched to sqlite for its tags later.</p>
<blockquote>
<p>Well, if we used a hash table as a mean of deduping and a list as a mean of well, building the list, it would not be a problem.</p>
</blockquote>
<p>Yeah, since 2.40 <code>g_hash_table_insert()</code> returns if it inserted or not, so the filename could be added to the list on the fly.  But Glib 2.40 didn't exist back when this was originally written.</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/geany/geany/pull/1989#issuecomment-436756588">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABDrJ0fBdvgHO8EiOAU8co_A4KyF4nezks5uszrrgaJpZM4YQS08">mute the thread</a>.<img src="https://github.com/notifications/beacon/ABDrJ5uA_3BhmW76N1iCy1cHWQU952Vcks5uszrrgaJpZM4YQS08.gif" height="1" width="1" alt="" /></p>
<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/geany/geany","title":"geany/geany","subtitle":"GitHub repository","main_image_url":"https://assets-cdn.github.com/images/email/message_cards/header.png","avatar_image_url":"https://assets-cdn.github.com/images/email/message_cards/avatar.png","action":{"name":"Open in GitHub","url":"https://github.com/geany/geany"}},"updates":{"snippets":[{"icon":"PERSON","message":"@elextr in #1989: \u003e Not it's not, it's hashed as an inode, but the key is a filename, so the equal function will compare the string pointers.\r\n\r\nahhh, ok.  So a) it doesn't work now because its wrong, and b) comparing strings won't actually work either if both paths resolve to the same inode, the hash table will see the hash collide but the strings being different and add it again.\r\n\r\nSo using inode as the hash is just a slow way of making a hash of a file path. In fact Anjuta seems to have made a right hash of the whole thing [pun intended].  Maybe thats why it switched to sqlite for its tags later.\r\n\r\n\u003e Well, if we used a hash table as a mean of deduping and a list as a mean of well, building the list, it would not be a problem.\r\n\r\nYeah, since 2.40 `g_hash_table_insert()` returns if it inserted or not, so the filename could be added to the list on the fly.  But Glib 2.40 didn't exist back when this was originally written."}],"action":{"name":"View Pull Request","url":"https://github.com/geany/geany/pull/1989#issuecomment-436756588"}}}</script>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/geany/geany/pull/1989#issuecomment-436756588",
"url": "https://github.com/geany/geany/pull/1989#issuecomment-436756588",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
},
{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"hideOriginalBody": "false",
"originator": "AF6C5A86-E920-430C-9C59-A73278B5EFEB",
"title": "Re: [geany/geany] Make geany -g tags output reproducible (#1989)",
"sections": [
{
"text": "",
"activityTitle": "**elextr**",
"activityImage": "https://assets-cdn.github.com/images/email/message_cards/avatar.png",
"activitySubtitle": "@elextr",
"facts": [

]
}
],
"potentialAction": [
{
"name": "Add a comment",
"@type": "ActionCard",
"inputs": [
{
"isMultiLine": true,
"@type": "TextInput",
"id": "IssueComment",
"isRequired": false
}
],
"actions": [
{
"name": "Comment",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"IssueComment\",\n\"repositoryFullName\": \"geany/geany\",\n\"issueId\": 1989,\n\"IssueComment\": \"{{IssueComment.value}}\"\n}"
}
]
},
{
"name": "Close pull request",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"PullRequestClose\",\n\"repositoryFullName\": \"geany/geany\",\n\"pullRequestId\": 1989\n}"
},
{
"targets": [
{
"os": "default",
"uri": "https://github.com/geany/geany/pull/1989#issuecomment-436756588"
}
],
"@type": "OpenUri",
"name": "View on GitHub"
},
{
"name": "Unsubscribe",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"MuteNotification\",\n\"threadId\": 406924604\n}"
}
],
"themeColor": "26292E"
}
]</script>