]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/processor-trace/include/pt_version.h
zfs: merge openzfs/zfs@c0cf6ed67
[FreeBSD/FreeBSD.git] / contrib / processor-trace / include / pt_version.h
1 /*
2  * Copyright (c) 2018-2019, Intel Corporation
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  *  * Redistributions of source code must retain the above copyright notice,
8  *    this list of conditions and the following disclaimer.
9  *  * Redistributions in binary form must reproduce the above copyright notice,
10  *    this list of conditions and the following disclaimer in the documentation
11  *    and/or other materials provided with the distribution.
12  *  * Neither the name of Intel Corporation nor the names of its contributors
13  *    may be used to endorse or promote products derived from this software
14  *    without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef PT_VERSION_H
30 #define PT_VERSION_H
31
32 #include "intel-pt.h"
33
34 #include <stdio.h>
35 #include <inttypes.h>
36
37
38 static inline int pt_fprint_version(FILE *file, struct pt_version version)
39 {
40         if (version.build) {
41                 if (version.ext && version.ext[0])
42                         return fprintf(file, "%" PRIu8 ".%" PRIu8 ".%" PRIu16
43                                        "-%" PRIu32 "-%s", version.major,
44                                        version.minor, version.patch,
45                                        version.build, version.ext);
46                 else
47                         return fprintf(file, "%" PRIu8 ".%" PRIu8 ".%" PRIu16
48                                        "-%" PRIu32 "", version.major,
49                                        version.minor, version.patch,
50                                        version.build);
51         } else {
52                 if (version.ext && version.ext[0])
53                         return fprintf(file, "%" PRIu8 ".%" PRIu8 ".%" PRIu16
54                                        "-%s", version.major, version.minor,
55                                        version.patch, version.ext);
56                 else
57                         return fprintf(file, "%" PRIu8 ".%" PRIu8 ".%" PRIu16,
58                                        version.major, version.minor,
59                                        version.patch);
60         }
61 }
62
63 static inline int pt_print_version(struct pt_version version)
64 {
65         return pt_fprint_version(stdout, version);
66 }
67
68 static inline void pt_print_tool_version(const char *name)
69 {
70         struct pt_version v = {
71                 /* .major = */ PT_VERSION_MAJOR,
72                 /* .minor = */ PT_VERSION_MINOR,
73                 /* .patch = */ PT_VERSION_PATCH,
74                 /* .build = */ PT_VERSION_BUILD,
75                 /* .ext = */ PT_VERSION_EXT
76         };
77
78         if (!name)
79                 name = "<unknown>";
80
81         printf("%s-", name);
82         pt_print_version(v);
83         printf(" / libipt-");
84         pt_print_version(pt_library_version());
85         printf("\n");
86 }
87
88 #endif /* PT_VERSION_H */