Changeset 5895:2bcffab4cd73 in roaraudio for libroar/basic.c
- Timestamp:
- 04/14/13 13:38:03 (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/basic.c
r5848 r5895 43 43 static int _connect_server(struct roar_connection * con, const char * server, int type, int flags, uint_least32_t timeout); 44 44 45 int __get_daemonimage(const char ** daemonimage, enum mode * mode, const char * server) { 45 int __get_daemonimage(char ** daemonimage, enum mode * mode, const char * server) { 46 const char * tmp = NULL; 47 46 48 *daemonimage = NULL; 47 49 *mode = NORMAL; … … 61 63 } else if ( server[0] == 'd' && server[1] == ':' ) { 62 64 server += 2; 63 *daemonimage= server;65 tmp = server; 64 66 *mode = NORMAL; 65 67 } else if ( server[0] == '!' ) { 66 68 server += 1; 67 *daemonimage= server;69 tmp = server; 68 70 *mode = SYSTEM; 69 71 } else { … … 73 75 } 74 76 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); 75 94 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; 88 96 89 97 return 0; … … 94 102 static int _start_server_win32(struct roar_connection * con, const char * server, int type, int flags, uint_least32_t timeout) { 95 103 enum mode mode = NORMAL; 96 c onst char * daemonimage = NULL;104 char * daemonimage = NULL; 97 105 char buf[64]; 98 106 int port; … … 105 113 106 114 if ( mode != NORMAL ) { 115 roar_mm_free(daemonimage); 107 116 roar_err_set(ROAR_ERROR_NOSYS); 108 117 return -1; … … 122 131 123 132 if ( i == NUM_TRIES ) { 133 roar_mm_free(daemonimage); 124 134 roar_err_set(ROAR_ERROR_LOOP); 125 135 return -1; … … 141 151 roar_err_update(); 142 152 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); 145 160 146 161 snprintf(buf, sizeof(buf), "localhost:%i", port); … … 166 181 static int _start_server_posix(struct roar_connection * con, const char * server, int type, int flags, uint_least32_t timeout) { 167 182 enum mode mode = NORMAL; 168 c onst char * daemonimage = NULL;183 char * daemonimage = NULL; 169 184 int socks[2]; 170 185 int r; 171 186 char fhstr[12]; 172 187 size_t len; 188 char * bin_sh; 189 int err; 173 190 174 191 if ( __get_daemonimage(&daemonimage, &mode, server) == -1 ) … … 183 200 if ( socketpair(AF_UNIX, SOCK_STREAM, 0, socks) == -1 ) { 184 201 roar_err_from_errno(); 202 err = roar_error; 203 roar_mm_free(daemonimage); 204 roar_error = err; 185 205 return -1; 186 206 } … … 190 210 if ( r == -1 ) { // error! 191 211 ROAR_ERR("_start_server(*): Can not fork: %s", roar_error2str(roar_error)); 212 err = roar_error; 192 213 close(socks[0]); 193 214 close(socks[1]); 215 roar_mm_free(daemonimage); 216 roar_error = err; 194 217 return -1; 195 218 } else if ( r == 0 ) { // we are the child … … 211 234 dup2(socks[1], ROAR_STDIN ); 212 235 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 } 214 241 execlp("sh", "sh", "-c", daemonimage, (_LIBROAR_GOOD_CAST char*)NULL); 215 242 break; 216 243 } 244 245 roar_mm_free(daemonimage); 217 246 218 247 // we are still alive? … … 221 250 } else { // we are the parent 222 251 close(socks[1]); 252 roar_mm_free(daemonimage); 223 253 if ( roar_vio_open_fh_socket(con->viocon, socks[0]) == -1 ) { 224 254 close(socks[0]); … … 398 428 #if !defined(ROAR_TARGET_WIN32) && !defined(ROAR_TARGET_MICROCONTROLLER) 399 429 struct passwd * pwd; 430 char * sysconf_roarserver; 400 431 #endif 401 432 #ifdef ROAR_HAVE_LIBDNET … … 437 468 438 469 #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); 442 477 } 443 478 #endif … … 467 502 if ( roar_server == NULL ) { 468 503 #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 ) { 472 505 roar_server = pwd->pw_dir; 473 506 } 474 #e lse475 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 } 484 517 485 518 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.