Menu

[r165]: / trunk / php-java-bridge / server / RunJavaBridge.c.in  Maximize  Restore  History

Download this file

68 lines (58 with data), 1.9 kB

/*-*- mode: C; tab-width:4 -*-*/

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>

/* convenience and SELinux security wrapper for java.  This file is
   called by the service script and should be tagged with appropriate
   security context (see chcon(1)). */

void usage(char*name){
  fprintf(stderr, "Usage: %s <socketname> <logLevel> <logFile>\n", name);
  fprintf(stderr, "Example 1: %s /var/run/.php-java-bridge_socket 4 /var/log/php-java-bridge.log\n", name);
  fprintf(stderr, "Example 2: %s INET:9167 3 \"\" \n", name);
  exit(1);
}

char *stringcat(char *s1, char *s2) {
  char *s3=malloc(strlen(s1)+strlen(s2)+1);
  *s3=0; strcat(s3,s1);
  return strcat(s3,s2);
}

char *stringdup(char *s) {
  if(!s) return s;
  return strdup(s);
}
  
#ifndef EXTENSION_DIR
#error EXTENSION_DIR must point to the PHP extension directory
#endif
char *java="@PHP_JAVA@";

int main(int argc, char**_argv){
  char **argv;
  char *vm;
  if(argc<4) usage(_argv[0]);

  if(strlen(java)==3&&!strcmp("yes",java))
    vm = stringcat(EXTENSION_DIR, "/java");
  else 
    vm = stringcat(java, "/bin/java");

  if(argc==4) {
    argv=calloc(9, sizeof*argv);
    argv[0]=vm;
    argv[1]=stringcat("-Djava.class.path=", EXTENSION_DIR/**/"/JavaBridge.jar");
    argv[2]=stringcat("-Djava.library.path=", EXTENSION_DIR);
    argv[3]=stringdup("-Djava.awt.headless=true");
    argv[4]=stringdup("php.java.bridge.JavaBridge");
    argv[5]=stringdup(_argv[1]); /* socketname */
    argv[6]=stringdup(_argv[2]); /* logLevel */
    argv[7]=stringdup(_argv[3]); /* logFile */
    argv[8]=0;			/* last arg */
  } else {
    int i;
    argv=calloc(argc, sizeof*argv);
    for(i=0; i<argc-1; i++) 
      argv[i]=stringdup(_argv[i+1]);
    argv[i]=0;
  }
  execv(argv[0], argv);
  fprintf(stderr, "Could not execute %s: %s\n", argv[0], strerror(errno));
  return 2;
}
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.