+ if (src == 0)
+ {
+ if (zg->in_zero) /* eran 2 ceros seguidos (1 cero orig. expandido) */
+ {
+ zg->in_zero = 0; /* saldo de serie de ceros */
+ return 0; /* indico que no hay nada */
+ }
+ else /* empieza serie de ceros */
+ {
+ zg->in_zero = 1; /* entramos en serie de ceros */
+ *dst = 0; /* devuelvo el cero */
+ return 1; /* indico que hay un caracter */
+ }
+ }
+ else /* no es un cero */
+ {
+ if (zg->in_zero) /* era una serie de ceros comprimida */
+ {
+ unsigned char ret = src;
+ zg->in_zero = 0; /* salgo de serie de ceros */
+ while (src--) dst[(size_t)src] = 0; /* devuelve src cantidad de ceros */
+ return ret; /* indica que se devolvieron src cantidad de ceros */
+ }
+ else
+ {
+ *dst = src; /* devuelvo el caracter */
+ return 1; /* indico que se devolvió un caracter */
+ }
+ }