Unix Technical Forum

Fix for file names with spaces

This is a discussion on Fix for file names with spaces within the Pgsql Patches forums, part of the PostgreSQL category; --> Sorry, this is the same patch with the proper subject line. --------------------------------------------------------------------------- Bruce Momjian wrote: > > Patch applied. ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > Pgsql Patches

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-17-2008, 11:57 PM
Bruce Momjian
 
Posts: n/a
Default Fix for file names with spaces


Sorry, this is the same patch with the proper subject line.

---------------------------------------------------------------------------

Bruce Momjian wrote:
>
> Patch applied. Thanks.
>
> ---------------------------------------------------------------------------
>
>
> Bruce Momjian wrote:
> >
> > Oh, good, I missed that patch.
> >
> > Your patch has been added to the PostgreSQL unapplied patches list at:
> >
> > http://momjian.postgresql.org/cgi-bin/pgpatches
> >
> > It will be applied as soon as one of the PostgreSQL committers reviews
> > and approves it.
> >
> > ---------------------------------------------------------------------------
> >
> >
> > >
> > >
> > >
> > > -----Original Message-----
> > > From: pgsql-hackers-owner@postgresql.org on behalf of Bruce Momjian
> > > Sent: Sat 10/1/2005 1:16 AM
> > > To: Jim C. Nasby
> > > Cc: Joshua D. Drake; Tony Caduto; pgsql-hackers@postgresql.org
> > > Subject: Re: [HACKERS] Found small issue with OUT params
> > >
> > > > fix pgxs for spaces in file names
> > >
> > > I posted a patch for that.
> > >
> > > http://archives.postgresql.org/pgsql...9/msg00137.php
> > >
> > > Regards, Dave
> > >
> > > ---------------------------(end of broadcast)---------------------------
> > > TIP 4: Have you searched our list archives?
> > >
> > > http://archives.postgresql.org
> > >

> >
> > --
> > Bruce Momjian | http://candle.pha.pa.us
> > pgman@candle.pha.pa.us | (610) 359-1001
> > + If your life is a hard drive, | 13 Roberts Road
> > + Christ can be your backup. | Newtown Square, Pennsylvania 19073

>
> > Index: src/bin/pg_config/pg_config.c
> > ================================================== =================
> > RCS file: /projects/cvsroot/pgsql/src/bin/pg_config/pg_config.c,v
> > retrieving revision 1.13
> > diff -u -r1.13 pg_config.c
> > --- src/bin/pg_config/pg_config.c 27 Sep 2005 17:39:33 -0000 1.13
> > +++ src/bin/pg_config/pg_config.c 28 Sep 2005 12:13:13 -0000
> > @@ -31,6 +31,63 @@
> >
> >
> > /*
> > + * This function cleans up the paths for use with either cmd.exe or Msys
> > + * on Windows. We need them to use double backslashes and filenames without
> > + * spaces (for which a short filename is the safest equivalent) eg:
> > + * C:\\Progra~1\\
> > + *
> > + * This can fail in 2 ways - if the path doesn't exist, or short names are
> > + * disabled. In the first case, don't return any path. In the second case,
> > + * we leave the path in the long form. In this case, it does still seem to
> > + * fix elements containing spaces which is all we actually need.
> > + */
> > +static void
> > +cleanup_path(char *path)
> > +{
> > +#ifdef WIN32
> > + int x=0, y=0;
> > + char temp[MAXPGPATH];
> > +
> > + if (GetShortPathName(path, path, MAXPGPATH - 1) == 0)
> > + {
> > + /* Ignore ERROR_INVALID_PARAMETER as it almost certainly
> > + * means that short names are disabled
> > + */
> > + if (GetLastError() != ERROR_INVALID_PARAMETER)
> > + {
> > + path[0] = '\0';
> > + return;
> > + }
> > + }
> > +
> > +
> > + /* Replace '\' with '\\'. */
> > + for (x = 0; x < strlen(path); x++)
> > + {
> > + if (path[x] == '/' || path[x] == '\\')
> > + {
> > + temp[y] = '\\';
> > + y++;
> > + temp[y] = '\\';
> > + }
> > + else
> > + {
> > + temp[y] = path[x];
> > + }
> > +
> > + y++;
> > +
> > + /* Bail out if we're too close to MAXPGPATH */
> > + if (y >= MAXPGPATH - 2)
> > + break;
> > + }
> > + temp[y] = '\0';
> > +
> > + strncpy(path, temp, MAXPGPATH - 1);
> > +#endif
> > +}
> > +
> > +
> > +/*
> > * For each piece of information known to pg_config, we define a subroutine
> > * to print it. This is probably overkill, but it avoids code duplication
> > * and accidentally omitting items from the "all" display.
> > @@ -39,138 +96,152 @@
> > static void
> > show_bindir(bool all)
> > {
> > - char path[MAXPGPATH];
> > - char *lastsep;
> > + char path[MAXPGPATH];
> > + char *lastsep;
> >
> > if (all)
> > printf("BINDIR = ");
> > /* assume we are located in the bindir */
> > strcpy(path, mypath);
> > lastsep = strrchr(path, '/');
> > +
> > if (lastsep)
> > *lastsep = '\0';
> > +
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_docdir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("DOCDIR = ");
> > get_doc_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_includedir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("INCLUDEDIR = ");
> > get_include_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_pkgincludedir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("PKGINCLUDEDIR = ");
> > get_pkginclude_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_includedir_server(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("INCLUDEDIR-SERVER = ");
> > get_includeserver_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_libdir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("LIBDIR = ");
> > get_lib_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_pkglibdir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("PKGLIBDIR = ");
> > get_pkglib_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_localedir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("LOCALEDIR = ");
> > get_locale_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_mandir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("MANDIR = ");
> > get_man_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_sharedir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("SHAREDIR = ");
> > get_share_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_sysconfdir(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("SYSCONFDIR = ");
> > get_etc_path(mypath, path);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }
> >
> > static void
> > show_pgxs(bool all)
> > {
> > - char path[MAXPGPATH];
> > + char path[MAXPGPATH];
> >
> > if (all)
> > printf("PGXS = ");
> > get_pkglib_path(mypath, path);
> > strncat(path, "/pgxs/src/makefiles/pgxs.mk", MAXPGPATH - 1);
> > + cleanup_path(path);
> > printf("%s\n", path);
> > }

>
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 1: if posting/reading through Usenet, please send an appropriate
> > subscribe-nomail command to majordomo@postgresql.org so that your
> > message can get through to the mailing list cleanly

>
> --
> Bruce Momjian | http://candle.pha.pa.us
> pgman@candle.pha.pa.us | (610) 359-1001
> + If your life is a hard drive, | 13 Roberts Road
> + Christ can be your backup. | Newtown Square, Pennsylvania 19073
>


--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-17-2008, 11:57 PM
Tom Lane
 
Posts: n/a
Default Re: Fix for file names with spaces

Bruce Momjian <pgman@candle.pha.pa.us> writes:
> Sorry, this is the same patch with the proper subject line.


Why does this patch convert '\' to '\\' and not to '/' ?
AFAICS that does nothing except to make the code more fragile.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 01:39 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com