~ubuntu-branches/ubuntu/trusty/util-linux/trusty-proposed

« back to all changes in this revision

Viewing changes to lib/cpuset.c

  • Committer: Package Import Robot
  • Author(s): LaMont Jones
  • Date: 2011-11-03 15:38:23 UTC
  • mto: (4.5.5 sid) (1.6.4)
  • mto: This revision was merged to the branch mainline in revision 85.
  • Revision ID: package-import@ubuntu.com-20111103153823-10sx16jprzxlhkqf
ImportĀ upstreamĀ versionĀ 2.20.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
#include <sys/syscall.h>
21
21
 
22
22
#include "cpuset.h"
 
23
#include "c.h"
23
24
 
24
25
static inline int val_to_char(int v)
25
26
{
146
147
char *cpulist_create(char *str, size_t len,
147
148
                        cpu_set_t *set, size_t setsize)
148
149
{
149
 
        int i;
 
150
        size_t i;
150
151
        char *ptr = str;
151
152
        int entry_made = 0;
152
153
        size_t max = cpuset_nbits(setsize);
153
154
 
154
155
        for (i = 0; i < max; i++) {
155
156
                if (CPU_ISSET_S(i, setsize, set)) {
156
 
                        int j, rlen;
157
 
                        int run = 0;
 
157
                        int rlen;
 
158
                        size_t j, run = 0;
158
159
                        entry_made = 1;
159
160
                        for (j = i + 1; j < max; j++) {
160
161
                                if (CPU_ISSET_S(j, setsize, set))
163
164
                                        break;
164
165
                        }
165
166
                        if (!run)
166
 
                                rlen = snprintf(ptr, len, "%d,", i);
 
167
                                rlen = snprintf(ptr, len, "%zd,", i);
167
168
                        else if (run == 1) {
168
 
                                rlen = snprintf(ptr, len, "%d,%d,", i, i + 1);
 
169
                                rlen = snprintf(ptr, len, "%zd,%zd,", i, i + 1);
169
170
                                i++;
170
171
                        } else {
171
 
                                rlen = snprintf(ptr, len, "%d-%d,", i, i + run);
 
172
                                rlen = snprintf(ptr, len, "%zd-%zd,", i, i + run);
172
173
                                i += run;
173
174
                        }
174
 
                        if (rlen < 0 || rlen + 1 > len)
 
175
                        if (rlen < 0 || (size_t) rlen + 1 > len)
175
176
                                return NULL;
176
177
                        ptr += rlen;
177
 
                        len -= rlen;
 
178
                        if (rlen > 0 && len > (size_t) rlen)
 
179
                                len -= rlen;
 
180
                        else
 
181
                                len = 0;
178
182
                }
179
183
        }
180
184
        ptr -= entry_made;
196
200
        for (cpu = cpuset_nbits(setsize) - 4; cpu >= 0; cpu -= 4) {
197
201
                char val = 0;
198
202
 
199
 
                if (len == (ptr - str))
 
203
                if (len == (size_t) (ptr - str))
200
204
                        break;
201
205
 
202
206
                if (CPU_ISSET_S(cpu, setsize, set))
303
307
 
304
308
#ifdef TEST_PROGRAM
305
309
 
306
 
#include <err.h>
307
310
#include <getopt.h>
308
311
 
309
312
int main(int argc, char *argv[])
313
316
        char *buf, *mask = NULL, *range = NULL;
314
317
        int ncpus = 2048, rc, c;
315
318
 
316
 
        struct option longopts[] = {
 
319
        static const struct option longopts[] = {
317
320
            { "ncpus", 1, 0, 'n' },
318
321
            { "mask",  1, 0, 'm' },
319
322
            { "range", 1, 0, 'r' },
366
369
        printf("[%s]\n", cpulist_create(buf, buflen, set, setsize));
367
370
 
368
371
        free(buf);
 
372
        free(range);
369
373
        cpuset_free(set);
370
374
 
371
375
        return EXIT_SUCCESS;