|
|
BSD 4.3
/*
* Create a bid for the command on the command line
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/stat.h>
#include <errno.h>
#include <pwd.h>
#include "dsh.h"
#include "dbid.h"
#define TOKENSIZE 120
/*
* Get the next token
*/
char *
nexttoken (p, token)
char *p;
char *token;
{
while (*p == ' ' || *p == '\t')
p++;
while (*p != ' ' && *p != '\t' && *p != 0)
*token++ = *p++;
*token = 0;
return (p);
}
main (argc, argv)
int argc;
char *argv[];
{
char token[TOKENSIZE];
char *p;
bool allfound;
double la[3];
int fd, rv;
int pid, port;
struct bidmsg b;
struct passwd *pwd;
struct passwd *getpwuid();
if (argc != 5) {
fprintf (stderr, "dbid usage: dbid <command> <host> <port#> <host>\n");
for (rv = 0; rv <argc; rv++) {
fprintf (stderr, "%s || ", argv[rv]);
}
fprintf (stderr, "\n");
exit (-1);
}
/* find the elements of a pipe */
getpath ();
p = argv[1];
strcpy (token, "|");
allfound = TRUE;
while (*p != 0) {
if (*p != 0 && strcmp ("|", token) == 0) {
p = nexttoken (p, token);
if (*token != 0) {
if (findcmd (token) != 0) {
allfound = FALSE;
break;
}
}
}
p = nexttoken (p, token);
}
/* get the load average */
getloadave (la);
/* simple bidding */
if (allfound) {
b.bm_bid = 10.0 / la[0];
} else {
b.bm_bid = NOBID;
}
strcpy (b.bm_host, argv[4]);
/* get the directory to use */
pwd = getpwuid (getuid());
pid = getpid();
rv = getstringrc (".dshrc", "dir", token);
if (rv < 0) {
sprintf (b.bm_dir, "%s/dsh%d", pwd->pw_dir, pid);
} else {
if (token[0] == '/' || token[0] == '~') {
/* this is an absolute path */
sprintf (b.bm_dir, "%s/dsh%d", token, pid);
} else {
/* a relative path */
sprintf (b.bm_dir, "%s/%s/dsh%d", pwd->pw_dir, token, pid);
}
}
/* return bid */
port = 0; /* no particular port */
fd = makedgsocket (&port);
if (fd < 0) {
error ("dbid: couldn't open socket to send over");
}
/*
fprintf (stderr, "senddg (%d, %x, %d, %s, %d)\n",
fd, &b, sizeof (struct bidmsg), argv[2], atoi(argv[3]));
*/
rv = senddg (fd, &b, sizeof (struct bidmsg), argv[2], atoi(argv[3]));
if (rv < 0) {
error ("dbid: couldn't send bid");
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.