Changeset 4352:6c46e5e41e82 in roaraudio


Ignore:
Timestamp:
09/14/10 02:35:36 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

wrote everything needed to get a list of exactly the default entry

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/enumdev.c

    r4350 r4352  
    3636#include "libroar.h" 
    3737 
     38// TODO: we should put all the data in one big alloced block. 
     39 
     40struct locmed { 
     41 int supflags; 
     42 ssize_t (*func)(int flags, int dir, int socktype, char ** servers, size_t maxlen); 
     43}; 
     44 
     45static struct locmed _libroar_locmod[] = { 
     46}; 
     47 
     48struct roar_server * roar_enum_servers(int flags, int dir, int socktype) { 
     49 struct roar_server * ret = NULL; 
     50 struct roar_server * c; 
     51 char * servers[64]; 
     52 size_t have = 1; 
     53 size_t i; 
     54 ssize_t r; 
     55 int testflags = flags; 
     56 
     57 if ( testflags & ROAR_ENUM_FLAG_DESC ) 
     58  testflags -= ROAR_ENUM_FLAG_DESC; 
     59 if ( testflags & ROAR_ENUM_FLAG_LOCATION ) 
     60  testflags -= ROAR_ENUM_FLAG_LOCATION; 
     61 
     62 for (i = 0; i < sizeof(_libroar_locmod)/sizeof(*_libroar_locmod); i++) { 
     63  if ( (_libroar_locmod[i].supflags & testflags) == testflags ) { 
     64   r = _libroar_locmod[i].func(flags, dir, socktype, &(servers[have-1]), (sizeof(servers)/sizeof(*servers)) - have); 
     65   if ( r > 0 ) 
     66    have += r; 
     67  } 
     68 } 
     69 
     70 ret = roar_mm_malloc(have*sizeof(struct roar_server)); 
     71 
     72 if (ret == NULL) 
     73  return NULL; 
     74 
     75 have--; 
     76 
     77 for (i = 0; i < have; i++) { 
     78  c = &(ret[i]); 
     79  c->server = servers[i]; 
     80  c->description = NULL; 
     81  c->location = NULL; 
     82 } 
     83 
     84 ret[have].server = NULL; 
     85 ret[have].description = roar_mm_strdup("Default server"); 
     86 ret[have].location = NULL; 
     87 
     88 return ret; 
     89} 
     90 
     91int roar_enum_servers_free(struct roar_server * servs) { 
     92 struct roar_server * c; 
     93 int i; 
     94 
     95 if ( servs == NULL ) 
     96  return -1; 
     97 
     98 for (i = 0; (c = &(servs[i]))->server != NULL; i++) { 
     99  roar_mm_free((void*)c->server); 
     100  if ( c->description != NULL ) 
     101   roar_mm_free((void*)c->description); 
     102  if ( c->location != NULL ) 
     103   roar_mm_free((void*)c->location); 
     104 } 
     105 
     106 if ( c->description != NULL ) 
     107  roar_mm_free((void*)c->description); 
     108 if ( c->location != NULL ) 
     109  roar_mm_free((void*)c->location); 
     110 
     111 roar_mm_free(servs); 
     112 
     113 return 0; 
     114} 
     115 
     116ssize_t roar_enum_servers_num(struct roar_server * servs) { 
     117 size_t ret; 
     118 
     119 if ( servs == NULL ) 
     120  return -1; 
     121 
     122 for (ret = 0; servs[ret].server != NULL; ret++); 
     123 
     124 return ret; 
     125} 
     126 
    38127//ll 
Note: See TracChangeset for help on using the changeset viewer.