September 2008 Archives

Function pointer link stubs

Last week been test-driving some C code again and found that not much people are familiar with the "function pointer link stub". This is an excellent technique in C to dynamically replace library calls without adjusting the library.

Imagine, you are working on some embedded software. You will have a couple of libraries that you use, but you won't link to it when unit testing. Instead you stub them out. But, a link stub cannot be adjusted on run-time, so how do you handle this? With... "function pointer link stubs".

The idea is simple. You stub out the library and your stub calls a function pointer when its set. When not set, it just returns success.

Here is some example code:

.h (in a library where we cannot change the header)

int aLibraryCallWeCannotChange(int param);


extern int (*aLibraryCallWeCannotChangeFp)(int param);


int aLibraryCallWeCannotChange(int param)
    if (aLibraryCallWeCannotChangeFp) aLibraryCallWeCannotChangeFp(param);
    return 0;

int (*aLibraryCallWeCannotChangeFp)(int param) = NULL;


    void setup()
        UT_PTR_SET(aLibraryCallWeCannotChangeFp, dynamicStubOfALibraryCall);

Now it is easy to place the code of your stub close to your tests and you will never have to change the linker stub code.

About this Archive

This page is an archive of entries from September 2008 listed from newest to oldest.

August 2008 is the previous archive.

November 2008 is the next archive.

Find recent content on the main index or look in the archives to find all content.