]> granicus.if.org Git - strace/commitdiff
tests: perform more strict structure allocation in sched_xetattr test
authorEugene Syromyatnikov <evgsyr@gmail.com>
Tue, 6 Sep 2016 02:08:10 +0000 (05:08 +0300)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 8 Sep 2016 01:37:14 +0000 (01:37 +0000)
Use tail_alloc with precise size of the structure.

* tests/sched_xetattr.c (main): Eliminate usage of anonymous union type.
Rename sched to sched_attr.  Change type of sched_attr to struct
pointer.  Use tail_alloc for sched_attr allocation, update printf
statements accrodingly.

tests/sched_xetattr.c

index 8a1afe960539d08496f110e54a33e25db9e48f77..be3c6324abf9a5102aa18ffcb901a8741163bc09 100644 (file)
 int
 main(void)
 {
-       static union {
-               struct {
-                       uint32_t size;
-                       uint32_t sched_policy;
-                       uint64_t sched_flags;
-                       uint32_t sched_nice;
-                       uint32_t sched_priority;
-                       uint64_t sched_runtime;
-                       uint64_t sched_deadline;
-                       uint64_t sched_period;
-               } attr;
-               char buf[256];
-       } sched;
+       struct {
+               uint32_t size;
+               uint32_t sched_policy;
+               uint64_t sched_flags;
+               uint32_t sched_nice;
+               uint32_t sched_priority;
+               uint64_t sched_runtime;
+               uint64_t sched_deadline;
+               uint64_t sched_period;
+       } *sched_attr = tail_alloc(sizeof(*sched_attr));
 
-       if (syscall(__NR_sched_getattr, 0, &sched, sizeof(sched), 0))
+       if (syscall(__NR_sched_getattr, 0, sched_attr, sizeof(*sched_attr), 0))
                perror_msg_and_skip("sched_getattr");
 
        printf("sched_getattr\\(0, \\{size=%u, sched_policy=SCHED_[A-Z]+"
               ", sched_flags=%s, sched_nice=%u, sched_priority=%u"
               ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64
-              ", sched_period=%" PRIu64 "\\}, 256, 0\\) += 0\n",
-              sched.attr.size,
-              sched.attr.sched_flags ? "SCHED_FLAG_RESET_ON_FORK" : "0",
-              sched.attr.sched_nice,
-              sched.attr.sched_priority,
-              sched.attr.sched_runtime,
-              sched.attr.sched_deadline,
-              sched.attr.sched_period);
+              ", sched_period=%" PRIu64 "\\}, %u, 0\\) += 0\n",
+              sched_attr->size,
+              sched_attr->sched_flags ? "SCHED_FLAG_RESET_ON_FORK" : "0",
+              sched_attr->sched_nice,
+              sched_attr->sched_priority,
+              sched_attr->sched_runtime,
+              sched_attr->sched_deadline,
+              sched_attr->sched_period,
+              (unsigned) sizeof(*sched_attr));
 
-       sched.attr.sched_flags |= 1;
-       if (syscall(__NR_sched_setattr, 0, &sched, 0))
+       sched_attr->sched_flags |= 1;
+       if (syscall(__NR_sched_setattr, 0, sched_attr, 0))
                perror_msg_and_skip("sched_setattr");
 
        printf("sched_setattr\\(0, \\{size=%u, sched_policy=SCHED_[A-Z]+"
               ", sched_flags=%s, sched_nice=%u, sched_priority=%u"
               ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64
               ", sched_period=%" PRIu64 "\\}, 0\\) += 0\n",
-              sched.attr.size,
+              sched_attr->size,
               "SCHED_FLAG_RESET_ON_FORK",
-              sched.attr.sched_nice,
-              sched.attr.sched_priority,
-              sched.attr.sched_runtime,
-              sched.attr.sched_deadline,
-              sched.attr.sched_period);
+              sched_attr->sched_nice,
+              sched_attr->sched_priority,
+              sched_attr->sched_runtime,
+              sched_attr->sched_deadline,
+              sched_attr->sched_period);
 
        return 0;
 }