Código C:
Ver original
/* Saca la información de w0rm.conf * * Este programa es software libre: usted puede redistribuirlo y/o * modificarlo bajo los términos de la Licencia Pública General de * GNU según es publicada por la Free Software Foundation, bien * sea la versión 3 de la Licencia, o (a su elección) cualquier * versión posterior. * * Este programa se distribuye con la esperanza de que sea útil, * pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de * COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte * la GNU General Public License para más detalles. * * Debería haber recibido una copia de la Licencia Pública General de GNU * junto con este programa. Si no, véase <http://www.gnu.org/licenses/>. * * Escrito por Alberto 'guzzan0' José Guilarte para w0rmlinux */ #define DIR_CONFIG "/etc/w0rm.conf" struct wormcfg { char servidor_espejo[256]; /* RFC 1035 */ char protocolo_espejo[5]; /*FTP o HTTP */ char repositorios[20]; /* Base, opcional, comunidad */ char directorio_db[256]; /* DB con los paquetes */ } cfg_w = {"guzzano2.web44.net", "http", "Base", "/home/guzzano/Escritorio/w0rm/packages_db"}; /* Realiza una comprobación para ver si no existe en la variable * algún dato que no sea necesario. Espacios, comillas, errores de tecleo * o salto de líneas. */ static int comprobar_datos (char * cadena_opciones, char ** resultado) { char * tmp_r = cadena_opciones; char * tmp_c = NULL; tmp_r += 1; if (*tmp_r == '\0' || *tmp_r == '\n') return -1; tmp_c = '\0'; *resultado = tmp_r; return 0; } int cargar_configuracion (void) { const char * opciones[4] = {"servidor_espejo", "protocolo_espejo", "repositorios_activos", "directorio_db"}; char cadena_config[256]; char * tmp = NULL; char * tmp2 = NULL; int opciones_c; int tamano_c = 0; if (config_archivo == NULL) { return -1; } if (cadena_config[0] == '#' || cadena_config[0] == '\n') continue; for (opciones_c = 0 ; opciones_c < sizeof(opciones)/sizeof(char *) ; opciones_c++) { if (strtok_r(cadena_config, "=", &tmp) == NULL) break; if (comprobar_datos(tmp, &tmp2) != 0) break; switch (opciones_c) { case 0: break; case 1: break; case 2: break; case 3: break; } } } } return 0; }
Se me hace un poco incomodo y cuando se necesitan más variables de configuración el archivo C será realmente pesado y la comparación también.
Saludos.