Skip to content

Commit 74c848d

Browse files
committed
Fix issues in default input and ouput solname creation if the input mesh has .mesh[b].mesh[b] extension (both input and output solution name where setted to <basename>.sol.
1 parent 718737f commit 74c848d

2 files changed

Lines changed: 16 additions & 7 deletions

File tree

src/common/API_functions.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,16 +204,20 @@ int MMG5_Set_inputSolName(MMG5_pMesh mesh,MMG5_pSol sol, const char* solin) {
204204
int mesh_len = strlen(mesh->namein)+1;
205205
MMG5_SAFE_CALLOC(sol->namein,mesh_len,char,return 0);
206206
strcpy(sol->namein,mesh->namein);
207-
ptr = strstr(sol->namein,".mesh");
207+
208+
/* Get last dot character to avoid issues with <basename>.mesh.mesh files */
209+
char *dot = strrchr(sol->namein,'.');
210+
ptr = strstr(dot,".mesh");
208211
if ( ptr ) {
209-
/* the sol file is renamed with the meshfile without extension */
212+
/* the sol file is renamed concatening the mesh basename and the sol extension */
210213
*ptr = '\0';
211-
MMG5_SAFE_REALLOC(sol->namein,mesh_len,(strlen(sol->namein)+1),char,
214+
MMG5_SAFE_REALLOC(sol->namein,mesh_len,(strlen(sol->namein)+5),char,
212215
"input sol name",return 0);
213216
}
214-
MMG5_ADD_MEM(mesh,(strlen(sol->namein)+1)*sizeof(char),"input sol name",
217+
MMG5_ADD_MEM(mesh,(strlen(sol->namein)+5)*sizeof(char),"input sol name",
215218
fprintf(stderr," Exit program.\n");
216219
return 0);
220+
strcat(sol->namein,".sol");
217221
}
218222
else {
219223
MMG5_ADD_MEM(mesh,9*sizeof(char),"input sol name",
@@ -393,7 +397,9 @@ int MMG5_Set_outputSolName(MMG5_pMesh mesh,MMG5_pSol sol, const char* solout) {
393397
}
394398
else {
395399
if ( mesh->nameout && strlen(mesh->nameout) ) {
396-
ptr = strstr(mesh->nameout,".mesh");
400+
/* Get last dot character to avoid issues with <basename>.mesh.mesh files */
401+
char *dot = strrchr(mesh->nameout,'.');
402+
ptr = strstr(dot,".mesh");
397403
if ( ptr ) {
398404
MMG5_SAFE_CALLOC(sol->nameout,strlen(mesh->nameout)+1,char,return 0);
399405
oldsize = strlen(mesh->nameout)+1;
@@ -403,7 +409,8 @@ int MMG5_Set_outputSolName(MMG5_pMesh mesh,MMG5_pSol sol, const char* solout) {
403409
oldsize = strlen(mesh->nameout)+6;
404410
}
405411
strcpy(sol->nameout,mesh->nameout);
406-
ptr = strstr(sol->nameout,".mesh");
412+
dot = strrchr(sol->nameout,'.');
413+
ptr = strstr(dot,".mesh");
407414
if ( ptr )
408415
/* the sol file is renamed with the meshfile without extension */
409416
*ptr = '\0';

src/common/inout.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2086,7 +2086,9 @@ int MMG5_loadSolHeader( const char *filename,int meshDim,FILE **inm,int *ver,
20862086
MMG5_SAFE_CALLOC(data,strlen(filename)+6,char,return -1);
20872087
strcpy(data,filename);
20882088

2089-
ptr = strstr(data,".mesh");
2089+
/* Get last dot character to avoid issues with <basename>.mesh.mesh files */
2090+
char *dot = strrchr(data,'.');
2091+
ptr = strstr(dot,".mesh");
20902092
if ( ptr ) *ptr = '\0';
20912093

20922094
ptr = strstr(data,".sol");

0 commit comments

Comments
 (0)