aboutsummaryrefslogtreecommitdiffhomepage
path: root/env_universal.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2011-12-26 19:18:46 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2011-12-26 19:18:46 -0800
commit8d2f107d61a8b0e099ab9a59b8a32c236da5a5fc (patch)
tree89f718ab74f8400332534aee237c6f925348f05c /env_universal.cpp
parent3f16ace6784caab54fb054836ee93902e9701913 (diff)
Some changes to migrate towards C++ and a multithreaded model
Diffstat (limited to 'env_universal.cpp')
-rw-r--r--env_universal.cpp150
1 files changed, 75 insertions, 75 deletions
diff --git a/env_universal.cpp b/env_universal.cpp
index 410f7952..e3b95b30 100644
--- a/env_universal.cpp
+++ b/env_universal.cpp
@@ -83,27 +83,27 @@ static int get_socket( int fork_ok )
{
int s, len;
struct sockaddr_un local;
-
+
char *name;
wchar_t *wdir;
- wchar_t *wuname;
+ wchar_t *wuname;
char *dir =0, *uname=0;
get_socket_count++;
wdir = path;
wuname = user;
-
- if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
+
+ if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
{
wperror(L"socket");
return -1;
}
-
+
if( wdir )
dir = wcs2str(wdir );
else
dir = strdup("/tmp");
-
+
if( wuname )
uname = wcs2str(wuname );
else
@@ -112,53 +112,53 @@ static int get_socket( int fork_ok )
pw = getpwuid( getuid() );
uname = strdup( pw->pw_name );
}
-
- name = malloc( strlen(dir) +
- strlen(uname) +
- strlen(SOCK_FILENAME) +
+
+ name = (char *)malloc( strlen(dir) +
+ strlen(uname) +
+ strlen(SOCK_FILENAME) +
2 );
-
+
strcpy( name, dir );
strcat( name, "/" );
strcat( name, SOCK_FILENAME );
strcat( name, uname );
-
+
free( dir );
free( uname );
-
+
debug( 3, L"Connect to socket %s at fd %2", name, s );
-
+
local.sun_family = AF_UNIX;
strcpy(local.sun_path, name );
free( name );
len = sizeof(local);
-
- if( connect( s, (struct sockaddr *)&local, len) == -1 )
+
+ if( connect( s, (struct sockaddr *)&local, len) == -1 )
{
close( s );
if( fork_ok && start_fishd )
{
debug( 2, L"Could not connect to socket %d, starting fishd", s );
-
+
start_fishd();
-
+
return get_socket( 0 );
}
-
+
debug( 1, L"Could not connect to universal variable server, already tried manual restart (or no command supplied). You will not be able to share variable values between fish sessions. Is fish properly installed?" );
return -1;
}
-
- if( (fcntl( s, F_SETFL, O_NONBLOCK ) != 0) || (fcntl( s, F_SETFD, FD_CLOEXEC ) != 0) )
+
+ if( (fcntl( s, F_SETFL, O_NONBLOCK ) != 0) || (fcntl( s, F_SETFD, FD_CLOEXEC ) != 0) )
{
wperror( L"fcntl" );
- close( s );
-
+ close( s );
+
return -1;
}
debug( 3, L"Connected to fd %d", s );
-
+
return s;
}
@@ -166,7 +166,7 @@ static int get_socket( int fork_ok )
Callback function used whenever a new fishd message is recieved
*/
static void callback( int type, const wchar_t *name, const wchar_t *val )
-{
+{
if( type == BARRIER_REPLY )
{
barrier_reply = 1;
@@ -174,8 +174,8 @@ static void callback( int type, const wchar_t *name, const wchar_t *val )
else
{
if( external_callback )
- external_callback( type, name, val );
- }
+ external_callback( type, name, val );
+ }
}
/**
@@ -186,21 +186,21 @@ static void check_connection()
{
if( !init )
return;
-
+
if( env_universal_server.killme )
{
debug( 3, L"Lost connection to universal variable server." );
-
+
if( close( env_universal_server.fd ) )
{
wperror( L"close" );
}
-
+
env_universal_server.fd = -1;
env_universal_server.killme=0;
- env_universal_server.input.used=0;
+ env_universal_server.input.used=0;
env_universal_read_all();
- }
+ }
}
/**
@@ -210,10 +210,10 @@ static void env_universal_remove_all()
{
array_list_t lst;
int i;
-
+
al_init( &lst );
-
- env_universal_common_get_names( &lst,
+
+ env_universal_common_get_names( &lst,
1,
1 );
@@ -224,7 +224,7 @@ static void env_universal_remove_all()
}
al_destroy( &lst );
-
+
}
@@ -237,9 +237,9 @@ static void reconnect()
{
if( get_socket_count >= RECONNECT_COUNT )
return;
-
+
debug( 3, L"Get new fishd connection" );
-
+
init = 0;
env_universal_server.buffer_consumed = env_universal_server.buffer_used = 0;
env_universal_server.fd = get_socket(1);
@@ -252,22 +252,22 @@ static void reconnect()
}
-void env_universal_init( wchar_t * p,
- wchar_t *u,
+void env_universal_init( wchar_t * p,
+ wchar_t *u,
void (*sf)(),
void (*cb)( int type, const wchar_t *name, const wchar_t *val ))
{
path=p;
user=u;
- start_fishd=sf;
+ start_fishd=sf;
external_callback = cb;
connection_init( &env_universal_server, -1 );
-
+
env_universal_server.fd = get_socket(1);
env_universal_common_init( &callback );
- env_universal_read_all();
- init = 1;
+ env_universal_read_all();
+ init = 1;
if( env_universal_server.fd >= 0 )
{
env_universal_barrier();
@@ -285,7 +285,7 @@ void env_universal_destroy()
{
wperror( L"fcntl" );
}
- try_send_all( &env_universal_server );
+ try_send_all( &env_universal_server );
}
connection_destroy( &env_universal_server );
@@ -305,22 +305,22 @@ int env_universal_read_all()
if( env_universal_server.fd == -1 )
{
- reconnect();
+ reconnect();
if( env_universal_server.fd == -1 )
- return 0;
+ return 0;
}
-
+
if( env_universal_server.fd != -1 )
{
read_message( &env_universal_server );
- check_connection();
+ check_connection();
return 1;
}
else
{
debug( 2, L"No connection to universal variable server" );
return 0;
- }
+ }
}
wchar_t *env_universal_get( const wchar_t *name )
@@ -329,7 +329,7 @@ wchar_t *env_universal_get( const wchar_t *name )
return 0;
CHECK( name, 0 );
-
+
return env_universal_common_get( name );
}
@@ -339,7 +339,7 @@ int env_universal_get_export( const wchar_t *name )
return 0;
CHECK( name, 0 );
-
+
return env_universal_common_get_export( name );
}
@@ -366,19 +366,19 @@ void env_universal_barrier()
debug( 3, L"Create barrier" );
while( 1 )
{
- try_send_all( &env_universal_server );
- check_connection();
-
+ try_send_all( &env_universal_server );
+ check_connection();
+
if( q_empty( &env_universal_server.unsent ) )
break;
-
+
if( env_universal_server.fd == -1 )
{
reconnect();
debug( 2, L"barrier interrupted, exiting" );
- return;
+ return;
}
-
+
FD_ZERO( &fds );
FD_SET( env_universal_server.fd, &fds );
select( env_universal_server.fd+1, 0, &fds, 0, 0 );
@@ -394,10 +394,10 @@ void env_universal_barrier()
{
reconnect();
debug( 2, L"barrier interrupted, exiting (2)" );
- return;
- }
+ return;
+ }
FD_ZERO( &fds );
- FD_SET( env_universal_server.fd, &fds );
+ FD_SET( env_universal_server.fd, &fds );
select( env_universal_server.fd+1, &fds, 0, 0, 0 );
env_universal_read_all();
}
@@ -405,25 +405,25 @@ void env_universal_barrier()
}
-void env_universal_set( const wchar_t *name, const wchar_t *value, int export )
+void env_universal_set( const wchar_t *name, const wchar_t *value, int exportv )
{
message_t *msg;
-
+
if( !init )
return;
CHECK( name, );
-
+
debug( 3, L"env_universal_set( \"%ls\", \"%ls\" )", name, value );
if( is_dead() )
{
- env_universal_common_set( name, value, export );
+ env_universal_common_set( name, value, exportv );
}
else
{
- msg = create_message( export?SET_EXPORT:SET,
- name,
+ msg = create_message( exportv?SET_EXPORT:SET,
+ name,
value);
if( !msg )
@@ -431,7 +431,7 @@ void env_universal_set( const wchar_t *name, const wchar_t *value, int export )
debug( 1, L"Could not create universal variable message" );
return;
}
-
+
msg->count=1;
q_put( &env_universal_server.unsent, msg );
env_universal_barrier();
@@ -441,18 +441,18 @@ void env_universal_set( const wchar_t *name, const wchar_t *value, int export )
int env_universal_remove( const wchar_t *name )
{
int res;
-
+
message_t *msg;
if( !init )
return 1;
-
+
CHECK( name, 1 );
res = !env_universal_common_get( name );
debug( 3,
L"env_universal_remove( \"%ls\" )",
name );
-
+
if( is_dead() )
{
env_universal_common_remove( name );
@@ -464,7 +464,7 @@ int env_universal_remove( const wchar_t *name )
q_put( &env_universal_server.unsent, msg );
env_universal_barrier();
}
-
+
return res;
}
@@ -476,8 +476,8 @@ void env_universal_get_names( array_list_t *l,
return;
CHECK( l, );
-
- env_universal_common_get_names( l,
+
+ env_universal_common_get_names( l,
show_exported,
- show_unexported );
+ show_unexported );
}