Return Function Pointer based upon String
You could create a table mapping strings to functions:

typedef struct {
    char* name;
    FP    func;
} FP_mapping;

FP_mapping FP_map[] = {
    { "str1", fun1 },
    { "str2", fun2 },
    { NULL, NULL }
};


Then iterate over the array:

static FP getFunction1(char* name)
{
    for (int i=0; FP_map[i].name != NULL; i++)
    {
        if strcmp(FP_map[i].name, name)
        {
            return FP_map[i].func;
        }
    }
}