¡Buenas!
Lo que pasa con
js es que la has utilizado para saber en que posición de memoria has reservado el vector de 256 bytes. Si mueves ese puntero le pierdes la pista a ese bloque y a su contenido, ya que no sabrás dónde empezaba, y luego no podrás utilizar
free para liberar la memoria, así que por eso utilizas un puntero auxiliar,
str, para llenar ese espacio con los datos que correspondan manteniendo en
js la posición de memoria en donde empieza el bloque de datos.
Otra alternativa para hacer lo mismo sería utilizar una variable para indicar un desplazamiento sobre el puntero
js, y utilizar aritmética de punteros o notación de subíndices:
char *GetJSession (FILE *sf) {
size_t s = 0;
char *buf = NULL;
char *js
= (char *) calloc (256, sizeof (char)); //char *str = (char *) js;
int desplazamiento = 0;
while (getline (&buf, &s, sf) > 0) {
if (strstr (buf
, "JSESSIONID=") != NULL
) { while (*++buf != '=');
while (*buf != ';') {
*(js + desplazamiento) = *buf;
buf++;
printf ("%c", *(js
+ (desplazamiento
++))); }
}
}
...
Y con notación de subíndices quedaría:
char *GetJSession (FILE *sf) {
size_t s = 0;
char *buf = NULL;
char *js
= (char *) calloc (256, sizeof (char)); //char *str = (char *) js;
int desplazamiento = 0;
while (getline (&buf, &s, sf) > 0) {
if (strstr (buf
, "JSESSIONID=") != NULL
) { while (*++buf != '=');
while (*buf != ';') {
js[desplazamiento] = *buf;
buf++;
printf ("%c", js
[desplazamiento
++]); }
}
}
...
¡Saludos!
Una cosa que he visto. En ningún momento compruebas que estés dentro del límite de 256 bytes que has reservado para
js.
Con el puntero auxiliar debería de comprobar que la diferencia con respecto al inicio sea menor que 256:
str - js < 256, y con la variable entera con la que mides el desplazamiento deberías de comprobar que ésta tenga también un valor inferior a 256:
desplazamiento < 256. Así te aseguras de no estar accediendo a posiciones de memoria en las que puede que no tengas permisos de lectura/escritura (vamos, que el programa podría crashear en tiempo de ejecución con un error de segmentación).