Assembly Intel x86 cpu language, 50 bytes
00000940 53 push ebx
00000941 8B5C240C mov ebx,[esp+0xc]
00000945 8B4C2410 mov ecx,[esp+0x10]
00000949 31C0 xor eax,eax
0000094B 48 dec eax
0000094C 81C102000000 add ecx,0x2
00000952 721A jc 0x96e
00000954 81FB00000000 cmp ebx,0x0
0000095A 7412 jz 0x96e
0000095C 8B442408 mov eax,[esp+0x8]
00000960 31D2 xor edx,edx
00000962 F7F3 div ebx
00000964 49 dec ecx
00000965 7407 jz 0x96e
00000967 8D0492 lea eax,[edx+edx*4]
0000096A 01C0 add eax,eax
0000096C EBF2 jmp short 0x960
0000096E 5B pop ebx
0000096F C20C00 ret 0xc
traslation in nasm
; u32 __stdcall rdiv(u32 a, u32 b, u32 c)
; 8a, 12b, 16c
align 4
rdiv: ; c<0xFFFFFFFE and b!=0
push ebx ; something as for(;a=10*(a%b),c--;);return a/b
mov ebx, dword[esp+ 12]
mov ecx, dword[esp+ 16]
xor eax, eax
dec eax
add ecx, 2
jc .z
cmp ebx, 0
je .z
mov eax, dword[esp+ 8]
.1: xor edx, edx
div ebx
dec ecx
jz .z
lea eax, [edx+edx*4]
add eax, eax
jmp short .1 ; a=5*a;a+=a=>a=10*a
.z:
pop ebx
ret 12
For parameter 'c' the range begin from 0; it would be 0..0xfffffffd. If parameters b=0 or c out of range 0..0xfffffffd it would return -1