diff src/libpst.c @ 325:cb67b335afcc

patches from debian
author Carl Byington <carl@five-ten-sg.com>
date Fri, 18 Jan 2013 08:05:08 -0800
parents c4537664ff50
children c507af52515a
line wrap: on
line diff
--- a/src/libpst.c	Thu Jan 03 10:09:12 2013 -0800
+++ b/src/libpst.c	Fri Jan 18 08:05:08 2013 -0800
@@ -289,6 +289,17 @@
 static char*            pst_wide_to_single(char *wt, size_t size);
 
 
+static char *pst_getcwd(void) {
+    char *cwd;
+#ifdef HAVE_GET_CURRENT_DIR_NAME
+    cwd = get_current_dir_name();
+#else
+    cwd = pst_malloc(PATH_MAX+1);
+    getcwd(cwd, PATH_MAX+1);
+#endif
+    return cwd;
+}
+
 
 int pst_open(pst_file *pf, const char *name, const char *charset) {
     int32_t sig;
@@ -361,20 +372,24 @@
 
     DEBUG_RET();
 
-    pf->cwd = pst_malloc(PATH_MAX+1);
-    getcwd(pf->cwd, PATH_MAX+1);
+    pf->cwd   = pst_getcwd();
     pf->fname = strdup(name);
     return 0;
 }
 
 
 int  pst_reopen(pst_file *pf) {
-    char cwd[PATH_MAX];
-    if (!getcwd(cwd, PATH_MAX))            return -1;
-    if (chdir(pf->cwd))                    return -1;
-    if (!freopen(pf->fname, "rb", pf->fp)) return -1;
-    if (chdir(cwd))                        return -1;
+    char *cwd;
+    cwd = pst_getcwd();
+    if (cwd == NULL)                       return -1;
+    if (chdir(pf->cwd))                    goto err;
+    if (!freopen(pf->fname, "rb", pf->fp)) goto err;
+    if (chdir(cwd))                        goto err;
+    free(cwd);
     return 0;
+err:
+    free(cwd);
+    return -1;
 }