char buf[1024];
size_t len;
- while((len = fread(buf, 1, sizeof buf, in)))
+ while((len = fread(buf, 1, sizeof(buf), in)))
fwrite(buf, len, 1, out);
fclose(in);
return true;
if(!f)
return;
- while(fgets(line, sizeof line, f)) {
+ while(fgets(line, sizeof(line), f)) {
if(!rstrip(line))
continue;
char *p = line, *q;
tv.tv_sec = timeout / 1000;
tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000;
#endif
- setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof tv);
- setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof tv);
+ setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
+ setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
}
char *meshlink_get_external_address(meshlink_handle_t *mesh) {
}
}
if(s >= 0) {
- send(s, request, sizeof request - 1, 0);
- int len = recv(s, line, sizeof line - 1, MSG_WAITALL);
+ send(s, request, sizeof(request) - 1, 0);
+ int len = recv(s, line, sizeof(line) - 1, MSG_WAITALL);
if(len > 0) {
line[len] = 0;
if(line[len - 1] == '\n')
FILE *f;
// Use first Address statement in own host config file
- snprintf(filename, sizeof filename, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, name);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, name);
scan_for_hostname(filename, &hostname, &port);
if(hostname)
static char line[1024];
const char *end = strchr(*data, '\n');
size_t len = end ? end - *data : strlen(*data);
- if(len >= sizeof line) {
+ if(len >= sizeof(line)) {
logger(NULL, MESHLINK_ERROR, "Maximum line length exceeded!\n");
return NULL;
}
};
char portstr[16];
- snprintf(portstr, sizeof portstr, "%d", port);
+ snprintf(portstr, sizeof(portstr), "%d", port);
if(getaddrinfo(NULL, portstr, &hint, &ai) || !ai)
return false;
int port = 0x1000 + (rand() & 0x7fff);
if(try_bind(port)) {
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->name);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->name);
FILE *f = fopen(filename, "a");
if(!f) {
logger(mesh, MESHLINK_DEBUG, "Please change MeshLink's Port manually.\n");
}
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "meshlink.conf", mesh->confbase);
+ snprintf(filename, sizeof(filename), "%s" SLASH "meshlink.conf", mesh->confbase);
FILE *f = fopen(filename, "w");
if(!f) {
fprintf(f, "Name = %s\n", name);
- snprintf(filename, sizeof filename, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, name);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, name);
FILE *fh = fopen(filename, "w");
if(!fh) {
logger(mesh, MESHLINK_DEBUG, "Could not create file %s: %s\n", filename, strerror(errno));
return false;
}
- snprintf(filename, sizeof filename, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, value);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, value);
f = fopen(filename, "w");
if(!f) {
meshlink_handle_t* mesh = handle;
switch(type) {
case SPTPS_HANDSHAKE:
- return sptps_send_record(&(mesh->sptps), 0, mesh->cookie, sizeof mesh->cookie);
+ return sptps_send_record(&(mesh->sptps), 0, mesh->cookie, sizeof(mesh)->cookie);
case 0:
mesh->data = xrealloc(mesh->data, mesh->thedatalen + len + 1);
abort();
while(!(newline = memchr(mesh->buffer, '\n', mesh->blen))) {
- int result = recv(mesh->sock, mesh->buffer + mesh->blen, sizeof mesh->buffer - mesh->blen, 0);
+ int result = recv(mesh->sock, mesh->buffer + mesh->blen, sizeof(mesh)->buffer - mesh->blen, 0);
if(result == -1 && errno == EINTR)
continue;
else if(result <= 0)
va_list ap;
va_start(ap, format);
- blen = vsnprintf(buffer, sizeof buffer, format, ap);
+ blen = vsnprintf(buffer, sizeof(buffer), format, ap);
va_end(ap);
- if(blen < 1 || blen >= sizeof buffer)
+ if(blen < 1 || blen >= sizeof(buffer))
return false;
buffer[blen] = '\n';
};
const char *meshlink_strerror(meshlink_errno_t err) {
- if(err < 0 || err >= sizeof errstr / sizeof *errstr)
+ if(err < 0 || err >= sizeof(errstr) / sizeof(*errstr))
return "Invalid error code";
return errstr[err];
}
} else
logger(mesh, MESHLINK_DEBUG, "Done.\n");
- snprintf(privname, sizeof privname, "%s" SLASH "ecdsa_key.priv", mesh->confbase);
+ snprintf(privname, sizeof(privname), "%s" SLASH "ecdsa_key.priv", mesh->confbase);
f = fopen(privname, "wb");
if(!f) {
fclose(f);
- snprintf(pubname, sizeof pubname, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->name);
+ snprintf(pubname, sizeof(pubname), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->name);
f = fopen(pubname, "a");
if(!f) {
freeaddrinfo(rai);
struct sockaddr_storage sn;
- socklen_t sl = sizeof sn;
+ socklen_t sl = sizeof(sn);
if(getsockname(sock, (struct sockaddr *)&sn, &sl))
return false;
// IPv4 example.org
- if(getlocaladdrname("93.184.216.34", host, sizeof host)) {
- snprintf(entry, sizeof entry, "%s %s", host, mesh->myport);
+ if(getlocaladdrname("93.184.216.34", host, sizeof(host))) {
+ snprintf(entry, sizeof(entry), "%s %s", host, mesh->myport);
append_config_file(mesh, mesh->name, "Address", entry);
}
// IPv6 example.org
- if(getlocaladdrname("2606:2800:220:1:248:1893:25c8:1946", host, sizeof host)) {
- snprintf(entry, sizeof entry, "%s %s", host, mesh->myport);
+ if(getlocaladdrname("2606:2800:220:1:248:1893:25c8:1946", host, sizeof(host))) {
+ snprintf(entry, sizeof(entry), "%s %s", host, mesh->myport);
append_config_file(mesh, mesh->name, "Address", entry);
}
}
}
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "hosts", mesh->confbase);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts", mesh->confbase);
if(mkdir(filename, 0777) && errno != EEXIST) {
logger(mesh, MESHLINK_DEBUG, "Could not create directory %s: %s\n", filename, strerror(errno));
return false;
}
- snprintf(filename, sizeof filename, "%s" SLASH "meshlink.conf", mesh->confbase);
+ snprintf(filename, sizeof(filename), "%s" SLASH "meshlink.conf", mesh->confbase);
if(!access(filename, F_OK)) {
logger(mesh, MESHLINK_DEBUG, "Configuration file %s already exists!\n", filename);
// Check whether meshlink.conf already exists
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "meshlink.conf", confbase);
+ snprintf(filename, sizeof(filename), "%s" SLASH "meshlink.conf", confbase);
if(access(filename, R_OK)) {
if(errno == ENOENT) {
if(pthread_create(&mesh->thread, NULL, meshlink_main_loop, mesh) != 0) {
logger(mesh, MESHLINK_DEBUG, "Could not start thread: %s\n", strerror(errno));
- memset(&mesh->thread, 0, sizeof mesh->thread);
+ memset(&mesh->thread, 0, sizeof(mesh)->thread);
meshlink_errno = MESHLINK_EINTERNAL;
pthread_mutex_unlock(&(mesh->mesh_mutex));
return false;
free(mesh->confbase);
pthread_mutex_destroy(&(mesh->mesh_mutex));
- memset(mesh, 0, sizeof *mesh);
+ memset(mesh, 0, sizeof(*mesh));
free(mesh);
}
if(ent->d_name[0] == '.')
continue;
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "%s", dirname, ent->d_name);
+ snprintf(filename, sizeof(filename), "%s" SLASH "%s", dirname, ent->d_name);
if(unlink(filename))
deltree(filename);
}
}
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "meshlink.conf", confbase);
+ snprintf(filename, sizeof(filename), "%s" SLASH "meshlink.conf", confbase);
if(unlink(filename)) {
if(errno == ENOENT) {
meshlink_packethdr_t *hdr;
// Validate arguments
- if(!mesh || !destination || len >= MAXSIZE - sizeof *hdr) {
+ if(!mesh || !destination || len >= MAXSIZE - sizeof(*hdr)) {
meshlink_errno = MESHLINK_EINVAL;
return false;
}
}
// Prepare the packet
- vpn_packet_t *packet = malloc(sizeof *packet);
+ vpn_packet_t *packet = malloc(sizeof(*packet));
if(!packet) {
meshlink_errno = MESHLINK_ENOMEM;
return false;
packet->probe = false;
packet->tcp = false;
- packet->len = len + sizeof *hdr;
+ packet->len = len + sizeof(*hdr);
hdr = (meshlink_packethdr_t *)packet->data;
- memset(hdr, 0, sizeof *hdr);
+ memset(hdr, 0, sizeof(*hdr));
// leave the last byte as 0 to make sure strings are always
// null-terminated if they are longer than the buffer
- strncpy(hdr->destination, destination->name, (sizeof hdr->destination) - 1);
- strncpy(hdr->source, mesh->self->name, (sizeof hdr->source) -1);
+ strncpy(hdr->destination, destination->name, (sizeof(hdr)->destination) - 1);
+ strncpy(hdr->source, mesh->self->name, (sizeof(hdr)->source) -1);
- memcpy(packet->data + sizeof *hdr, data, len);
+ memcpy(packet->data + sizeof(*hdr), data, len);
// Queue it
if(!meshlink_queue_push(&mesh->outpacketqueue, packet)) {
pthread_mutex_lock(&(mesh->mesh_mutex));
*nmemb = mesh->nodes->count;
- result = realloc(nodes, *nmemb * sizeof *nodes);
+ result = realloc(nodes, *nmemb * sizeof(*nodes));
if(result) {
meshlink_node_t **p = result;
pthread_mutex_lock(&(mesh->mesh_mutex));
- snprintf(filename, sizeof filename, "%s" SLASH "invitations", mesh->confbase);
+ snprintf(filename, sizeof(filename), "%s" SLASH "invitations", mesh->confbase);
if(mkdir(filename, 0700) && errno != EEXIST) {
logger(mesh, MESHLINK_DEBUG, "Could not create directory %s: %s\n", filename, strerror(errno));
meshlink_errno = MESHLINK_ESTORAGE;
continue;
char invname[PATH_MAX];
struct stat st;
- snprintf(invname, sizeof invname, "%s" SLASH "%s", filename, ent->d_name);
+ snprintf(invname, sizeof(invname), "%s" SLASH "%s", filename, ent->d_name);
if(!stat(invname, &st)) {
if(mesh->invitation_key && deadline < st.st_mtime)
count++;
closedir(dir);
- snprintf(filename, sizeof filename, "%s" SLASH "invitations" SLASH "ecdsa_key.priv", mesh->confbase);
+ snprintf(filename, sizeof(filename), "%s" SLASH "invitations" SLASH "ecdsa_key.priv", mesh->confbase);
// Remove the key if there are no outstanding invitations.
if(!count) {
exit_configuration(&mesh->config);
char portstr[10];
- snprintf(portstr, sizeof portstr, "%d", port);
- portstr[sizeof portstr - 1] = 0;
+ snprintf(portstr, sizeof(portstr), "%d", port);
+ portstr[sizeof(portstr) - 1] = 0;
modify_config_file(mesh, mesh->name, "Port", portstr, true);
// Ensure no host configuration file with that name exists
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, name);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, name);
if(!access(filename, F_OK)) {
logger(mesh, MESHLINK_DEBUG, "A host config file for %s already exists!\n", name);
meshlink_errno = MESHLINK_EEXIST;
char buf[18 + strlen(fingerprint)];
char cookiehash[64];
memcpy(buf, cookie, 18);
- memcpy(buf + 18, fingerprint, sizeof buf - 18);
- sha512(buf, sizeof buf, cookiehash);
+ memcpy(buf + 18, fingerprint, sizeof(buf) - 18);
+ sha512(buf, sizeof(buf), cookiehash);
b64encode_urlsafe(cookiehash, cookiehash, 18);
b64encode_urlsafe(cookie, cookie, 18);
free(fingerprint);
// Create a file containing the details of the invitation.
- snprintf(filename, sizeof filename, "%s" SLASH "invitations" SLASH "%s", mesh->confbase, cookiehash);
+ snprintf(filename, sizeof(filename), "%s" SLASH "invitations" SLASH "%s", mesh->confbase, cookiehash);
int ifd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600);
if(!ifd) {
logger(mesh, MESHLINK_DEBUG, "Could not create invitation file %s: %s\n", filename, strerror(errno));
fprintf(f, "ConnectTo = %s\n", mesh->self->name);
// Copy Broadcast and Mode
- snprintf(filename, sizeof filename, "%s" SLASH "meshlink.conf", mesh->confbase);
+ snprintf(filename, sizeof(filename), "%s" SLASH "meshlink.conf", mesh->confbase);
FILE *tc = fopen(filename, "r");
if(tc) {
char buf[1024];
- while(fgets(buf, sizeof buf, tc)) {
+ while(fgets(buf, sizeof(buf), tc)) {
if((!strncasecmp(buf, "Mode", 4) && strchr(" \t=", buf[4]))
|| (!strncasecmp(buf, "Broadcast", 9) && strchr(" \t=", buf[9]))) {
fputs(buf, f);
fprintf(f, "#---------------------------------------------------------------#\n");
fprintf(f, "Name = %s\n", mesh->self->name);
- snprintf(filename, sizeof filename, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->self->name);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->self->name);
fcopy(f, filename);
fclose(f);
char hisname[4096] = "";
int code, hismajor, hisminor = 0;
- if(!recvline(mesh, sizeof mesh->line) || sscanf(mesh->line, "%d %s %d.%d", &code, hisname, &hismajor, &hisminor) < 3 || code != 0 || hismajor != PROT_MAJOR || !check_id(hisname) || !recvline(mesh, sizeof mesh->line) || !rstrip(mesh->line) || sscanf(mesh->line, "%d ", &code) != 1 || code != ACK || strlen(mesh->line) < 3) {
+ if(!recvline(mesh, sizeof(mesh)->line) || sscanf(mesh->line, "%d %s %d.%d", &code, hisname, &hismajor, &hisminor) < 3 || code != 0 || hismajor != PROT_MAJOR || !check_id(hisname) || !recvline(mesh, sizeof(mesh)->line) || !rstrip(mesh->line) || sscanf(mesh->line, "%d ", &code) != 1 || code != ACK || strlen(mesh->line) < 3) {
logger(mesh, MESHLINK_DEBUG, "Cannot read greeting from peer\n");
closesocket(mesh->sock);
meshlink_errno = MESHLINK_ENETWORK;
}
// Start an SPTPS session
- if(!sptps_start(&mesh->sptps, mesh, true, false, key, hiskey, meshlink_invitation_label, sizeof meshlink_invitation_label, invitation_send, invitation_receive)) {
+ if(!sptps_start(&mesh->sptps, mesh, true, false, key, hiskey, meshlink_invitation_label, sizeof(meshlink_invitation_label), invitation_send, invitation_receive)) {
meshlink_errno = MESHLINK_EINTERNAL;
pthread_mutex_unlock(&(mesh->mesh_mutex));
return false;
int len;
- while((len = recv(mesh->sock, mesh->line, sizeof mesh->line, 0))) {
+ while((len = recv(mesh->sock, mesh->line, sizeof(mesh)->line, 0))) {
if(len < 0) {
if(errno == EINTR)
continue;
pthread_mutex_lock(&(mesh->mesh_mutex));
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->self->name);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, mesh->self->name);
FILE *f = fopen(filename, "r");
if(!f) {
logger(mesh, MESHLINK_DEBUG, "Could not open %s: %s\n", filename, strerror(errno));
}
char filename[PATH_MAX];
- snprintf(filename, sizeof filename, "%s" SLASH "hosts" SLASH "%s", mesh->confbase, name);
+ snprintf(filename, sizeof(filename), "%s" SLASH "hosts" SLASH "%s", mesh->confbase, name);
if(!access(filename, F_OK)) {
logger(mesh, MESHLINK_DEBUG, "File %s already exists, not importing\n", filename);
meshlink_errno = MESHLINK_EEXIST;
n++;
// the first *nmemb members of result can be re-used
if(n > *nmemb)
- copy = xzalloc(sizeof *copy);
+ copy = xzalloc(sizeof(*copy));
else
copy = *p;
copy->from = (meshlink_node_t*)e->from;
meshlink_handle_t *mesh = n->mesh;
if(!mesh->channel_accept_cb)
return;
- meshlink_channel_t *channel = xzalloc(sizeof *channel);
+ meshlink_channel_t *channel = xzalloc(sizeof(*channel));
channel->node = n;
channel->c = utcp_connection;
if(mesh->channel_accept_cb(mesh, channel, port, NULL, 0))
return NULL;
}
}
- meshlink_channel_t *channel = xzalloc(sizeof *channel);
+ meshlink_channel_t *channel = xzalloc(sizeof(*channel));
channel->node = n;
channel->receive_cb = cb;
channel->c = utcp_connect_ex(n->utcp, port, channel_recv, channel, flags);
static void __attribute__((constructor)) meshlink_init(void) {
crypto_init();
unsigned int seed;
- randomize(&seed, sizeof seed);
+ randomize(&seed, sizeof(seed));
srand(seed);
}