]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
libxfs: remove getcwd/chdir dance from initialization
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 15 Sep 2017 13:34:10 +0000 (08:34 -0500)
committerEric Sandeen <sandeen@redhat.com>
Fri, 15 Sep 2017 13:34:10 +0000 (08:34 -0500)
Back in the old days of Irix, the library saved and restored chdir so
that (I guess?) check_open can change directory without screwing up our
ability to use relative paths.  However, there's nothing in Linux that
actually does this, so just rip out the getcwd/chdir stuff since we
absolute device paths work just fine without it.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/init.c

index 0f41a85304461b66ecc54bbf76403a2626a3b830..a007b3beca53cf985a664f1e96923c4ef1335638 100644 (file)
@@ -239,13 +239,11 @@ int
 libxfs_init(libxfs_init_t *a)
 {
        char            *blockfile;
-       char            curdir[MAXPATHLEN];
        char            *dname;
        char            dpath[25];
        int             fd;
        char            *logname;
        char            logpath[25];
-       int             needcd;
        char            *rawfile;
        char            *rtname;
        char            rtpath[25];
@@ -261,8 +259,6 @@ libxfs_init(libxfs_init_t *a)
        a->dsize = a->lbsize = a->rtbsize = 0;
        a->dbsize = a->logBBsize = a->logBBstart = a->rtsize = 0;
 
-       (void)getcwd(curdir,MAXPATHLEN);
-       needcd = 0;
        fd = -1;
        flags = (a->isreadonly | a->isdirect);
 
@@ -276,14 +272,11 @@ libxfs_init(libxfs_init_t *a)
        if (a->volname) {
                if(!check_open(a->volname,flags,&rawfile,&blockfile))
                        goto done;
-               needcd = 1;
                fd = open(rawfile, O_RDONLY);
                dname = a->dname = a->volname;
                a->volname = NULL;
        }
        if (dname) {
-               if (dname[0] != '/' && needcd)
-                       chdir(curdir);
                if (a->disfile) {
                        a->ddev= libxfs_device_open(dname, a->dcreat, flags,
                                                    a->setblksize);
@@ -299,12 +292,9 @@ libxfs_init(libxfs_init_t *a)
                        platform_findsizes(rawfile, a->dfd,
                                           &a->dsize, &a->dbsize);
                }
-               needcd = 1;
        } else
                a->dsize = 0;
        if (logname) {
-               if (logname[0] != '/' && needcd)
-                       chdir(curdir);
                if (a->lisfile) {
                        a->logdev = libxfs_device_open(logname,
                                        a->lcreat, flags, a->setblksize);
@@ -320,12 +310,9 @@ libxfs_init(libxfs_init_t *a)
                        platform_findsizes(rawfile, a->logfd,
                                           &a->logBBsize, &a->lbsize);
                }
-               needcd = 1;
        } else
                a->logBBsize = 0;
        if (rtname) {
-               if (rtname[0] != '/' && needcd)
-                       chdir(curdir);
                if (a->risfile) {
                        a->rtdev = libxfs_device_open(rtname,
                                        a->rcreat, flags, a->setblksize);
@@ -341,7 +328,6 @@ libxfs_init(libxfs_init_t *a)
                        platform_findsizes(rawfile, a->rtfd,
                                           &a->rtsize, &a->rtbsize);
                }
-               needcd = 1;
        } else
                a->rtsize = 0;
        if (a->dsize < 0) {
@@ -359,8 +345,6 @@ libxfs_init(libxfs_init_t *a)
                        progname);
                goto done;
        }
-       if (needcd)
-               chdir(curdir);
        if (!libxfs_bhash_size)
                libxfs_bhash_size = LIBXFS_BHASHSIZE(sbp);
        libxfs_bcache = cache_init(a->bcache_flags, libxfs_bhash_size,