GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Description: Phusion Passenger (mod_rails)
Homepage: http://www.modrails.com/
Clone URL: git://github.com/FooBarWidget/passenger.git
Click here to lend your support to: passenger and make a donation at www.pledgie.com !
commit  af29aeaa1d4bf975824b14fe7577168055045d01
tree    13c83296ba7c9cb58f58554897e84ab769f21703
parent  040201494bc0c798e543c0b2e1287ad15062ffa3
passenger / ext / apache2 / Configuration.cpp
100644 61 lines (50 sloc) 1.907 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <apr_strings.h>
#include "Configuration.h"
#include "Types.h"
 
extern "C" {
 
void *
passenger_config_create_dir(apr_pool_t *p, char *dirspec) {
  RailsConfig *config = (RailsConfig *) apr_palloc(p, sizeof(RailsConfig));
  config->base_uri = NULL;
  config->base_uri_with_slash = NULL;
  config->env = NULL;
  return config;
}
 
void *
passenger_config_merge_dir(apr_pool_t *p, void *basev, void *addv) {
  RailsConfig *config = (RailsConfig *) apr_palloc(p, sizeof(RailsConfig));
  RailsConfig *base = (RailsConfig *) basev;
  RailsConfig *add = (RailsConfig *) addv;
  
  config->base_uri = (add->base_uri == NULL) ? base->base_uri : add->base_uri;
  config->base_uri_with_slash = (add->base_uri_with_slash == NULL) ? base->base_uri_with_slash : add->base_uri_with_slash;
  config->env = (add->env == NULL) ? base->env : add->env;
  return config;
}
 
void *
passenger_config_create_server(apr_pool_t *p, server_rec *s) {
  return passenger_config_create_dir(p, NULL);
}
 
void *
passenger_config_merge_server(apr_pool_t *p, void *basev, void *overridesv) {
  return passenger_config_merge_dir(p, basev, overridesv);
}
 
static const char *
cmd_rails_base_uri(cmd_parms *cmd, void *pcfg, const char *arg) {
  RailsConfig *config = (RailsConfig *) pcfg;
  config->base_uri = arg;
  if (strcmp(arg, "/") == 0) {
    config->base_uri_with_slash = "/";
  } else {
    config->base_uri_with_slash = apr_pstrcat(cmd->pool, arg, "/", NULL);
  }
  return NULL;
}
 
typedef const char * (*Take1Func)(); // Workaround for some weird C++-specific compiler error.
 
const command_rec passenger_commands[] = {
  AP_INIT_TAKE1("RailsBaseURI", (Take1Func) cmd_rails_base_uri, NULL, OR_OPTIONS,
    "Reserve the given URI to a Rails application."),
  AP_INIT_TAKE1("RailsEnv", (Take1Func) ap_set_string_slot, (void *) APR_OFFSETOF(RailsConfig, env), OR_OPTIONS,
    "The environment under which a Rails app must run."),
  { NULL }
};
 
} // extern "C"