code bien plus propre
This commit is contained in:
parent
c064288ac4
commit
4549a5b362
@ -7,12 +7,14 @@ int file_open (FILE **f, const char *path, const char *mode)
|
|||||||
printf ("opening %s\n", path);
|
printf ("opening %s\n", path);
|
||||||
if (*f != NULL) {
|
if (*f != NULL) {
|
||||||
printf ("f != NULL : %p\n", (void*) *f);
|
printf ("f != NULL : %p\n", (void*) *f);
|
||||||
fclose (*f);
|
if (file_close (*f)) {
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*f = fopen (path, mode);
|
*f = fopen (path, mode);
|
||||||
if (*f == NULL) {
|
if (*f == NULL) {
|
||||||
fprintf (stderr, "\033[31mnot opened\033[00m\n");
|
fprintf (stderr, "\033[31mnot opened\033[00m\n");
|
||||||
return -1;
|
return ER_FILE_OPEN;
|
||||||
}
|
}
|
||||||
printf ("opened : %ld\n", (long) *f);
|
printf ("opened : %ld\n", (long) *f);
|
||||||
|
|
||||||
@ -23,12 +25,56 @@ int file_close (FILE *f)
|
|||||||
{
|
{
|
||||||
if (f != 0) {
|
if (f != 0) {
|
||||||
printf ("before fclosing\n");
|
printf ("before fclosing\n");
|
||||||
fclose (f);
|
if (fclose (f)) {
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
printf ("after fclosing\n");
|
printf ("after fclosing\n");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int file_read (FILE *f, char **buf, size_t *msize) {
|
||||||
|
if (*msize == 0) {
|
||||||
|
*msize = BUFSIZ; // default value
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*buf == NULL) {
|
||||||
|
*buf = malloc (*msize);
|
||||||
|
if (*buf == NULL) {
|
||||||
|
fprintf (stderr, "err can't allocate enough memory (%ld)\n", *msize);
|
||||||
|
int ret = file_close (f);
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*msize = fread (*buf, *msize, 1, f);
|
||||||
|
if (*msize == 0) {
|
||||||
|
fprintf (stderr, "err can't read a file\n");
|
||||||
|
if (ER_FILE_CLOSE == file_close (f)) {
|
||||||
|
fprintf (stderr, "err closing the file\n");
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
|
return ER_FILE_READ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int file_write (FILE *f, const char *buf, size_t msize)
|
||||||
|
{
|
||||||
|
if (0 == fwrite (buf, msize, 1, f)) {
|
||||||
|
fprintf (stderr, "err writing in the file\n");
|
||||||
|
if (ER_FILE_CLOSE == file_close (f)) {
|
||||||
|
fprintf (stderr, "err closing the file\n");
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
|
return ER_FILE_WRITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void srv_init (struct service *srv, const char *sname)
|
void srv_init (struct service *srv, const char *sname)
|
||||||
{
|
{
|
||||||
if (srv == NULL)
|
if (srv == NULL)
|
||||||
@ -36,8 +82,8 @@ void srv_init (struct service *srv, const char *sname)
|
|||||||
|
|
||||||
// gets the service path, such as /tmp/<service>
|
// gets the service path, such as /tmp/<service>
|
||||||
memset (srv->spath, 0, PATH_MAX);
|
memset (srv->spath, 0, PATH_MAX);
|
||||||
strncat (srv->spath, TMPDIR, PATH_MAX);
|
strncat (srv->spath, TMPDIR, PATH_MAX -1);
|
||||||
strncat (srv->spath, sname, PATH_MAX);
|
strncat (srv->spath, sname, PATH_MAX -1);
|
||||||
|
|
||||||
srv->version = COMMUNICATION_VERSION;
|
srv->version = COMMUNICATION_VERSION;
|
||||||
srv->index = 0; // TODO
|
srv->index = 0; // TODO
|
||||||
@ -95,9 +141,21 @@ int srv_get_listen_raw (const struct service *srv, char **buf, size_t *msize)
|
|||||||
*buf = malloc(BUFSIZ);
|
*buf = malloc(BUFSIZ);
|
||||||
memset (*buf, 0, BUFSIZ);
|
memset (*buf, 0, BUFSIZ);
|
||||||
|
|
||||||
FILE * f = fopen (srv->spath, "r");
|
FILE * f = NULL;
|
||||||
fgets (*buf, BUFSIZ, f);
|
if (file_open (&f, srv->spath, "rb")) {
|
||||||
fclose (f);
|
return ER_FILE_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *ret = NULL;
|
||||||
|
ret = fgets (*buf, BUFSIZ, f);
|
||||||
|
if (ret == NULL) {
|
||||||
|
return ER_FILE_READ;
|
||||||
|
}
|
||||||
|
buf[0][BUFSIZ -1] = '\0';
|
||||||
|
|
||||||
|
if (file_close (f)) {
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
*msize = strlen (*buf);
|
*msize = strlen (*buf);
|
||||||
|
|
||||||
@ -117,11 +175,26 @@ int srv_get_new_process (const struct service *srv, struct process *p)
|
|||||||
struct timespec ts = { 0 };
|
struct timespec ts = { 0 };
|
||||||
struct timespec ts2 = { 0 };
|
struct timespec ts2 = { 0 };
|
||||||
|
|
||||||
FILE * f = fopen (srv->spath, "r");
|
FILE * f = NULL;
|
||||||
|
if (file_open (&f, srv->spath, "rb")) {
|
||||||
|
return ER_FILE_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
clock_gettime(CLOCK_REALTIME, &ts);
|
clock_gettime(CLOCK_REALTIME, &ts);
|
||||||
fgets (buf, BUFSIZ, f);
|
|
||||||
|
char *ret = NULL;
|
||||||
|
ret = fgets (buf, BUFSIZ, f);
|
||||||
|
if (ret == NULL) {
|
||||||
|
if (file_close (f)) {
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
|
return ER_FILE_READ;
|
||||||
|
}
|
||||||
|
|
||||||
clock_gettime(CLOCK_REALTIME, &ts2);
|
clock_gettime(CLOCK_REALTIME, &ts2);
|
||||||
fclose (f);
|
if (file_close (f)) {
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
printf("sec: %ld nsec: %ld\n", ts.tv_sec, ts.tv_nsec);
|
printf("sec: %ld nsec: %ld\n", ts.tv_sec, ts.tv_nsec);
|
||||||
printf("sec: %ld nsec: %ld\n", ts2.tv_sec, ts2.tv_nsec);
|
printf("sec: %ld nsec: %ld\n", ts2.tv_sec, ts2.tv_nsec);
|
||||||
@ -162,18 +235,30 @@ int srv_read_cb (struct process *p, char ** buf, size_t * msize
|
|||||||
{
|
{
|
||||||
if (file_open (&p->out, p->path_out, "rb")) {
|
if (file_open (&p->out, p->path_out, "rb")) {
|
||||||
fprintf (stderr, "\033[31merr: srv_read_cb, file_open\033[00m\n");
|
fprintf (stderr, "\033[31merr: srv_read_cb, file_open\033[00m\n");
|
||||||
file_close (p->out);
|
if (ER_FILE_CLOSE == file_close (p->out)) {
|
||||||
return 1;
|
fprintf (stderr, "err closing the file %s\n", p->path_out);
|
||||||
|
p->out = NULL;
|
||||||
|
}
|
||||||
|
return ER_FILE_OPEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cb != NULL)
|
if (cb != NULL) {
|
||||||
(*cb) (p->out, buf, msize);
|
int ret = (*cb) (p->out, buf, msize);
|
||||||
else
|
if (ret != 0)
|
||||||
*msize = fread (*buf, 1, *msize, p->out); // FIXME check errors
|
return ret;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int ret = file_read (p->out, buf, msize);
|
||||||
|
if (ret != 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
// printf ("DEBUG read, size %ld : %s\n", *msize, *buf);
|
// printf ("DEBUG read, size %ld : %s\n", *msize, *buf);
|
||||||
|
|
||||||
if (file_close (p->out))
|
if (ER_FILE_CLOSE == file_close (p->out)) {
|
||||||
return 1;
|
fprintf (stderr, "err closing the file %s\n", p->path_out);
|
||||||
|
p->out = NULL;
|
||||||
|
}
|
||||||
p->out = NULL;
|
p->out = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -181,28 +266,48 @@ int srv_read_cb (struct process *p, char ** buf, size_t * msize
|
|||||||
|
|
||||||
int srv_read (struct process *p, char ** buf, size_t * msize)
|
int srv_read (struct process *p, char ** buf, size_t * msize)
|
||||||
{
|
{
|
||||||
if (file_open (&p->out, p->path_out, "rb"))
|
if (ER_FILE_OPEN == file_open (&p->out, p->path_out, "rb")) {
|
||||||
return 1;
|
fprintf (stderr, "err opening the file %s\n", p->path_out);
|
||||||
|
return ER_FILE_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ret = file_read (p->out, buf, msize);
|
||||||
|
if (ret != 0) {
|
||||||
|
p->out = NULL;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
*msize = fread (*buf, 1, *msize, p->out); // FIXME check errors
|
|
||||||
// printf ("DEBUG read, size %ld : %s\n", *msize, buf);
|
// printf ("DEBUG read, size %ld : %s\n", *msize, buf);
|
||||||
|
|
||||||
if (file_close (p->out))
|
if (ER_FILE_CLOSE == file_close (p->out)) {
|
||||||
return 1;
|
fprintf (stderr, "err closing the file %s\n", p->path_out);
|
||||||
|
p->out = NULL;
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
p->out = NULL;
|
p->out = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int srv_write (struct process *p, void * buf, size_t msize)
|
int srv_write (struct process *p, char * buf, size_t msize)
|
||||||
{
|
{
|
||||||
if (file_open (&p->in, p->path_in, "wb"))
|
if (ER_FILE_OPEN == file_open (&p->in, p->path_in, "wb")) {
|
||||||
return 1;
|
fprintf (stderr, "err opening the file %s\n", p->path_in);
|
||||||
|
return ER_FILE_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
fwrite (buf, 1, msize, p->in); // FIXME check errors
|
int ret = file_write (p->in, buf, msize);
|
||||||
|
if (ret != 0) {
|
||||||
|
fprintf (stderr, "err writing in the file %s\n", p->path_in);
|
||||||
|
p->in = NULL;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (file_close (p->in))
|
if (ER_FILE_CLOSE == file_close (p->in)) {
|
||||||
return 1;
|
fprintf (stderr, "err closing the file %s\n", p->path_in);
|
||||||
|
p->in = NULL;
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
p->in = NULL;
|
p->in = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -218,13 +323,21 @@ int app_srv_connection (struct service *srv, const char *connectionstr, size_t m
|
|||||||
}
|
}
|
||||||
|
|
||||||
FILE * f = NULL;
|
FILE * f = NULL;
|
||||||
if (file_open (&f, srv->spath, "wb"))
|
if (ER_FILE_OPEN == file_open (&f, srv->spath, "wb")) {
|
||||||
return 2;
|
fprintf (stderr, "err opening the service file %s\n", srv->spath);
|
||||||
|
return ER_FILE_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
fwrite (connectionstr, msize, 1, f); // FIXME check errors
|
int ret = file_write (f, connectionstr, msize);
|
||||||
|
if (ret != 0) {
|
||||||
|
fprintf (stderr, "err writing in the service file %s\n", srv->spath);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (file_close (f))
|
if (ER_FILE_CLOSE == file_close (f)) {
|
||||||
return 3;
|
fprintf (stderr, "err closing the file\n");
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -317,47 +430,75 @@ int app_read_cb (struct process *p, char ** buf, size_t * msize
|
|||||||
, int (*cb)(FILE *f, char ** buf, size_t * msize))
|
, int (*cb)(FILE *f, char ** buf, size_t * msize))
|
||||||
{
|
{
|
||||||
if (file_open (&p->in, p->path_in, "rb")) {
|
if (file_open (&p->in, p->path_in, "rb")) {
|
||||||
fprintf (stderr, "\033[31merr: srv_read_cb, file_open\033[00m\n");
|
fprintf (stderr, "\033[31merr: app_read_cb, file_open\033[00m\n");
|
||||||
file_close (p->in);
|
p->in = NULL;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cb != NULL)
|
if (cb != NULL) {
|
||||||
(*cb) (p->in, buf, msize);
|
int ret = (*cb) (p->in, buf, msize);
|
||||||
else
|
if (ret != 0)
|
||||||
*msize = fread (*buf, 1, *msize, p->in); // FIXME check errors
|
return ret;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int ret = file_read (p->in, buf, msize);
|
||||||
|
if (ret != 0) {
|
||||||
|
p->in = NULL;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (file_close (p->in))
|
|
||||||
return 1;
|
if (ER_FILE_CLOSE == file_close (p->in)) {
|
||||||
|
fprintf (stderr, "err closing the file %s\n", p->path_in);
|
||||||
|
}
|
||||||
p->in = NULL;
|
p->in = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int app_read (struct process *p, void * buf, size_t * msize)
|
int app_read (struct process *p, char ** buf, size_t * msize)
|
||||||
{
|
{
|
||||||
if (file_open (&p->in, p->path_in, "rb"))
|
if (ER_FILE_OPEN == file_open (&p->in, p->path_in, "rb")) {
|
||||||
return 1;
|
fprintf (stderr, "err opening the file %s\n", p->path_in);
|
||||||
|
return ER_FILE_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
*msize = fread (buf, 1, *msize, p->in); // FIXME check errors
|
int ret = file_read (p->in, buf, msize);
|
||||||
// printf ("DEBUG read, size %ld : %s\n", *msize, buf);
|
if (ret != 0) {
|
||||||
|
p->in = NULL;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (file_close (p->in))
|
if (ER_FILE_CLOSE == file_close (p->in)) {
|
||||||
return 1;
|
fprintf (stderr, "err closing the file %s\n", p->path_in);
|
||||||
|
p->in = NULL;
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
p->in = NULL;
|
p->in = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int app_write (struct process *p, void * buf, size_t msize)
|
int app_write (struct process *p, char * buf, size_t msize)
|
||||||
{
|
{
|
||||||
if (file_open (&p->out, p->path_out, "wb"))
|
if (ER_FILE_OPEN == file_open (&p->out, p->path_out, "wb")) {
|
||||||
return 1;
|
fprintf (stderr, "err opening the file %s\n", p->path_out);
|
||||||
|
return ER_FILE_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
fwrite (buf, 1, msize, p->out); // FIXME check errors
|
int ret = file_write (p->out, buf, msize);
|
||||||
|
if (ret != 0) {
|
||||||
|
fprintf (stderr, "err writing in the file %s\n", p->path_out);
|
||||||
|
p->out = NULL;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (file_close (p->out))
|
if (ER_FILE_CLOSE == file_close (p->out)) {
|
||||||
return 1;
|
fprintf (stderr, "err closing the file %s\n", p->path_out);
|
||||||
|
p->out = NULL;
|
||||||
|
return ER_FILE_CLOSE;
|
||||||
|
}
|
||||||
p->out = NULL;
|
p->out = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -16,6 +16,13 @@
|
|||||||
|
|
||||||
#define COMMUNICATION_VERSION 1
|
#define COMMUNICATION_VERSION 1
|
||||||
|
|
||||||
|
#define ER_FILE_OPEN 1
|
||||||
|
#define ER_FILE_CLOSE 2
|
||||||
|
#define ER_FILE_READ 3
|
||||||
|
#define ER_FILE_WRITE 4
|
||||||
|
|
||||||
|
#define ER_MEM_ALLOC 100
|
||||||
|
|
||||||
struct service {
|
struct service {
|
||||||
unsigned int version;
|
unsigned int version;
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
@ -41,7 +48,7 @@ int srv_close (struct service *srv);
|
|||||||
int srv_read_cb (struct process *p, char ** buf, size_t * msize
|
int srv_read_cb (struct process *p, char ** buf, size_t * msize
|
||||||
, int (*cb)(FILE *f, char ** buf, size_t * msize));
|
, int (*cb)(FILE *f, char ** buf, size_t * msize));
|
||||||
int srv_read (struct process *, char ** buf, size_t *);
|
int srv_read (struct process *, char ** buf, size_t *);
|
||||||
int srv_write (struct process *, void * buf, size_t);
|
int srv_write (struct process *, char * buf, size_t);
|
||||||
|
|
||||||
// APPLICATION
|
// APPLICATION
|
||||||
|
|
||||||
@ -53,7 +60,13 @@ int app_destroy (struct process *); // called by the application
|
|||||||
|
|
||||||
int app_read_cb (struct process *p, char ** buf, size_t * msize
|
int app_read_cb (struct process *p, char ** buf, size_t * msize
|
||||||
, int (*cb)(FILE *f, char ** buf, size_t * msize));
|
, int (*cb)(FILE *f, char ** buf, size_t * msize));
|
||||||
int app_read (struct process *, void * buf, size_t *);
|
int app_read (struct process *, char ** buf, size_t *);
|
||||||
int app_write (struct process *, void * buf, size_t);
|
int app_write (struct process *, char * buf, size_t);
|
||||||
|
|
||||||
|
// wrappers
|
||||||
|
int file_open (FILE **f, const char *path, const char *mode);
|
||||||
|
int file_close (FILE *f);
|
||||||
|
int file_read (FILE *f, char **buf, size_t *msize);
|
||||||
|
int file_write (FILE *f, const char *buf, size_t msize);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include "pubsubd.h"
|
#include "pubsubd.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <string.h> // strndup
|
||||||
|
|
||||||
// CHANNELS
|
// CHANNELS
|
||||||
|
|
||||||
void pubsubd_channels_init (struct channels *chans) { LIST_INIT(chans); }
|
void pubsubd_channels_init (struct channels *chans) { LIST_INIT(chans); }
|
||||||
@ -57,7 +59,9 @@ struct channel * pubsubd_channel_copy (struct channel *c)
|
|||||||
memcpy (copy, c, sizeof(struct channel));
|
memcpy (copy, c, sizeof(struct channel));
|
||||||
|
|
||||||
if (c->chan != NULL) {
|
if (c->chan != NULL) {
|
||||||
copy->chan = strndup (c->chan, c->chanlen);
|
// copy->chan = strndup (c->chan, c->chanlen);
|
||||||
|
copy->chan = malloc (BUFSIZ);
|
||||||
|
memcpy (copy->chan, c->chan, BUFSIZ);
|
||||||
copy->chanlen = c->chanlen;
|
copy->chanlen = c->chanlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,7 +400,9 @@ int pubsubd_get_new_process (struct service *srv, struct app_list_elm *ale
|
|||||||
}
|
}
|
||||||
|
|
||||||
chan[BUFSIZ -1] = '\0';
|
chan[BUFSIZ -1] = '\0';
|
||||||
c[0]->chan = strndup (chan, BUFSIZ);
|
// c[0]->chan = strndup (chan, BUFSIZ);
|
||||||
|
c[0]->chan = malloc (BUFSIZ);
|
||||||
|
memcpy(c[0]->chan, chan, BUFSIZ);
|
||||||
c[0]->chanlen = strlen (chan);
|
c[0]->chanlen = strlen (chan);
|
||||||
|
|
||||||
struct channel *new_chan = NULL;
|
struct channel *new_chan = NULL;
|
||||||
@ -425,21 +431,35 @@ int pubsubd_msg_read_cb (FILE *f, char ** buf, size_t * msize)
|
|||||||
|
|
||||||
// read
|
// read
|
||||||
char type = ' ';
|
char type = ' ';
|
||||||
fread (&type, 1, 1, f);
|
if (0 == fread (&type, 1, 1, f)) {
|
||||||
|
return ER_FILE_READ;
|
||||||
|
}
|
||||||
|
|
||||||
size_t chanlen = 0;
|
size_t chanlen = 0;
|
||||||
fread (&chanlen, sizeof (size_t), 1, f);
|
if (0 == fread (&chanlen, sizeof (size_t), 1, f)) {
|
||||||
|
return ER_FILE_READ;
|
||||||
|
}
|
||||||
|
|
||||||
if (chanlen > BUFSIZ) {
|
if (chanlen > BUFSIZ) {
|
||||||
return 1;
|
return ER_FILE_READ;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *chan = NULL;
|
char *chan = NULL;
|
||||||
chan = malloc (chanlen);
|
chan = malloc (chanlen);
|
||||||
fread (chan, chanlen, 1, f);
|
|
||||||
|
if (chan == NULL) {
|
||||||
|
return ER_MEM_ALLOC;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == fread (chan, chanlen, 1, f)) {
|
||||||
|
return ER_FILE_READ;
|
||||||
|
}
|
||||||
|
|
||||||
size_t datalen = 0;
|
size_t datalen = 0;
|
||||||
fread (&datalen, sizeof (size_t), 1, f);
|
if (0 == fread (&datalen, sizeof (size_t), 1, f)) {
|
||||||
|
free (chan);
|
||||||
|
return ER_FILE_READ;
|
||||||
|
}
|
||||||
|
|
||||||
if (datalen > BUFSIZ) {
|
if (datalen > BUFSIZ) {
|
||||||
return 1;
|
return 1;
|
||||||
@ -447,11 +467,25 @@ int pubsubd_msg_read_cb (FILE *f, char ** buf, size_t * msize)
|
|||||||
|
|
||||||
char *data = NULL;
|
char *data = NULL;
|
||||||
data = malloc (datalen);
|
data = malloc (datalen);
|
||||||
fread (data, datalen, 1, f);
|
if (data == NULL) {
|
||||||
|
free (chan);
|
||||||
|
return ER_MEM_ALLOC;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == fread (data, datalen, 1, f)) {
|
||||||
|
free (chan);
|
||||||
|
free (data);
|
||||||
|
return ER_FILE_READ;
|
||||||
|
}
|
||||||
|
|
||||||
*msize = 1 + 2 * sizeof (size_t) + chanlen + datalen;
|
*msize = 1 + 2 * sizeof (size_t) + chanlen + datalen;
|
||||||
if (*buf == NULL) {
|
if (*buf == NULL) {
|
||||||
*buf = malloc(*msize);
|
*buf = malloc(*msize);
|
||||||
|
if (*buf == NULL) {
|
||||||
|
free (chan);
|
||||||
|
free (data);
|
||||||
|
return ER_MEM_ALLOC;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO CHECK THIS
|
// TODO CHECK THIS
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#include "communication.h"
|
#include "communication.h"
|
||||||
#include "process.h"
|
#include "process.h"
|
||||||
|
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
||||||
#define PUBSUB_TYPE_DISCONNECT 1 << 0
|
#define PUBSUB_TYPE_DISCONNECT 1 << 0
|
||||||
|
Reference in New Issue
Block a user