Skip to content

Commit

Permalink
Merge branch 'donald/cleanup/affinity'
Browse files Browse the repository at this point in the history
* donald/cleanup/affinity:
  mx_util: Cleanup mx_strvec_join()
  mx_util: Clean up mx_*cpuset*()
  mx_util: Cleanup mx_malloc_forever()
  • Loading branch information
mariux committed Oct 16, 2015
2 parents 96df4dc + 652ab70 commit 215dd9d
Showing 1 changed file with 74 additions and 61 deletions.
135 changes: 74 additions & 61 deletions mx_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include <libgen.h>
#include <unistd.h>

#include <ctype.h>

//#include <sys/types.h>
//#include <sys/stat.h>
#include <fcntl.h>
Expand Down Expand Up @@ -556,11 +558,13 @@ int mx_strtoi64(char *str, int64_t *to)
void *mx_malloc_forever(size_t size)
{
void *ret;

do {
ret=malloc(size);
ret = malloc(size);
assert(ret || (!ret && errno == ENOMEM));
} while (!ret);
return ret ;
} while (!ret);

return ret ;
}

char *mx_strdup_forever(char *str)
Expand Down Expand Up @@ -1171,7 +1175,7 @@ char **mx_strvec_from_str(char *str)
return strvec;
}

int mx_str_to_cpuset(cpu_set_t* cpuset_ptr,char *str)
int mx_str_to_cpuset(cpu_set_t* cpuset_ptr, char *str)
{
char c;
int cpu_low;
Expand All @@ -1182,51 +1186,57 @@ int mx_str_to_cpuset(cpu_set_t* cpuset_ptr,char *str)
CPU_ZERO(cpuset_ptr);

while (1) {
c=*str;
if (c=='\0') {
c = *str;

if (c == '\0')
break;
} else if (c>='0' && c<='9') {
cpu_low=strtol(str,&next,10);
str=next;
} else {

if (!isdigit(c))
return -(errno=EINVAL);
}

if (cpu_low<0 || cpu_low>=CPU_SETSIZE) {
cpu_low = strtol(str, &next, 10);
str = next;

if (cpu_low < 0 || cpu_low >= CPU_SETSIZE)
return -(errno=ERANGE);

c = *str;

CPU_SET(cpu_low, cpuset_ptr);

if (c == '\0') {
break;
} else if (c == ',') {
str++;
continue;
} else if (c != '-') {
return -(errno=EINVAL);
}

c=*str;
if (c=='\0') {
CPU_SET(cpu_low,cpuset_ptr);
str++;
c = *str;

if (!isdigit(c))
return -(errno=EINVAL);

cpu_high = strtol(str, &next, 10);
str = next;

if (cpu_high < 0 || cpu_high >= CPU_SETSIZE || cpu_high < cpu_low)
return -(errno=ERANGE);

for (i = cpu_low+1; i <= cpu_high; i++)
CPU_SET(i, cpuset_ptr);

c = *str;

if (c == '\0') {
break;
} else if (c==',') {
CPU_SET(cpu_low,cpuset_ptr);
str++;
} else if (c=='-') {
c=*++str;
if (c>='0' && c<='9') {
cpu_high=strtol(str,&next,10);
str=next;
if (cpu_high<0 || cpu_high>=CPU_SETSIZE || cpu_high<cpu_low) {
return -(errno=EINVAL);
}
for (i=cpu_low;i<=cpu_high;i++) {
CPU_SET(i,cpuset_ptr);
} c=*str++;
if (c=='\0') {
break;
} else if (c==',') {
/* noop */
} else {
return -(errno=EINVAL);
}
} else {
return -(errno=EINVAL);
}
} else {
} else if (c != ',') {
return -(errno=EINVAL);
}

str++;
}
return 0;
}
Expand All @@ -1240,29 +1250,28 @@ char *mx_strvec_join(char *sep,char **strvec)
char *p;
int i;

assert(sep);
assert(strvec);

for (i=0;(in=strvec[i]);i++) {
elements++;
len+=strlen(in);
len += strlen(in);
}
if (elements==0) return mx_strdup_forever("");
len+=strlen(sep)*(elements-1);
out=mx_malloc_forever(len+1);
p=out;

if (elements == 0)
return mx_strdup_forever("");

len += strlen(sep)*(elements-1);
out = mx_malloc_forever(len+1);
p = out;

for (i=0;i<elements-1;i++) {
in=strvec[i];
while (*in)
*p++ = *in++;
in=sep;
while (*in)
*p++ = *in++;
p = stpcpy(p, strvec[i]);
p = stpcpy(p, sep);
}
in=strvec[i];
while (*in)
*p++ = *in++;
in=sep;
*p='\0';
return(out);
p = stpcpy(p, strvec[i]);

return out;
}

char *mx_cpuset_to_str(cpu_set_t* cpuset_ptr)
Expand All @@ -1276,16 +1285,20 @@ char *mx_cpuset_to_str(cpu_set_t* cpuset_ptr)
char *out;

strvec=mx_strvec_new();
if (!strvec) return NULL;
if (!strvec)
return NULL;

cpu=0;
while(1) {
if (cpu>=CPU_SETSIZE) break;
if (cpu>=CPU_SETSIZE)
break;

if (CPU_ISSET(cpu,cpuset_ptr)) {
cpu_low=cpu++;
cpu_low=cpu;
while (1) {
if (cpu>=CPU_SETSIZE || !CPU_ISSET(cpu,cpuset_ptr)) break;
cpu++;
if (cpu>=CPU_SETSIZE || !CPU_ISSET(cpu,cpuset_ptr))
break;
}
cpu_high=cpu-1;
if (cpu_low==cpu_high) {
Expand Down

0 comments on commit 215dd9d

Please sign in to comment.