Changeset 4353:afd8ee9a2999 in roaraudio
- Timestamp:
- 09/14/10 03:27:11 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/enumdev.c
r4352 r4353 38 38 // TODO: we should put all the data in one big alloced block. 39 39 40 static int _test_server(struct roar_server * c, int flags) { 41 struct roar_connection con; 42 if ( c->server == NULL ) 43 return -1; 44 45 if ( flags & ROAR_ENUM_FLAG_NONBLOCK ) 46 return 0; 47 48 if ( roar_connect(&con, (char*)c->server) == -1 ) 49 return -1; 50 51 roar_disconnect(&con); 52 53 return 0; 54 } 55 56 #define _add(x) if ( (x) != NULL ) servers[ret++] = roar_mm_strdup((x)) 57 static ssize_t _esl_defaults(int flags, int dir, int socktype, char ** servers, size_t maxlen) { 58 #ifdef ROAR_HAVE_LIBX11 59 struct roar_x11_connection * x11con; 60 #endif 61 ssize_t ret = 0; 62 const char * new; 63 char buf[1024]; 64 int i; 65 66 if ( maxlen < 10 ) 67 return -1; 68 69 new = roar_libroar_get_server(); 70 _add(new); 71 72 new = getenv("ROAR_SERVER"); 73 _add(new); 74 75 #ifdef ROAR_HAVE_LIBX11 76 if ( (x11con = roar_x11_connect(NULL)) != NULL ) { 77 new = roar_x11_get_prop(x11con, "ROAR_SERVER"); 78 _add(new); 79 roar_x11_disconnect(x11con); 80 } 81 #endif 82 83 #if !defined(ROAR_TARGET_WIN32) && !defined(ROAR_TARGET_MICROCONTROLLER) 84 if ( (i = readlink("/etc/roarserver", buf, sizeof(buf)-1)) != -1 ) { 85 buf[i] = 0; 86 _add(buf); 87 } 88 #endif 89 90 if ( (new = roar_env_get_home(0)) != NULL ) { 91 snprintf(buf, sizeof(buf)-1, "%s/%s", new, ROAR_DEFAULT_SOCK_USER); 92 buf[sizeof(buf)-1] = 0; 93 _add(buf); 94 } 95 96 servers[ret++] = roar_mm_strdup(ROAR_DEFAULT_SOCK_GLOBAL); 97 servers[ret++] = roar_mm_strdup(ROAR_DEFAULT_HOST); 98 servers[ret++] = roar_mm_strdup("::" ROAR_DEFAULT_OBJECT); 99 servers[ret++] = roar_mm_strdup("+abstract"); 100 servers[ret++] = roar_mm_strdup("/tmp/muroard"); 101 102 return ret; 103 } 104 40 105 struct locmed { 41 106 int supflags; … … 44 109 45 110 static struct locmed _libroar_locmod[] = { 111 {ROAR_ENUM_FLAG_NONBLOCK|ROAR_ENUM_FLAG_HARDNONBLOCK, _esl_defaults} 46 112 }; 47 113 … … 51 117 char * servers[64]; 52 118 size_t have = 1; 53 size_t i ;119 size_t i, cp; 54 120 ssize_t r; 55 121 int testflags = flags; 122 123 // load config: 124 roar_libroar_get_config(); 56 125 57 126 if ( testflags & ROAR_ENUM_FLAG_DESC ) … … 75 144 have--; 76 145 77 for (i = 0; i < have; i++) {78 c = &(ret[ i]);146 for (i = cp = 0; i < have; i++) { 147 c = &(ret[cp]); 79 148 c->server = servers[i]; 80 149 c->description = NULL; 81 150 c->location = NULL; 82 } 83 84 ret[have].server = NULL; 85 ret[have].description = roar_mm_strdup("Default server"); 86 ret[have].location = NULL; 151 if ( _test_server(c, flags) == 0 ) { 152 cp++; 153 } else { 154 roar_mm_free(servers[i]); 155 } 156 } 157 158 ret[cp].server = NULL; 159 ret[cp].description = roar_mm_strdup("Default server"); 160 ret[cp].location = NULL; 87 161 88 162 return ret;
Note: See TracChangeset
for help on using the changeset viewer.