/*
* util.c miscellaneous utility subroutines for Bacula
- *
+ *
* Kern Sibbald, MM
*
* Version $Id$
}
}
-/* Convert spaces to non-space character.
+/* Convert spaces to non-space character.
* This makes scanf of fields containing spaces easier.
*/
void
}
}
-/* Convert spaces to non-space character.
+/* Convert spaces to non-space character.
* This makes scanf of fields containing spaces easier.
*/
void
/*
* Convert Job Termination Status into a string
*/
-const char *job_status_to_str(int stat)
+const char *job_status_to_str(int stat)
{
const char *str;
/*
* Convert Job Type into a string
*/
-const char *job_type_to_str(int type)
+const char *job_type_to_str(int type)
{
const char *str;
/*
* Convert Job Level into a string
*/
-const char *job_level_to_str(int level)
+const char *job_level_to_str(int level)
{
const char *str;
char *encode_mode(mode_t mode, char *buf)
{
- char *cp = buf;
+ char *cp = buf;
*cp++ = S_ISDIR(mode) ? 'd' : S_ISBLK(mode) ? 'b' : S_ISCHR(mode) ? 'c' :
S_ISLNK(mode) ? 'l' : S_ISFIFO(mode) ? 'f' : S_ISSOCK(mode) ? 's' : '-';
#endif
#ifdef HAVE_GETHOSTID
sprintf(s + strlen(s), "%lu", (unsigned long) gethostid());
-#endif
-#ifdef HAVE_GETDOMAINNAME
- getdomainname(s + strlen(s), 256);
#endif
gethostname(s + strlen(s), 256);
sprintf(s + strlen(s), "%u", (unsigned)getuid());
* %j = Unique Job name
* %l = job level
* %n = Unadorned Job name
+ * %s = Since time
* %t = Job type (Backup, ...)
* %r = Recipients
* %v = Volume name
*
* omsg = edited output message
* imsg = input string containing edit codes (%x)
- * to = recepients list
+ * to = recepients list
*
*/
-POOLMEM *edit_job_codes(JCR *jcr, char *omsg, char *imsg, const char *to)
+POOLMEM *edit_job_codes(JCR *jcr, char *omsg, char *imsg, const char *to)
{
char *p, *q;
const char *str;
str = "%";
break;
case 'c':
- str = jcr->client_name;
- if (!str) {
- str = "";
+ if (jcr) {
+ str = jcr->client_name;
+ } else {
+ str = "*none*";
}
break;
case 'd':
str = my_name; /* Director's name */
break;
case 'e':
- str = job_status_to_str(jcr->JobStatus);
+ if (jcr) {
+ str = job_status_to_str(jcr->JobStatus);
+ } else {
+ str = "*none*";
+ }
break;
case 'i':
- bsnprintf(add, sizeof(add), "%d", jcr->JobId);
- str = add;
+ if (jcr) {
+ bsnprintf(add, sizeof(add), "%d", jcr->JobId);
+ str = add;
+ } else {
+ str = "*none*";
+ }
break;
case 'j': /* Job name */
- str = jcr->Job;
+ if (jcr) {
+ str = jcr->Job;
+ } else {
+ str = "*none*";
+ }
break;
case 'l':
- str = job_level_to_str(jcr->JobLevel);
+ if (jcr) {
+ str = job_level_to_str(jcr->JobLevel);
+ } else {
+ str = "*none*";
+ }
break;
case 'n':
- bstrncpy(name, jcr->Job, sizeof(name));
- /* There are three periods after the Job name */
- for (i=0; i<3; i++) {
- if ((q=strrchr(name, '.')) != NULL) {
- *q = 0;
+ if (jcr) {
+ bstrncpy(name, jcr->Job, sizeof(name));
+ /* There are three periods after the Job name */
+ for (i=0; i<3; i++) {
+ if ((q=strrchr(name, '.')) != NULL) {
+ *q = 0;
+ }
}
+ str = name;
+ } else {
+ str = "*none*";
}
- str = name;
break;
case 'r':
str = to;
break;
+ case 's': /* since time */
+ if (jcr && jcr->stime) {
+ str = jcr->stime;
+ } else {
+ str = "*none*";
+ }
+ break;
case 't':
- str = job_type_to_str(jcr->JobType);
+ if (jcr) {
+ str = job_type_to_str(jcr->JobType);
+ } else {
+ str = "*none*";
+ }
break;
case 'v':
- if (jcr->VolumeName && jcr->VolumeName[0]) {
- str = jcr->VolumeName;
+ if (jcr) {
+ if (jcr->VolumeName && jcr->VolumeName[0]) {
+ str = jcr->VolumeName;
+ } else {
+ str = "";
+ }
} else {
- str = "";
+ str = "*none*";
}
break;
default:
void set_working_directory(char *wd)
{
- struct stat stat_buf;
+ struct stat stat_buf;
if (wd == NULL) {
Emsg0(M_ERROR_TERM, 0, _("Working directory not defined. Cannot continue.\n"));