Ignore:
Timestamp:
03/03/14 12:44:09 (5 months ago)
Author:
Kris Moore <kris@…>
Branches:
master, releng/10.0.1, releng/10.0.2
Children:
fdf149b, 713c464
Parents:
5b19f8b
Message:

Fix some bugs with relative file pathnames in pbifs, and make sure to load
procfs / linprocfs / linsysfs in PBIs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src-sh/pbi-manager/pbifs/main.c

    r28f8495 rb6a6398  
    9393int get_modified_path(char *npath, const char *opath) 
    9494{ 
     95        // Get the real pathname we are using now 
     96        char rPath[MAXPATHLEN]; 
     97        // Check if this is a relative path, or absolute 
     98        if ( strpos(opath, "/") == 0 ) { 
     99                strcpy(rPath, opath); 
     100        } else { 
     101                getwd(rPath); 
     102                strcat(rPath, opath); 
     103 
     104                // Debugging 
     105                /* 
     106                char testcmd[MAXPATHLEN]; 
     107                strcpy(testcmd, "echo \"failedpath: "); 
     108                strcat(testcmd, opath); 
     109                strcat(testcmd, " -> "); 
     110                strcat(testcmd, rPath); 
     111                strcat(testcmd, "\" >> /tmp/failedpath"); 
     112                system(testcmd); 
     113                */ 
     114        } 
     115 
    95116        // First, lets look for calls to /var/run/ld-elf*.so.hints 
    96117        // These need to be replaced with calls to our new hints file in hintsdir 
    97         if ( strpos(opath, "/var/run/") == 0 ) 
    98         { 
    99                 if ( strcmp(opath, "/var/run/ld-elf.so.hints") == 0 ) 
     118        if ( strpos(rPath, "/var/run/") == 0 ) 
     119        { 
     120                if ( strcmp(rPath, "/var/run/ld-elf.so.hints") == 0 ) 
    100121                { 
    101122                        strcpy(npath, hintsdir); 
     
    103124                        return 0; 
    104125                } 
    105                 if ( strcmp(opath, "/var/run/ld-elf32.so.hints") == 0 ) 
     126                if ( strcmp(rPath, "/var/run/ld-elf32.so.hints") == 0 ) 
    106127                { 
    107128                        strcpy(npath, hintsdir); 
     
    111132        } 
    112133 
    113         if ( strcmp(opath, "/etc/rc.d/ldconfig") == 0 ) 
     134        if ( strcmp(rPath, "/etc/rc.d/ldconfig") == 0 ) 
    114135        { 
    115136                strcpy(npath, "/usr/pbi/.ldconfig"); 
     
    118139 
    119140        // Check if we have a virtual linux /compat directory to fake as well 
    120         if ( strpos(opath, "/compat/linux") == 0 ) 
     141        if ( strpos(rPath, "/compat/linux") == 0 ) 
    121142        { 
    122143                // If this is /compat/linux/proc, lets use the systems 
    123                 if ( strpos(opath, "/compat/linux/proc") == 0 ) { 
    124                         strcpy(npath, opath); 
     144                if ( strpos(rPath, "/compat/linux/proc") == 0 ) { 
     145                        strcpy(npath, rPath); 
     146                        return 0; 
     147                } 
     148                // If this is /compat/linux/sys, lets use the systems 
     149                if ( strpos(rPath, "/compat/linux/sys") == 0 ) { 
     150                        strcpy(npath, rPath); 
    125151                        return 0; 
    126152                } 
     
    128154                if (0 == access(linuxdir, F_OK)) 
    129155                { 
    130                         strcpy(npath, replace_str(opath, "/compat/linux", linuxdir)); 
    131                         return 0; 
    132                 } 
    133                 strcpy(npath, opath); 
     156                        strcpy(npath, replace_str(rPath, "/compat/linux", linuxdir)); 
     157                        return 0; 
     158                } 
     159                strcpy(npath, rPath); 
    134160                return 0; 
    135161        } 
    136162 
    137163        // Lastly, lets do all the parsing for /usr/local matching 
    138         if ( strpos(opath, "/usr/local") == 0 ) 
     164        if ( strpos(rPath, "/usr/local") == 0 ) 
    139165        { 
    140166                // Use the systems copies of some font / icon directories 
    141                 if ( strpos(opath, "/usr/local/etc/fonts") == 0 ) { 
    142                         strcpy(npath, opath); 
    143                         return 0; 
    144                 } 
    145                 if ( strpos(opath, "/usr/local/lib/X11/fonts") == 0 ) { 
    146                         strcpy(npath, opath); 
    147                         return 0; 
    148                 } 
    149                 if ( strpos(opath, "/usr/local/lib/X11/icons") == 0 ) { 
    150                         strcpy(npath, opath); 
    151                         return 0; 
    152                 } 
    153                 if ( strpos(opath, "/usr/local/share/icons") == 0 ) 
     167                if ( strpos(rPath, "/usr/local/etc/fonts") == 0 ) { 
     168                        strcpy(npath, rPath); 
     169                        return 0; 
     170                } 
     171                if ( strpos(rPath, "/usr/local/lib/X11/fonts") == 0 ) { 
     172                        strcpy(npath, rPath); 
     173                        return 0; 
     174                } 
     175                if ( strpos(rPath, "/usr/local/lib/X11/icons") == 0 ) { 
     176                        strcpy(npath, rPath); 
     177                        return 0; 
     178                } 
     179                if ( strpos(rPath, "/usr/local/share/icons") == 0 ) 
    154180                { 
    155                         strcpy(npath, opath); 
    156                         return 0; 
    157                 } 
    158                 if ( strpos(opath, "/usr/local/share/font-") == 0 ) { 
    159                         strcpy(npath, opath); 
     181                        strcpy(npath, rPath); 
     182                        return 0; 
     183                } 
     184                if ( strpos(rPath, "/usr/local/share/font-") == 0 ) { 
     185                        strcpy(npath, rPath); 
    160186                        return 0; 
    161187                } 
    162188 
    163189                // Look for some of our callback utils 
    164                 if ( strpos(opath, "/usr/local/bin/pbisyscmd") == 0 ) { 
     190                if ( strpos(rPath, "/usr/local/bin/pbisyscmd") == 0 ) { 
    165191                        strcpy(npath, "/usr/pbi/.pbisyscmd"); 
    166192                        return 0; 
    167193                } 
    168                 if ( strpos(opath, "/usr/local/bin/openwith") == 0 ) { 
     194                if ( strpos(rPath, "/usr/local/bin/openwith") == 0 ) { 
    169195                        strcpy(npath, "/usr/pbi/.pbisyscmd"); 
    170196                        return 0; 
    171197                } 
    172                 if ( strpos(opath, "/usr/local/bin/xdg-open") == 0 ) { 
     198                if ( strpos(rPath, "/usr/local/bin/xdg-open") == 0 ) { 
    173199                        strcpy(npath, "/usr/pbi/.pbisyscmd"); 
    174200                        return 0; 
    175201                } 
    176202         
    177                 strcpy(npath, replace_str(opath, "/usr/local", pbidir)); 
     203                strcpy(npath, replace_str(rPath, "/usr/local", pbidir)); 
    178204                return 0; 
    179205        } 
    180206 
    181         strcpy(npath, opath); 
     207        strcpy(npath, rPath); 
    182208        return 0; 
    183209} 
Note: See TracChangeset for help on using the changeset viewer.