mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 05:13:10 +00:00
111 lines
1.9 KiB
C
111 lines
1.9 KiB
C
|
#ifndef ENV_UNIVERSAL_COMMON_HH
|
||
|
#define ENV_UNIVERSAL_COMMON_HH
|
||
|
|
||
|
|
||
|
/**
|
||
|
The set command
|
||
|
*/
|
||
|
#define SET_STR L"SET"
|
||
|
|
||
|
/**
|
||
|
The erase command
|
||
|
*/
|
||
|
#define ERASE_STR L"ERASE"
|
||
|
|
||
|
#define BARRIER_STR L"BARRIER"
|
||
|
#define BARRIER_REPLY_STR L"BARRIER_REPLY"
|
||
|
|
||
|
|
||
|
/**
|
||
|
The filename to use for univeral variables. The username is appended
|
||
|
*/
|
||
|
#define SOCK_FILENAME "fishd.socket."
|
||
|
|
||
|
/**
|
||
|
The different types of commands that can be sent between client/server
|
||
|
*/
|
||
|
enum
|
||
|
{
|
||
|
SET,
|
||
|
ERASE,
|
||
|
BARRIER,
|
||
|
BARRIER_REPLY,
|
||
|
}
|
||
|
;
|
||
|
|
||
|
/**
|
||
|
The table of universal variables
|
||
|
*/
|
||
|
extern hash_table_t env_universal_var;
|
||
|
|
||
|
/**
|
||
|
This struct represents a connection between a universal variable server/client
|
||
|
*/
|
||
|
typedef struct connection
|
||
|
{
|
||
|
/**
|
||
|
The file descriptor this socket lives on
|
||
|
*/
|
||
|
int fd;
|
||
|
/**
|
||
|
Queue of onsent messages
|
||
|
*/
|
||
|
queue_t unsent;
|
||
|
/**
|
||
|
Set to one when this connection should be killed
|
||
|
*/
|
||
|
int killme;
|
||
|
/**
|
||
|
The state used for character conversions
|
||
|
*/
|
||
|
mbstate_t wstate;
|
||
|
/**
|
||
|
The input string. Input from the socket goes here. When a
|
||
|
newline is encountered, the buffer is parsed and cleared.
|
||
|
*/
|
||
|
string_buffer_t input;
|
||
|
|
||
|
/**
|
||
|
Link to the next connection
|
||
|
*/
|
||
|
struct connection *next;
|
||
|
}
|
||
|
connection_t;
|
||
|
|
||
|
/**
|
||
|
A struct representing a message to be sent between client and server
|
||
|
*/
|
||
|
typedef struct
|
||
|
{
|
||
|
int count;
|
||
|
char body[0];
|
||
|
}
|
||
|
message_t;
|
||
|
|
||
|
/**
|
||
|
Read all available messages on this connection
|
||
|
*/
|
||
|
void read_message( connection_t * );
|
||
|
|
||
|
/**
|
||
|
Send as many messages as possible without blocking to the connection
|
||
|
*/
|
||
|
void try_send_all( connection_t *c );
|
||
|
|
||
|
/**
|
||
|
Create a messge with the specified properties
|
||
|
*/
|
||
|
message_t *create_message( int type, const wchar_t *key, const wchar_t *val );
|
||
|
|
||
|
/**
|
||
|
Init the library
|
||
|
*/
|
||
|
void env_universal_common_init(void (*cb)(int type, const wchar_t *key, const wchar_t *val ) );
|
||
|
|
||
|
/**
|
||
|
Destroy library data
|
||
|
*/
|
||
|
void env_universal_common_destroy();
|
||
|
|
||
|
#endif
|