Changeset - 0ec89d48ac6d
[Not reviewed]
default
0 2 0
Nathan Brink (binki) - 16 years ago 2010-01-10 02:34:01
ohnobinki@ohnopublishing.net
correct general_info.xml location, recursive mkdir() support
2 files changed with 45 insertions and 10 deletions:
0 comments (0 inline, 0 general)
src/server/distrend.c
Show inline comments
 
@@ -56,6 +56,13 @@ struct general_info
 

	
 
  struct distrend_config *config;
 

	
 
  struct
 
  {
 
    /** general_info.xml */
 
    char *geninfo;
 
    
 
  } files;
 

	
 
  int jobs_in_queue;
 
  unsigned int free_clients;
 
  unsigned int rendering_clients;
 
@@ -86,6 +93,7 @@ int import_general_info(struct general_i
 
int updateJobStatsXML(struct distrenjob *job);
 

	
 
char *job_getserialfilename(struct general_info *, unsigned int jobnum);
 
int distren_mkdir_recurse(char *fname);
 

	
 
/* ********************** Functions ************************* */
 

	
 
@@ -105,7 +113,7 @@ int distrend_do()
 
/** 
 
    Fill variables at startup from XML dumps or defaults
 
 */
 
int start_data(struct general_info *general_info, char *datadir)
 
int start_data(struct general_info *general_info)
 
{
 
  struct stat buffer;
 

	
 
@@ -128,9 +136,9 @@ int start_data(struct general_info *gene
 

	
 
  fprintf(stderr, "Initialized default global and queue states\n");
 

	
 
  if(stat("general_info.xml", &buffer) == 0)
 
  if(stat(general_info->files.geninfo, &buffer) == 0)
 
    {
 
      fprintf(stderr, "previous state file found, loading:\n");
 
      fprintf(stderr, "Previous state file found, loading:\n");
 

	
 
      fprintf(stderr, "Parsing XML files and restoring previous state...\n");
 
      if(import_general_info(general_info))
 
@@ -287,7 +295,7 @@ int prepare_distrenjob(struct general_in
 
  }
 

	
 
  _distren_asprintf(&path_with_num, "stor/job%d/out/", distrenjob->jobnum);
 
  fprintf(stderr, ">>NOT<< creating dir ``%s''\n", path_with_num); /*< @TODO recursively create job directory */
 
  distren_mkdir_recurse(path_with_num);
 
  serialfile = job_getserialfilename(geninfo, distrenjob->jobnum);
 

	
 
  free(path_with_num);
 
@@ -667,11 +675,8 @@ int distrend_do_config(int argc, char *a
 
      CFG_END()
 
    };
 

	
 
  struct distrenjob *distrenjob;
 
  cfg_t *cfg_listen;
 

	
 
  int tmp;
 

	
 
  fprintf(stderr, "%s:%d: running config\n", __FILE__, __LINE__);
 
  *config = malloc(sizeof(struct distrend_config));
 
  myopts[1].simple_value = &(*config)->datadir;
 
@@ -711,7 +716,7 @@ void update_general_info(struct general_
 
  xmlTextWriterPtr writer;
 
  char *tmp;
 

	
 
  writer = xmlNewTextWriterFilename("general_info.xml", 0);
 
  writer = xmlNewTextWriterFilename(geninfo->files.geninfo, 0);
 
  xmlTextWriterStartDocument(writer, NULL, "utf-8", NULL);
 

	
 
  xmlTextWriterStartElement(writer, (xmlChar*)"general_info");
 
@@ -742,7 +747,7 @@ int import_general_info(struct general_i
 
  xmlDocPtr doc;
 
  xmlNodePtr cur;
 

	
 
  doc = xmlParseFile("general_info.xml");
 
  doc = xmlParseFile(general_info->files.geninfo);
 
  cur = xmlDocGetRootElement(doc);
 
  if (xmlStrcmp(cur->name, (xmlChar*)"general_info"))
 
    {
 
@@ -1175,7 +1180,11 @@ int main(int argc, char *argv[])
 
  if(distrend_do_config(argc, argv, &general_info.config))
 
    return 1;
 

	
 
  if(start_data(&general_info, general_info.config->datadir))
 
  /** preset paths */
 
  _distren_asprintf(&general_info.files.geninfo, "%s/general_info.xml",
 
		    general_info.config->datadir);
 

	
 
  if(start_data(&general_info))
 
    {
 
      fprintf(stderr, "%s:%d: start_data() failed\n", __FILE__, __LINE__);
 
      return 1;
 
@@ -1300,6 +1309,9 @@ int main(int argc, char *argv[])
 

	
 
  xmlcleanup();
 

	
 
  /** free() paths */
 
  free(general_info.files.geninfo);
 

	
 
  return 0;
 
}
 

	
 
@@ -1320,3 +1332,23 @@ char *job_getserialfilename(struct gener
 

	
 
  return filename;
 
}
 

	
 
int distren_mkdir_recurse(char *dirname)
 
{
 
  size_t counter;
 
  char *nextdir;
 

	
 
  nextdir = strdup(dirname);
 
  for(counter = 0; nextdir[counter]; counter ++)
 
    {
 
      /** @TODO OS-portabalize the path-separators */
 
      if(nextdir[counter] == '/')
 
	{
 
	  nextdir[counter] = '\0';
 
	  mkdir(nextdir, S_IRWXU | S_IRGRP | S_IROTH);
 
	  nextdir[counter] = '/';
 
	}
 
    }
 

	
 
  return 0;
 
}
src/server/listen.c
Show inline comments
 
@@ -79,6 +79,9 @@ int distrend_listen(struct distrend_conf
 
  FD_ZERO(&(*clients)->readfds);
 
  FD_ZERO(&(*clients)->writefds);
 

	
 
  /** accept()able sockets are considered ``readable'' */
 
  FD_SET(config->listens->sock, &(*clients)->readfds);
 

	
 
  return 0;
 
}
 

	
0 comments (0 inline, 0 general)