# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1302077641 0 # Node ID 4f1228efbdcab243fb254c601efa554697d19fd2 # Parent d3693ceec9b17c7779cc396a77470363eb1fcc1c Switched to realpath() instead of rel2abs() for GTK1/2 for now also. Removed rel2abs.c and references in Makefile. diff -r d3693ceec9b1 -r 4f1228efbdca Makefile.in --- a/Makefile.in Wed Apr 06 07:32:28 2011 +0000 +++ b/Makefile.in Wed Apr 06 08:14:01 2011 +0000 @@ -15,11 +15,11 @@ DW_DIR = @DW_DIR@ INCPATH = -I.. -I. -I$(srcdir) TARGET = @TARGET@ -SRCS = $(srcdir)/$(DW_DIR)/$(DW_SRC) $(DW_DIR)rel2abs.c +SRCS = $(srcdir)/$(DW_DIR)/$(DW_SRC) BROWSER_OBJECT=@BROWSER_OBJECT@ COMPAT_OBJECT=@COMPAT_OBJECT@ INSTALL_COMPAT=@INSTALL_COMPAT@ -OBJECTS = dw.o rel2abs.o $(BROWSER_OBJECT) +OBJECTS = dw.o $(BROWSER_OBJECT) SRCS2 = $(srcdir)compat.c OBJECTS2= $(COMPAT_OBJECT) TARGET2= @TARGET2@ @@ -145,9 +145,6 @@ compat.o: $(srcdir)/compat.c $(CC) -c $(INCPATH) $(CCFLAGS) -o $@ $(srcdir)/compat.c -rel2abs.o: $(srcdir)/gtk/rel2abs.c - $(CC) -c $(INCPATH) $(CCFLAGS) -o $@ $(srcdir)/gtk/rel2abs.c - dwtest.o: $(srcdir)/dwtest.c $(srcdir)/dw.h $(CC) -c $(INCPATH) $(CCFLAGS) -o $@ $(srcdir)/dwtest.c diff -r d3693ceec9b1 -r 4f1228efbdca gtk/dw.c --- a/gtk/dw.c Wed Apr 06 07:32:28 2011 +0000 +++ b/gtk/dw.c Wed Apr 06 08:14:01 2011 +0000 @@ -10920,22 +10920,10 @@ if ( defpath ) { - if ( g_path_is_absolute( defpath ) ) + if ( g_path_is_absolute( defpath ) || !realpath(defpath, mypath)) { strcpy( mypath, defpath ); } - else - { - if ( !getcwd(cwd, PATH_MAX ) ) - { - } - else - { - if ( rel2abs( defpath, cwd, mypath, PATH_MAX ) ) - { - } - } - } gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( filew ), mypath ); } diff -r d3693ceec9b1 -r 4f1228efbdca gtk/rel2abs.c --- a/gtk/rel2abs.c Wed Apr 06 07:32:28 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/* - * Copyright (c) 1997 Shigio Yamaguchi. All rights reserved. - * Copyright (c) 1999 Tama Communications Corporation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#include -#include -#include -/* - * rel2abs: convert an relative path name into absolute. - * - * i) path relative path - * i) base base directory (must be absolute path) - * o) result result buffer - * i) size size of result buffer - * r) != NULL: absolute path - * == NULL: error - */ -char * -rel2abs(path, base, result, size) - const char *path; - const char *base; - char *result; - const size_t size; -{ - const char *pp, *bp; - /* - * endp points the last position which is safe in the result buffer. - */ - const char *endp = result + size - 1; - char *rp; - int length; - - if (*path == '/') { - if (strlen(path) >= size) - goto erange; - strcpy(result, path); - goto finish; - } else if (*base != '/' || !size) { - errno = EINVAL; - return (NULL); - } else if (size == 1) - goto erange; - - length = strlen(base); - - if (!strcmp(path, ".") || !strcmp(path, "./")) { - if (length >= size) - goto erange; - strcpy(result, base); - /* - * rp points the last char. - */ - rp = result + length - 1; - /* - * remove the last '/'. - */ - if (*rp == '/') { - if (length > 1) - *rp = 0; - } else - rp++; - /* rp point NULL char */ - if (*++path == '/') { - /* - * Append '/' to the tail of path name. - */ - *rp++ = '/'; - if (rp > endp) - goto erange; - *rp = 0; - } - goto finish; - } - bp = base + length; - if (*(bp - 1) == '/') - --bp; - /* - * up to root. - */ - for (pp = path; *pp && *pp == '.'; ) { - if (!strncmp(pp, "../", 3)) { - pp += 3; - while (bp > base && *--bp != '/') - ; - } else if (!strncmp(pp, "./", 2)) { - pp += 2; - } else if (!strncmp(pp, "..\0", 3)) { - pp += 2; - while (bp > base && *--bp != '/') - ; - } else - break; - } - /* - * down to leaf. - */ - length = bp - base; - if (length >= size) - goto erange; - strncpy(result, base, length); - rp = result + length; - if (*pp || *(pp - 1) == '/' || length == 0) - *rp++ = '/'; - if (rp + strlen(pp) > endp) - goto erange; - strcpy(rp, pp); -finish: - return result; -erange: - errno = ERANGE; - return (NULL); -}