4 * Various reporting routines.
5 * Originally copied from GIT source.
7 * Copyright (C) Linus Torvalds, 2005
12 static void report(const char *prefix
, const char *err
, va_list params
)
15 vsnprintf(msg
, sizeof(msg
), err
, params
);
16 fprintf(stderr
, " %s%s\n", prefix
, msg
);
19 static NORETURN
void usage_builtin(const char *err
)
21 fprintf(stderr
, "\n Usage: %s\n", err
);
25 static NORETURN
void die_builtin(const char *err
, va_list params
)
27 report(" Fatal: ", err
, params
);
31 static void error_builtin(const char *err
, va_list params
)
33 report(" Error: ", err
, params
);
36 static void warn_builtin(const char *warn
, va_list params
)
38 report(" Warning: ", warn
, params
);
41 /* If we are in a dlopen()ed .so write to a global variable would segfault
42 * (ugh), so keep things static. */
43 static void (*usage_routine
)(const char *err
) NORETURN
= usage_builtin
;
44 static void (*die_routine
)(const char *err
, va_list params
) NORETURN
= die_builtin
;
45 static void (*error_routine
)(const char *err
, va_list params
) = error_builtin
;
46 static void (*warn_routine
)(const char *err
, va_list params
) = warn_builtin
;
48 void set_die_routine(void (*routine
)(const char *err
, va_list params
) NORETURN
)
50 die_routine
= routine
;
53 void usage(const char *err
)
58 void die(const char *err
, ...)
62 va_start(params
, err
);
63 die_routine(err
, params
);
67 int error(const char *err
, ...)
71 va_start(params
, err
);
72 error_routine(err
, params
);
77 void warning(const char *warn
, ...)
81 va_start(params
, warn
);
82 warn_routine(warn
, params
);
86 uid_t
parse_target_uid(const char *str
, const char *tid
, const char *pid
)
88 struct passwd pwd
, *result
;
94 /* UID and PID are mutually exclusive */
96 ui__warning("PID/TID switch overriding UID\n");
101 getpwnam_r(str
, &pwd
, buf
, sizeof(buf
), &result
);
103 if (result
== NULL
) {
105 int uid
= strtol(str
, &endptr
, 10);
107 if (*endptr
!= '\0') {
108 ui__error("Invalid user %s\n", str
);
112 getpwuid_r(uid
, &pwd
, buf
, sizeof(buf
), &result
);
114 if (result
== NULL
) {
115 ui__error("Problems obtaining information for user %s\n",
121 return result
->pw_uid
;
This page took 0.037224 seconds and 6 git commands to generate.