Changeset 5895:2bcffab4cd73 in roaraudio for libroar/basic.c


Ignore:
Timestamp:
04/14/13 13:38:03 (11 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Moved away from roar_libroar_get_path_static()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/basic.c

    r5848 r5895  
    4343static int _connect_server(struct roar_connection * con, const char * server, int type, int flags, uint_least32_t timeout); 
    4444 
    45 int __get_daemonimage(const char ** daemonimage, enum mode * mode, const char * server) { 
     45int __get_daemonimage(char ** daemonimage, enum mode * mode, const char * server) { 
     46 const char * tmp = NULL; 
     47 
    4648 *daemonimage = NULL; 
    4749 *mode = NORMAL; 
     
    6163  } else if ( server[0] == 'd' && server[1] == ':' ) { 
    6264   server += 2; 
    63    *daemonimage = server; 
     65   tmp = server; 
    6466   *mode = NORMAL; 
    6567  } else if ( server[0] == '!' ) { 
    6668   server += 1; 
    67    *daemonimage = server; 
     69   tmp = server; 
    6870   *mode = SYSTEM; 
    6971  } else { 
     
    7375 } 
    7476 
     77 if ( tmp == NULL || *tmp == 0 ) 
     78  tmp = roar_libroar_get_config()->daemonimage; 
     79 
     80 // we keep this step to be compatible with older versions. 
     81 if ( tmp == NULL || *tmp == 0 ) { 
     82  tmp = roar_env_get("ROAR_DAEMONIMAGE"); 
     83  if ( tmp != NULL ) { 
     84   ROAR_WARN("__get_daemonimage(*): Usage of $ROAR_DAEMONIMAGE is obsolete. Use ROAR_OPTIONS=daemonimage:..."); 
     85  } 
     86 } 
     87 
     88 if ( tmp != NULL && *tmp != 0 ) { 
     89  *daemonimage = roar_mm_strdup(tmp); 
     90  return 0; 
     91 } 
     92 
     93 *daemonimage = roar_libroar_get_path("bin-default-daemonimage", 0, NULL, NULL); 
    7594 if ( *daemonimage == NULL ) 
    76   *daemonimage = roar_libroar_get_config()->daemonimage; 
    77  
    78  // we keep this step to be compatible with older versions. 
    79  if ( *daemonimage == NULL || **daemonimage == 0 ) { 
    80   *daemonimage = roar_env_get("ROAR_DAEMONIMAGE"); 
    81   if ( *daemonimage != NULL ) { 
    82    ROAR_WARN("__get_daemonimage(*): Usage of $ROAR_DAEMONIMAGE is obsolete. Use ROAR_OPTIONS=daemonimage:..."); 
    83   } 
    84  } 
    85  
    86  if ( *daemonimage == NULL || **daemonimage == 0 ) 
    87   *daemonimage = roar_libroar_get_path_static("bin-default-daemonimage"); 
     95  return -1; 
    8896 
    8997 return 0; 
     
    94102static int _start_server_win32(struct roar_connection * con, const char * server, int type, int flags, uint_least32_t timeout) { 
    95103 enum mode mode = NORMAL; 
    96  const char * daemonimage = NULL; 
     104 char * daemonimage = NULL; 
    97105 char buf[64]; 
    98106 int port; 
     
    105113 
    106114 if ( mode != NORMAL ) { 
     115  roar_mm_free(daemonimage); 
    107116  roar_err_set(ROAR_ERROR_NOSYS); 
    108117  return -1; 
     
    122131 
    123132 if ( i == NUM_TRIES ) { 
     133  roar_mm_free(daemonimage); 
    124134  roar_err_set(ROAR_ERROR_LOOP); 
    125135  return -1; 
     
    141151  roar_err_update(); 
    142152  ROAR_ERR("_start_server_win32(server='%s', ...): Can not start server: %s: %s", server, daemonimage, roar_errorstring); 
    143   return -1; 
    144  } 
     153  err = roar_error; 
     154  roar_mm_free(daemonimage); 
     155  roar_error = err; 
     156  return -1; 
     157 } 
     158 
     159 roar_mm_free(daemonimage); 
    145160 
    146161 snprintf(buf, sizeof(buf), "localhost:%i", port); 
     
    166181static int _start_server_posix(struct roar_connection * con, const char * server, int type, int flags, uint_least32_t timeout) { 
    167182 enum mode mode = NORMAL; 
    168  const char * daemonimage = NULL; 
     183 char * daemonimage = NULL; 
    169184 int socks[2]; 
    170185 int r; 
    171186 char fhstr[12]; 
    172187 size_t len; 
     188 char * bin_sh; 
     189 int err; 
    173190 
    174191 if ( __get_daemonimage(&daemonimage, &mode, server) == -1 ) 
     
    183200 if ( socketpair(AF_UNIX, SOCK_STREAM, 0, socks) == -1 ) { 
    184201  roar_err_from_errno(); 
     202  err = roar_error; 
     203  roar_mm_free(daemonimage); 
     204  roar_error = err; 
    185205  return -1; 
    186206 } 
     
    190210 if ( r == -1 ) { // error! 
    191211  ROAR_ERR("_start_server(*): Can not fork: %s", roar_error2str(roar_error)); 
     212  err = roar_error; 
    192213  close(socks[0]); 
    193214  close(socks[1]); 
     215  roar_mm_free(daemonimage); 
     216  roar_error = err; 
    194217  return -1; 
    195218 } else if ( r == 0 ) { // we are the child 
     
    211234     dup2(socks[1], ROAR_STDIN ); 
    212235     dup2(socks[1], ROAR_STDOUT); 
    213      execl(roar_libroar_get_path_static("bin-sh"), roar_libroar_get_path_static("bin-sh"), "-c", daemonimage, (_LIBROAR_GOOD_CAST char*)NULL); 
     236     bin_sh = roar_libroar_get_path("bin-sh", 0, NULL, NULL); 
     237     if ( bin_sh != NULL ) { 
     238      execl(bin_sh, bin_sh, "-c", daemonimage, (_LIBROAR_GOOD_CAST char*)NULL); 
     239      roar_mm_free(bin_sh); 
     240     } 
    214241     execlp("sh", "sh", "-c", daemonimage, (_LIBROAR_GOOD_CAST char*)NULL); 
    215242    break; 
    216243  } 
     244 
     245  roar_mm_free(daemonimage); 
    217246 
    218247  // we are still alive? 
     
    221250 } else { // we are the parent 
    222251  close(socks[1]); 
     252  roar_mm_free(daemonimage); 
    223253  if ( roar_vio_open_fh_socket(con->viocon, socks[0]) == -1 ) { 
    224254   close(socks[0]); 
     
    398428#if !defined(ROAR_TARGET_WIN32) && !defined(ROAR_TARGET_MICROCONTROLLER) 
    399429 struct passwd * pwd; 
     430 char * sysconf_roarserver; 
    400431#endif 
    401432#ifdef ROAR_HAVE_LIBDNET 
     
    437468 
    438469#if !defined(ROAR_TARGET_WIN32) && !defined(ROAR_TARGET_MICROCONTROLLER) 
    439  if ( (server == NULL || *server == 0) && (i = readlink(roar_libroar_get_path_static("sysconf-roarserver"), user_sock, sizeof(user_sock)-1)) != -1 ) { 
    440    user_sock[i] = 0; 
    441    server = user_sock; 
     470 sysconf_roarserver = roar_libroar_get_path("sysconf-roarserver", 0, NULL, NULL); 
     471 if ( sysconf_roarserver != NULL ) { 
     472  if ( (server == NULL || *server == 0) && (i = readlink(sysconf_roarserver, user_sock, sizeof(user_sock)-1)) != -1 ) { 
     473    user_sock[i] = 0; 
     474    server = user_sock; 
     475  } 
     476  roar_mm_free(sysconf_roarserver); 
    442477 } 
    443478#endif 
     
    467502  if ( roar_server == NULL ) { 
    468503#if !defined(ROAR_TARGET_WIN32) && !defined(ROAR_TARGET_MICROCONTROLLER) 
    469    if ( (pwd = getpwuid(getuid())) == NULL ) { 
    470     roar_server = roar_libroar_get_path_static("dir-nx-home"); 
    471    } else { 
     504   if ( (pwd = getpwuid(getuid())) != NULL ) { 
    472505    roar_server = pwd->pw_dir; 
    473506   } 
    474 #else 
    475    roar_server = "/WIN32-SUCKS"; 
    476 #endif 
    477   } 
    478  
    479   snprintf(user_sock, sizeof(user_sock)-1, "%s/%s", roar_server, ROAR_DEFAULT_SOCK_USER); 
    480   user_sock[sizeof(user_sock)-1] = 0; 
    481  
    482   if ( _connect_server(con, user_sock, ROAR_SOCKET_TYPE_UNIX, flags, timeout) == 0 ) 
    483    return 0; 
     507#endif 
     508  } 
     509 
     510  if ( roar_server != NULL ) { 
     511   snprintf(user_sock, sizeof(user_sock)-1, "%s/%s", roar_server, ROAR_DEFAULT_SOCK_USER); 
     512   user_sock[sizeof(user_sock)-1] = 0; 
     513 
     514   if ( _connect_server(con, user_sock, ROAR_SOCKET_TYPE_UNIX, flags, timeout) == 0 ) 
     515    return 0; 
     516  } 
    484517 
    485518  if ( _connect_server(con, ROAR_DEFAULT_SOCK_GLOBAL, ROAR_SOCKET_TYPE_UNIX, flags, timeout) == 0 ) 
Note: See TracChangeset for help on using the changeset viewer.