Go to the documentation of this file.00001 #include <string.h>
00002 #include "xdr.h"
00003
00004
00005 int db__send_string_array(dbString * a, int count)
00006 {
00007 int i;
00008 int stat;
00009
00010 stat = db__send_int(count);
00011 for (i = 0; stat == DB_OK && i < count; i++)
00012 stat = db__send_string(&a[i]);
00013
00014 return stat;
00015 }
00016
00017
00018 int db__recv_string_array(dbString ** a, int *n)
00019 {
00020 int i, count;
00021 int stat;
00022 dbString *b;
00023
00024 *n = 0;
00025 *a = NULL;
00026 stat = db__recv_int(&count);
00027 if (stat != DB_OK)
00028 return stat;
00029 if (count < 0) {
00030 db_protocol_error();
00031 return DB_PROTOCOL_ERR;
00032 }
00033
00034 b = db_alloc_string_array(count);
00035 if (b == NULL)
00036 return DB_MEMORY_ERR;
00037
00038 for (i = 0; i < count; i++) {
00039 stat = db__recv_string(&b[i]);
00040 if (stat != DB_OK) {
00041 db_free_string_array(b, count);
00042 return stat;
00043 }
00044 }
00045 *n = count;
00046 *a = b;
00047
00048 return DB_OK;
00049 }
00050
00051 int db__send_string(dbString * x)
00052 {
00053 int stat = DB_OK;
00054 const char *s = db_get_string(x);
00055 int len = s ? strlen(s) + 1 : 1;
00056
00057 if (!s)
00058 s = "";
00059
00060 if (!db__send(&len, sizeof(len)))
00061 stat = DB_PROTOCOL_ERR;
00062
00063 if (!db__send(s, len))
00064 stat = DB_PROTOCOL_ERR;
00065
00066 if (stat == DB_PROTOCOL_ERR)
00067 db_protocol_error();
00068
00069 return stat;
00070 }
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081 int db__recv_string(dbString * x)
00082 {
00083 int stat = DB_OK;
00084 int len;
00085 char *s;
00086
00087 if (!db__recv(&len, sizeof(len)))
00088 stat = DB_PROTOCOL_ERR;
00089
00090 if (len <= 0)
00091 stat = DB_PROTOCOL_ERR;
00092
00093 if (db_enlarge_string(x, len) != DB_OK)
00094 stat = DB_PROTOCOL_ERR;
00095
00096 s = db_get_string(x);
00097
00098 if (!db__recv(s, len))
00099 stat = DB_PROTOCOL_ERR;
00100
00101 if (stat == DB_PROTOCOL_ERR)
00102 db_protocol_error();
00103
00104 return stat;
00105 }
00106
00107 int db__send_Cstring(const char *s)
00108 {
00109 dbString x;
00110
00111 db_init_string(&x);
00112 db_set_string_no_copy(&x, (char *)s);
00113
00114 return db__send_string(&x);
00115 }