# Issue with some bit division math

First my results:

[code]

vuc1 =      111010110111100110100010101u

vuc2 =                              111u

(vul1 / vul2) =        1000011010001110101001100u

(vuv1 / vuv2) =        1000011010001110101001100u

vuc1 =        1000011010001110101001100u

vuc3 =                             1101u

(vul1 / vul3) =         100100001110100001100100u

(vuv1 / vuv3) =    10100010000100010001101110111u

vuc2 =                              111u

vuc3 =                             1101u

(vul2 / vul3) =                                 u

(vuv2 / vuv3) =                                 u

[/code]

The vul* are unsigned ints, the vuv* use pointers to copies of those values for which to test the buffered division on, the resultant vuv* values are supposed to match the resultant vul* values, as you can see the 2nd & 3rd set of results fail on that front and I would like help on identifying where the fault is in this code:

[code]

zuv_t* __zuvDiv( zuv_t *num, zuv_t const *val, zuv_t *rem ) {
if ( !_zuvValidNum(num) || !_zuvValidNum(val) || !_zuvValidNum(rem)
|| num->size != rem->size )
return NULL;
memcpy( rem->buff, num->buff, num->size );
memset( num->buff, 0, num->size );
zuv_t tmp= {0}, inc = {0};
tmp.bits = rem->bits % CHAR_BIT;
if ( !tmp.bits ) tmp.bits = CHAR_BIT;
inc.endian = tmp.endian = ziv_endian_78563412;
for ( ; rem->size > 0; tmp.bits += CHAR_BIT ) {
--rem->size;
++tmp.size;
++inc.size;
inc.bits = tmp.bits;
// Like decimal division start from left side
tmp.buff = &(rem->buff[rem->size]);
inc.buff = &(num->buff[rem->size]);
while ( zuvMeq( &tmp, val ) ) {
_zuvSub( &tmp, val );
_zuvInc( &inc );
}
}
return NULL;
}

// What I called directly
zuv_t* _zuvDiv( zuv_t *num, zuv_t const *val ) {
zuv_t rem = *num, *result;
rem.buff = calloc( 1, num->size );
if ( !rem.buff ) return NULL;
result = __zuvDiv( num, val, &rem );
free( rem.buff );
return result;
}

[/code]

Don't worry about that endian parameter because I will add something later to convert to and from small endian (78563412) and the current GDB online uses that same endian anyways so I just need to sort out the base math first.