sisoputnfrba / so-commons-library

TADs de uso comun en aplicaciones desarrolladas en C
http://sisoputnfrba.github.io/so-commons-library/
GNU General Public License v3.0
106 stars 174 forks source link

Fix string_split bug #119

Closed RaniAgus closed 4 years ago

RaniAgus commented 4 years ago

Buenas! Diseñé una nueva versión de string_split que resuelve el bug mencionado en el issue https://github.com/sisoputnfrba/so-commons-library/issues/57

Ahora usa strsep en lugar de strtok_r, lo que le permite comportarse igual que en JS:

//Antes:
string_split("//Hola//planeta/tierra/","/"); => ["Hola","planeta","tierra", NULL]
//Ahora:
string_split("//Hola//planeta/tierra/","/"); => ["","","Hola","","planeta","tierra","", NULL]

Esto cambió el comportamiento de la función cuando recibe un string vacío (""):

//Antes:
string_split("","/"); => [NULL]
//Ahora:
string_split("","/"); => ["", NULL]

Por lo que tuve que cambiar algunos tests para que coincidiera con el nuevo comportamiento. También agregué otros nuevos para verificar que string_split funcione como en JS.

Un problema que surgió fue con la función config_create: al leer un config con \n\n devolvía una línea "" en medio de ellos => dictionary_put creaba una nueva key de nombre "" y de valor NULL => la cantidad de keys que retornaba config_keys_amount era una más de la que debía ser.

Lo resolví agregando una condición para que no considere las líneas vacías, al igual que tampoco considera las comentadas con #.

Saludos!

RaniAgus commented 4 years ago

Lo veo bien, no lo llegue a probar. Consulta le diste una corrida con Valgrind?

Sip, lo corrí con Valgrind y está todo ok. Igual están los resultados del chequeo automático.

Chequeaste si habia algo mas de las commons que llamaran a split?

Lo acabo de chequear con la búsqueda de VSCode y no, no hay más funciones que llamen ni a split ni a n_split

gastonprieto commented 4 years ago

Genial, ya me habia olvidado que los tests se corrian con valgrind XD

RaniAgus commented 4 years ago

@gastonprieto ¿Les parece si cierro este PR y en estos días preparo uno un toque más grande, junto con un par de funciones para manipular arrays de strings? Lo mínimo y esencial:

Obviamente son muy básicas, si se quieren hacer cosas más complejas siempre conviene usar una lista.