o early checkin for drive redirection

o basic drive redirection is working
o functions currently supported: open:
  read, write, create, get/set attribute
o requires latest NeutrinoRDP to work
o note: clipboard is broken because of the move from
        linked lists to inodes in the FUSE code
This commit is contained in:
Laxmikant Rashinkar
2013-03-08 15:37:30 -08:00
parent b53cefbea4
commit 78d4e19258
9 changed files with 3764 additions and 600 deletions
+98 -1
View File
@@ -101,7 +101,6 @@ struct stream
#define s_mark_end(s) \
(s)->end = (s)->p
/******************************************************************************/
#define in_sint8(s, v) do \
{ \
(v) = *((signed char*)((s)->p)); \
@@ -303,4 +302,102 @@ struct stream
(s)->p += (n); \
} while (0)
/*
* @brief allocate a new stream
*
* @param _s opaque handle to the new stream
* @param _l length of new stream
******************************************************************************/
#define stream_new(_s, _l) \
do \
{ \
make_stream((_s)); \
init_stream((_s), (_l)); \
} while (0)
/**
* @brief release a previously allocated stream
*
* @param _s opaque handle returned by stream_new()
*****************************************************************************/
#define stream_free(_s) free_stream(_s)
#define stream_rd_u8(_s, _var) in_uint8(_s, _var)
#define stream_rd_u16_le(_s, _var) in_uint16_le(_s, _var)
#define stream_rd_u32_le(_s, _var) in_uint32_le(_s, _var)
#define stream_rd_s8_le(_s, _var) in_sint8(_s, _var)
#define stream_rd_s16_le(_s, _var) in_sint16_le(_s, _var)
#define stream_rd_s32_le(_s, _var) TODO
#define stream_wr_u8(_s, _var) out_uint8(_s, _var)
#define stream_wr_u16_le(_s, _var) out_uint16_le(_s, _var)
#define stream_wr_u32_le(_s, _var) out_uint32_le(_s, _var)
#define stream_wr_s8(_s, _var) TODO
#define stream_wr_s16_le(_s, _var) TODO
#define stream_wr_s32_le(_s, _var) TODO
#define stream_rd_u64_le(_s, _v) \
do \
{ \
_v = \
(tui64)(*((unsigned char *)_s->p)) | \
(((tui64) (*(((unsigned char *)_s->p) + 1))) << 8) | \
(((tui64) (*(((unsigned char *)_s->p) + 2))) << 16) | \
(((tui64) (*(((unsigned char *)_s->p) + 3))) << 24) | \
(((tui64) (*(((unsigned char *)_s->p) + 4))) << 32) | \
(((tui64) (*(((unsigned char *)_s->p) + 5))) << 40) | \
(((tui64) (*(((unsigned char *)_s->p) + 6))) << 48) | \
(((tui64) (*(((unsigned char *)_s->p) + 7))) << 56); \
_s->p += 8; \
} while (0)
#define stream_wr_u64_le(_s, _v) \
do \
{ \
*(((unsigned char *) _s->p) + 0) = (unsigned char) ((_v >> 0) & 0xff); \
*(((unsigned char *) _s->p) + 1) = (unsigned char) ((_v >> 8) & 0xff); \
*(((unsigned char *) _s->p) + 2) = (unsigned char) ((_v >> 16) & 0xff); \
*(((unsigned char *) _s->p) + 3) = (unsigned char) ((_v >> 24) & 0xff); \
*(((unsigned char *) _s->p) + 4) = (unsigned char) ((_v >> 32) & 0xff); \
*(((unsigned char *) _s->p) + 5) = (unsigned char) ((_v >> 40) & 0xff); \
*(((unsigned char *) _s->p) + 6) = (unsigned char) ((_v >> 48) & 0xff); \
*(((unsigned char *) _s->p) + 7) = (unsigned char) ((_v >> 56) & 0xff); \
_s->p += 8; \
} while (0)
/* copy data into stream */
#define stream_copyin(_s, _dest, _len) \
do \
{ \
memcpy((_s)->p, (_dest), (_len)); \
(_s)->p += (_len); \
} while (0)
/* copy data out of stream */
#define stream_copyout(_dest, _s, _len) \
{ \
do \
memcpy((_dest), (_s)->p, (_len)); \
(_s)->p += (_len); \
} while (0)
#define stream_rd_string(_dest, _s, _len) \
do \
{ \
memcpy((_dest), (_s)->p, (_len)); \
(_s)->p += (_len); \
} while (0)
#define stream_wr_string(_s, _src, _len) \
do \
{ \
memcpy((_s)->p, (_src), (_len)); \
(_s)->p += (_len); \
} while (0)
#define stream_len(_s) (int) ((_s)->p - (_s)->data)
#define stream_seek(_s, _len) (_s)->p += (_len)
#endif