@@ -505,44 +505,51 @@ static int modland_com_add_data_line (struct modland_com_initialize_t *s, const
505505 return modland_com_add_data_fileentry (s , dir , last + 1 , filesize );
506506}
507507
508- static char * modland_com_strdup_slash (const char * src )
508+ static char * modland_com_strdup_slash_common (const char * src , char slash )
509509{
510510 char * retval ;
511- char * e ;
512511 size_t len ;
513512
514513 if (!src )
515514 {
516- fprintf (stderr , "modland_com_strdup_slash (src): src is NULL\n" );
515+ fprintf (stderr , "modland_com_strdup_slash_common (src): src is NULL\n" );
517516 return 0 ;
518517 }
519- e = strrchr (src ,
520- #ifdef _WIN32
521- '\\'
522- #else
523- '/'
524- #endif
525- );
526-
527- if (e && e [1 ])
518+ len = strlen (src );
519+ if (len )
528520 {
529- e = 0 ;
521+ if ( ( src [ len - 1 ] == '\\' ) || ( src [ len - 1 ] == '/' ) )
522+ {
523+ len -- ;
524+ }
530525 }
531- len = strlen ( src ) + ! e + 1 ;
532- retval = malloc (len );
526+
527+ retval = malloc (len + 2 );
533528 if (!retval )
534529 {
535- fprintf (stderr , "modland_com_strdup_slash(): malloc() failed\n" );
530+ fprintf (stderr , "modland_com_strdup_slash_common(): malloc() failed\n" );
531+ return 0 ;
536532 }
537- snprintf (retval , len , "%s%s" , src , !e ?
533+
534+ snprintf (retval , len + 2 , "%.*s%c" , (int )len , src , slash );
535+
536+ return retval ;
537+ }
538+
539+ static char * modland_com_strdup_slash_url (const char * src )
540+ {
541+ return modland_com_strdup_slash_common (src , '/' );
542+ }
543+
544+ static char * modland_com_strdup_slash_filesystem (const char * src )
545+ {
538546#ifdef _WIN32
539- "\\"
547+ return modland_com_strdup_slash_common ( src , '\\' );
540548#else
541- "/"
549+ return modland_com_strdup_slash_common ( src , '/' );
542550#endif
543- : "" );
544- return retval ;
545551}
552+
546553#include "modland-com-cachedir.c"
547554#include "modland-com-filehandle.c"
548555#include "modland-com-file.c"
@@ -628,14 +635,14 @@ static int modland_com_init (struct PluginInitAPI_t *API)
628635
629636 {
630637 const char * temp = API -> configAPI -> GetProfileString ("modland.com" , "mirror" , "https://modland.com/" );
631- modland_com .mirror = modland_com_strdup_slash (temp );
638+ modland_com .mirror = modland_com_strdup_slash_url (temp );
632639 if (!modland_com .mirror )
633640 {
634641 return errAllocMem ;
635642 }
636643
637644 temp = API -> configAPI -> GetProfileString ("modland.com" , "mirrorcustom" , modland_com .mirror );
638- modland_com .mirrorcustom = modland_com_strdup_slash (temp );
645+ modland_com .mirrorcustom = modland_com_strdup_slash_url (temp );
639646 if (!modland_com .mirrorcustom )
640647 {
641648 return errAllocMem ;
0 commit comments