Changeset 94b18f3


Ignore:
Timestamp:
10/03/13 13:28:59 (12 months ago)
Author:
Kris Moore <kris@…>
Branches:
master, 9.2-release, releng/10.0, releng/10.0.1, releng/10.0.2, releng/10.0.3
Children:
1934da2
Parents:
3890273
Message:

Add the new pbimount / pbime commands, which will be used internally
by the PBI format to do the mounting / runtime of a target PBI app

Location:
src-sh/pbi-manager10
Files:
3 added
2 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • src-sh/pbi-manager10/install.sh

    r393790b r94b18f3  
    1818 
    1919DIR=`dirname $0` 
     20DIR=`realpath $DIR` 
    2021cd ${DIR} 
    2122 
     
    124125chmod 644 pbiwrapper 
    125126mv pbiwrapper ${LB}/share/pbi-manager/.pbiwrapper-`uname -m` 
    126 cp ldconfig ${LB}/share/pbi-manager/ldconfig-pbi 
     127 
     128# Install the pbime wrapper 
     129cd ${DIR}/pbime && make install 
  • src-sh/pbi-manager10/wrapper/main.c

    r651bd28 r94b18f3  
    99#include <string.h> 
    1010#include <unistd.h> 
     11#include <libgen.h> 
    1112#include <paths.h> 
    1213 
     
    1819    char *progdir = NULL; 
    1920    char *progtarget = NULL; 
    20     char newpath[MAX_SIZE]; 
    21     char newlibdir[MAX_SIZE]; 
    2221    char newtarget[MAX_SIZE]; 
     22    char pbimntdir[MAX_SIZE]; 
     23    char pbime[MAX_SIZE]; 
    2324 
    2425    // Setup working variables 
     
    8889       return -1; 
    8990    } 
     91 
     92    // Remove any newline from progdir 
     93    char *ptr; 
     94    if( ( ptr = strchr(progdir, '\n')) != NULL ) 
     95        *ptr = '\0';  
     96 
    9097    if ( progtarget == NULL ) { 
    9198       printf("Missing TARGET:"); 
     
    94101 
    95102 
    96     // Now check for .ldhints file 
    97     strcpy(tfilepath, bfile); 
    98     strcat(tfilepath, ".ldhints"); 
    99  
    100     // Open ldhints file 
    101     tfile = fopen(tfilepath, "r"); 
    102     if ( tfile != NULL ) { 
    103       if( (optline = fgets(buf, sizeof(buf), tfile)) != NULL ) { 
    104          if ( (strlen(buf) + strlen(progdir) + 10) > MAX_SIZE ) { 
    105            printf("Error: ldhints overflow!"); 
    106            exit(2); 
    107          } 
    108          strncpy(newlibdir, buf, (strlen(buf) -1)); 
    109          strcat(newlibdir, ":");   
    110       } 
    111       fclose(tfile); 
    112     } 
    113  
    114     // Build the LDPATH 
    115     strncat(newlibdir, progdir, (strlen(progdir) -1 )); 
    116     strcat(newlibdir, "/lib");   
    117  
    118     // Sanity check newpath size before allocating 
    119     if ( MAX_SIZE < ((strlen(progdir) + 10) * 3) + strlen(getenv("PATH")) ) { 
    120        printf("PATH size overflow..."); 
    121        exit(2); 
    122     } 
    123  
    124     // Build the PATH 
    125     strncpy(newpath, progdir, (strlen(progdir) -1 )); 
    126     strcat(newpath, "/bin:"); 
    127     strncat(newpath, progdir, (strlen(progdir) -1 )); 
    128     strcat(newpath, "/sbin:"); 
    129     strncat(newpath, progdir, (strlen(progdir) -1 )); 
    130     strcat(newpath, "/libexec:"); 
    131     strcat(newpath, getenv("PATH")); 
    132  
    133     // Set environment vars 
    134     setenv("PATH", newpath, 1); 
    135     setenv("LD_LIBRARY_PATH", newlibdir, 1); 
    136     setenv("LD_32_LIBRARY_PATH", newlibdir, 1); 
    137  
    138103    // Set the target 
    139     strncpy(newtarget, progdir, strlen(progdir) -1 ); 
     104    strcpy(newtarget, "/usr/local" ); 
    140105    strcat(newtarget, "/"); 
    141106    strncat(newtarget, progtarget, strlen(progtarget) -1 ); 
     
    143108    // Enable for debug 
    144109    //printf( "PATH: %s\n", newpath); 
    145     //printf( "LDPATH: %s\n", newlibdir); 
    146110    //printf( "Running: %s \n", newtarget); 
    147111    //return system(newtarget); 
    148112    //strncpy(argv[0], newtarget); 
    149113 
     114    // Setup the mount-directory 
     115    strcpy(pbimntdir, "/usr/pbi/.mounts/"); 
     116    strcat(pbimntdir, basename(progdir)); 
     117 
     118    strcpy(pbime, "/usr/pbi/.pbime"); 
     119 
    150120    // Build new target argv 
    151     char *targv[argc+1]; 
    152     targv[0] = newtarget; 
    153     int i=1; 
    154     while(i < argc){ 
    155       targv[i] = argv[i]; 
     121    char *targv[argc+4]; 
     122    targv[0] = pbime; 
     123    targv[1] = pbimntdir; 
     124    targv[2] = progdir; 
     125    targv[3] = newtarget; 
     126    int i=4; 
     127    int j=1; 
     128    while(j < argc){ 
     129      targv[i] = argv[j]; 
    156130      //printf( "Arg: %s \n", targv[i]); 
    157131      i++; 
     132      j++; 
    158133    } 
    159134    targv[i] = '\0'; 
     135    //printf( "Arg: %s \n", targv[0]); 
     136    //printf( "Arg: %s \n", targv[1]); 
     137    //printf( "Arg: %s \n", targv[2]); 
     138    //printf( "Arg: %s \n", targv[3]); 
    160139 
    161     return execv(newtarget, targv); 
     140    return execv(pbime, targv); 
     141    //return execv(newtarget, targv); 
    162142} 
Note: See TracChangeset for help on using the changeset viewer.