Skip to content
A scene from Ireland

2016

Fewer NULL dereferences in edlib

My recent efforts with edlib have been to get rid of some potential NULL pointer dereference issues. When I first started writing "commands" I assumed that the correct value would always be passed. Of course that isn't very safe unless it is enforced, and is particularly unsafe if I'm going to let users write their own commends in extension languages like python. So more safety is required.

Auditing the code to ensure I'm always being careful enough is fairly boring and error prone, so I wrote a tool to help me. More accurately I extended some existing tools. You can read lots more details in my LWN.net article. At the time I wrote that I still had some unresolved issues. I've resolved enough of those now that I no longer have warnings. Sometimes that is because I used casts to hide things, but a lot of real issues have been addressed. The versions of "sparse" and "smatch" that I am using are in the "safe" branch of the copies of these trees on github.com. So this for smatch and this for sparse.

Doing this involved adding a lot of 'safe' annotations throughout edlib. Hopefully these aren't too confusing. It is nice to have the documentation of intent, and nice to know that a whole class of errors is now impossible.

I had to fix a few bugs in smatch/sparse as well as add new functionality to smatch. I really should post those bug fixes upstream...

A notmuch based email reader

I've been very slack. Sorry. I keep thinking "I should write a blog post about that" when I make some progress with edlib. But I also think "or I could write some more code instead". I do enjoy writing blog posts. But I seem to enjoy the code more.

Consequently, I've lost track of what has happened since my last post. Git tells me that I have made 379 commits since then. I've added "Alt-!" to run a shell command, with a history of recent commands stored in a buffer. I've provided a way for attributes on text to trigger call-backs to display panes, to enabling highlighting of text; and used this to better display matches for the current search. I've broken the "Refresh" event into three separate events, one that updates the sizes of panes, one that can update the position of a document in a pane, and one that redraws the content. And I've fixed lots of bugs and cleaned up lots of code. But the big thing that I've been working on is a notmuch email client.

edlib is back on track...

In the weeks leading up toe linux.conf.au 2016 I approached edlib development as a sprint. I wanted to put together sufficient functionality so that I could present my LCA2016 talk using slides displayed by edlib. I achieved this goal but at some cost. A lot of the development that went into that sprint was fairly hackish and not well thought out. It achieved the immediate goal but wasn't good long term development.

With that cost came benefits. Not just working code but a clearer perspective on what I needed to do and what problems would be faced by creating a slide-presentation mode. I don't regret the sprint at all but it certainly didn't result in completed work. I had to go over all of that development and turn the prototype into well designed code. This naturally took quite a bit longer but resulted in much more coherent designs and a stronger overall structure. This is done now and my LCA2016 presentation is now in my mainline of edlib development and works well.

There were a number of structural changes that I made while revising all this functionality, I'll just address a few of them here.

LCA-2016 presentation is done

I've been busy of the last couple of months. A number of family and personal things meant I have less time for edlib, but I had a lot to do for edlib too. I really wanted to use edlib to give my presentation at linux.conf.au 2016 in beautiful Geelong.