From: Howard Chu Date: Fri, 19 Mar 2004 08:06:42 +0000 (+0000) Subject: ITS#2457 Added LUTIL_SLASHPATH macro and func for converting X-Git-Tag: OPENLDAP_REL_ENG_2_2_BP~199 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=cbabd269a5975d488c6b8a00b81acc26e467b4da;p=openldap ITS#2457 Added LUTIL_SLASHPATH macro and func for converting forward-slash paths to Windows back-slash format. --- diff --git a/include/lutil.h b/include/lutil.h index b5b5b8c5c7..8c7894e16f 100644 --- a/include/lutil.h +++ b/include/lutil.h @@ -147,6 +147,14 @@ lutil_progname LDAP_P(( int argc, char *argv[] )); +#ifdef _WIN32 +LDAP_LUTIL_F( void ) +lutil_slashpath LDAP_P(( char* path )); +#define LUTIL_SLASHPATH(p) lutil_slashpath(p) +#else +#define LUTIL_SLASHPATH(p) +#endif + LDAP_LUTIL_F( char* ) lutil_strcopy LDAP_P(( char *dst, const char *src )); diff --git a/libraries/liblutil/utils.c b/libraries/liblutil/utils.c index e09940c7da..4813a063e2 100644 --- a/libraries/liblutil/utils.c +++ b/libraries/liblutil/utils.c @@ -34,6 +34,23 @@ int _trans_argv = 1; #endif +#ifdef _WIN32 +/* Some Windows versions accept both forward and backslashes in + * directory paths, but we always use backslashes when generating + * and parsing... + */ +void lutil_slashpath( char *path ) +{ + char *c, *p; + + p = path; + while (( c=strchr( p, '/' ))) { + *c++ = '\\'; + p = c; + } +} +#endif + char* lutil_progname( const char* name, int argc, char *argv[] ) { char *progname; @@ -49,9 +66,9 @@ char* lutil_progname( const char* name, int argc, char *argv[] ) _trans_argv = 0; } #endif + LUTIL_SLASHPATH( argv[0] ); progname = strrchr ( argv[0], *LDAP_DIRSEP ); progname = progname ? &progname[1] : argv[0]; - return progname; } diff --git a/servers/slurpd/args.c b/servers/slurpd/args.c index fc6ccc2493..f6a348a9c3 100644 --- a/servers/slurpd/args.c +++ b/servers/slurpd/args.c @@ -41,6 +41,7 @@ #include #include +#include #include "slurp.h" #include "globals.h" @@ -74,11 +75,7 @@ doargs( int i; int rflag = 0; - if ( (g->myname = strrchr( argv[0], LDAP_DIRSEP[0] )) == NULL ) { - g->myname = strdup( argv[0] ); - } else { - g->myname = strdup( g->myname + 1 ); - } + g->myname = strdup( lutil_progname( "slurpd", argc, argv )); while ( (i = getopt( argc, argv, "d:f:n:or:t:V" )) != EOF ) { switch ( i ) { @@ -120,6 +117,7 @@ doargs( #endif /* LDAP_DEBUG */ break; case 'f': /* slapd config file */ + LUTIL_SLASHPATH( optarg ); g->slapd_configfile = strdup( optarg ); break; case 'n': /* NT service name */ @@ -130,13 +128,15 @@ doargs( g->one_shot_mode = 1; break; case 'r': /* slapd replog file */ + LUTIL_SLASHPATH( optarg ); snprintf( g->slapd_replogfile, sizeof g->slapd_replogfile, "%s", optarg ); rflag++; break; case 't': { /* dir to use for our copies of replogs */ size_t sz; - g->slurpd_rdir = (char *)malloc (sz = (strlen(optarg) + sizeof("/replica"))); + LUTIL_SLASHPATH( optarg ); + g->slurpd_rdir = (char *)malloc (sz = (strlen(optarg) + sizeof(LDAP_DIRSEP "replica"))); snprintf(g->slurpd_rdir, sz, "%s" LDAP_DIRSEP "replica", optarg); } break; diff --git a/servers/slurpd/config.c b/servers/slurpd/config.c index ba0403ec5b..ffd08740ee 100644 --- a/servers/slurpd/config.c +++ b/servers/slurpd/config.c @@ -47,6 +47,7 @@ #include #include +#include #include "slurp.h" #include "globals.h" @@ -141,6 +142,7 @@ slurpd_read_config( lineno, cargv[1] ); fprintf( stderr, "line (ignored)\n" ); } + LUTIL_SLASHPATH( cargv[1] ); strcpy( sglob->slapd_replogfile, cargv[1] ); } } else if ( strcasecmp( cargv[0], "replica" ) == 0 ) { @@ -164,6 +166,7 @@ slurpd_read_config( return( 1 ); } + LUTIL_SLASHPATH( cargv[1] ); savefname = strdup( cargv[1] ); savelineno = lineno; @@ -189,6 +192,7 @@ slurpd_read_config( return( 1 ); } + LUTIL_SLASHPATH( cargv[1] ); slurpd_pid_file = ch_strdup( cargv[1] ); } else if ( strcasecmp( cargv[0], "replica-argsfile" ) == 0 ) { @@ -207,6 +211,7 @@ slurpd_read_config( return( 1 ); } + LUTIL_SLASHPATH( cargv[1] ); slurpd_args_file = ch_strdup( cargv[1] ); } }