}
}
-/* Strip any trailing junk from the command */
-void strip_trailing_junk(char *cmd)
-{
- char *p;
- p = cmd + strlen(cmd) - 1;
-
- /* strip trailing junk from command */
- while ((p >= cmd) && (*p == '\n' || *p == '\r' || *p == ' '))
- *p-- = 0;
-}
-
-/* Strip any trailing slashes from a directory path */
-void strip_trailing_slashes(char *dir)
-{
- char *p;
- p = dir + strlen(dir) - 1;
-
- /* strip trailing slashes */
- while ((p >= dir) && (*p == '/'))
- *p-- = 0;
-}
-
-/*
- * Skip spaces
- * Returns: 0 on failure (EOF)
- * 1 on success
- * new address in passed parameter
- */
-int skip_spaces(char **msg)
-{
- char *p = *msg;
- if (!p) {
- return 0;
- }
- while (*p && *p == ' ') {
- p++;
- }
- *msg = p;
- return *p ? 1 : 0;
-}
-
-/*
- * Skip nonspaces
- * Returns: 0 on failure (EOF)
- * 1 on success
- * new address in passed parameter
- */
-int skip_nonspaces(char **msg)
-{
- char *p = *msg;
-
- if (!p) {
- return 0;
- }
- while (*p && *p != ' ') {
- p++;
- }
- *msg = p;
- return *p ? 1 : 0;
-}
-
-/* folded search for string - case insensitive */
-int
-fstrsch(char *a, char *b) /* folded case search */
-{
- register char *s1,*s2;
- register char c1, c2;
-
- s1=a;
- s2=b;
- while (*s1) { /* do it the fast way */
- if ((*s1++ | 0x20) != (*s2++ | 0x20))
- return 0; /* failed */
- }
- while (*a) { /* do it over the correct slow way */
- if (B_ISUPPER(c1 = *a)) {
- c1 = tolower((int)c1);
- }
- if (B_ISUPPER(c2 = *b)) {
- c2 = tolower((int)c2);
- }
- if (c1 != c2) {
- return 0;
- }
- a++;
- b++;
- }
- return 1;
-}
-
char *encode_time(time_t time, char *buf)
{
char *str;
switch (level) {
+ case L_BASE:
+ str = _("Base");
case L_FULL:
str = _("Full");
break;
{
char *cp = buf;
- *cp++ = S_ISDIR(mode) ? 'd' : S_ISBLK(mode) ? 'b' : S_ISCHR(mode) ? 'c' :
- S_ISLNK(mode) ? 'l' : '-';
+ *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' : '-';
*cp++ = mode & S_IRUSR ? 'r' : '-';
*cp++ = mode & S_IWUSR ? 'w' : '-';
*cp++ = (mode & S_ISUID
}
-int do_shell_expansion(char *name)
+int do_shell_expansion(char *name, int name_len)
{
/* ****FIXME***** this should work for Win32 too */
#define UNIX
int pid, wpid, stat;
int waitstatus;
char *shellcmd;
- void (*istat)(int), (*qstat)(int);
int i;
char echout[PATH_MAX + 256];
int pfd[2];
case 0: /* child */
/* look for shell */
- if ((shellcmd = getenv("SHELL")) == NULL)
+ if ((shellcmd = getenv("SHELL")) == NULL) {
shellcmd = "/bin/sh";
- close(1); dup(pfd[1]); /* attach pipes to stdin and stdout */
- close(2); dup(pfd[1]);
- for (i = 3; i < 32; i++) /* close everything else */
- close(i);
+ }
+ close(pfd[0]); /* close stdin */
+ dup2(pfd[1], 1); /* attach to stdout */
+ dup2(pfd[1], 2); /* and stderr */
strcpy(echout, "echo "); /* form echo command */
- strcat(echout, name);
+ bstrncat(echout, name, sizeof(echout));
execl(shellcmd, shellcmd, "-c", echout, NULL); /* give to shell */
exit(127); /* shouldn't get here */
default: /* parent */
/* read output from child */
- i = read(pfd[0], echout, sizeof echout);
- echout[--i] = 0; /* set end of string */
- /* look for first word or first line. */
- while (--i >= 0) {
- if (echout[i] == ' ' || echout[i] == '\n')
- echout[i] = 0; /* keep only first one */
+ echout[0] = 0;
+ do {
+ i = read(pfd[0], echout, sizeof echout);
+ } while (i == -1 && errno == EINTR);
+
+ if (i > 0) {
+ echout[--i] = 0; /* set end of string */
+ /* look for first line. */
+ while (--i >= 0) {
+ if (echout[i] == '\n') {
+ echout[i] = 0; /* keep only first one */
+ }
+ }
}
- istat = signal(SIGINT, SIG_IGN);
- qstat = signal(SIGQUIT, SIG_IGN);
/* wait for child to exit */
while ((wpid = wait(&waitstatus)) != pid && wpid != -1)
{ ; }
- signal(SIGINT, istat);
- signal(SIGQUIT, qstat);
- strcpy(name, echout);
+ strip_trailing_junk(echout);
+ if (strlen(echout) > 0) {
+ bstrncpy(name, echout, name_len);
+ }
stat = 1;
break;
}
from SpeakFreely by John Walker */
-void makeSessionKey(char *key, char *seed, int mode)
+void make_session_key(char *key, char *seed, int mode)
{
int j, k;
struct MD5Context md5c;
* to = recepients list
*
*/
-POOLMEM *edit_job_codes(void *mjcr, char *omsg, char *imsg, char *to)
+POOLMEM *edit_job_codes(JCR *jcr, char *omsg, char *imsg, char *to)
{
char *p, *str;
char add[20];
- JCR *jcr = (JCR *)mjcr;
*omsg = 0;
Dmsg1(200, "edit_job_codes: %s\n", imsg);
str = job_status_to_str(jcr->JobStatus);
break;
case 'i':
- sprintf(add, "%d", jcr->JobId);
+ bsnprintf(add, sizeof(add), "%d", jcr->JobId);
str = add;
break;
case 'j': /* Job name */
}
return omsg;
}
+
+void set_working_directory(char *wd)
+{
+ struct stat stat_buf;
+
+ if (wd == NULL) {
+ Emsg0(M_ERROR_TERM, 0, _("Working directory not defined. Cannot continue.\n"));
+ }
+ if (stat(wd, &stat_buf) != 0) {
+ Emsg1(M_ERROR_TERM, 0, _("Working Directory: \"%s\" not found. Cannot continue.\n"),
+ wd);
+ }
+ if (!S_ISDIR(stat_buf.st_mode)) {
+ Emsg1(M_ERROR_TERM, 0, _("Working Directory: \"%s\" is not a directory. Cannot continue.\n"),
+ wd);
+ }
+ working_directory = wd; /* set global */
+}