My own snprintf implementation in C
Bug
Your int to string conversion isn't working correctly when the number being printed is an exact power of the base.  Here is a program that demonstrates the bug:
int main(void)
{
    char buf[256];

    memset(buf, 'z', 256);
    my_snprintf(buf, 256, &quot;abc%ddef&quot;, 1000);
    printf(&quot;%s\n&quot;, buf);
}

Expected output:
abc1000def

Actual output:
ab1000zdef

As you can see, the 1000 portion was written one too far to the left.  The problem is that your number length computation is off by one for exact powers of the base.
Unnecessary and unsafe floating point operations
The Floating Point Police™ would like to point out that the use of floating point in int_to_str() is both unnecessary and dangerous.  First of all, this line:
int length = (int)ceil(log((double)x)/log((double)base));

could be rewritten to use a loop to count the number of digits.  By using floating point, you open yourself up to rounding errors.  For example, if x were 125 and base were 5, you would expect length to be 3.  However, when I ran the above code using 125 and 5 on my x86 machine, I got a length of 4 instead.  This is because the division evaluated to something like 3.00000001 and ceil rounded it up to 4.  (Of course there is already an unrelated off by one bug mentioned in the previous section.  This floating point use is a separate cause of concern).
The same thing applies to this line:
    x /= (int)pow(base, (float)(length - size));

This could be rewritten to be a loop where you divide by base once per loop iteration.  By using pow() and casting to int, you run the risk of the result of pow erroneously rounding down to the previous int.