Tengo aproximadamente 30 funciones variadas. Cada uno acepta un camino como el argumento final, por ejemplo .:Pasando una elipsis a otra función variable
bool do_foo(struct *f, int q, const char *fmt, ...)
En cada función, tengo que comprobar que el formato expandido es menos de o igual a un cierto tamaño. Entonces, me encuentro copiando/pegando el mismo fragmento de código para verificar cuántos caracteres vsnprintf()
no se imprimieron, establecí errno
en consecuencia y salgo de la escritura.
Lo que me gustaría hacer es escribir una función para hacer esto, que devolvería una cadena estáticamente asignada (expandida) que se sabe que es un tamaño seguro, o una cadena recién inicializada en falla, que podría verificarse contra NULL . Los controles también deben determinar si la cadena es una ruta absoluta o relativa, lo que influye en el tamaño seguro de la cadena. Es un montón de código duplicado y está empezando a oler.
¿Hay alguna manera de que pueda pasar el contenido de la elipsis de la entrada de mi función a otra función? ¿O debo llamar primero al va_start()
y luego pasar el va_list
a la función auxiliar?
Editar:
No estoy en absoluto en contra de pasar el va_list
al ayudante, sólo quería asegurarse de que nada más existía. Me parece que el compilador entiende dónde comienzan los argumentos variados, así que estaba curioso si podía decir que los pasara.
¿Hay alguna razón por la que está pasando adversa a la va_list al ayudante? – ojblass
He tenido que hacer cosas similares, pero tuve que quitar algunos de los argumentos ... no era un código agradable de mantener. – ojblass