Beispiel #1
0
static int
sepfield(char *str, int count)
{
  char *ptr, *end;
  char tmpval[1024];

  strcpy(tmpval, str);
  ptr = strchr(tmpval, '#');
  end = tmpval + strlen(tmpval);
  if (ptr)
    *ptr = (char) 0;
  ptr = strparse(tmpval, PARSE_SEPARATORS);
  while (ptr) {
    strncpy(field[count], ptr, STRING_MAX - 1);
    field[count][STRING_MAX - 1] = (char) 0;
    count++;
    ptr = strparse((char *) NULL, PARSE_SEPARATORS);
  }
#ifdef DEBUG
  printf("sepfield: %d\t", count);
  for (j = 0; j < count; j++)
    printf("->%s<-", field[j]);
  printf("\n");
#endif
  return count;
}
Beispiel #2
0
DIR *opendir(const char *dirname) {
    DIR *dirp;
    char *list;

    dirp = malloc(sizeof(DIR));
    if (!dirp) return NULL;

    dirp->fd = open(dirname, ACCS_READ);
    if (dirp->fd < 0) {
        free(dirp);
        return NULL;
    }

    list = rp_list(fd_rp(dirp->fd));

    dirp->entryv = strparse(list, "\t");

    if (!dirp->entryv) {
        free(dirp);
        return NULL;
    }

    dirp->dirpos = 0;

    return dirp;
}
Beispiel #3
0
DIR *opendir(const char *dirname) {
	DIR *dirp;
	char *list;

	dirp = malloc(sizeof(DIR));
	if (!dirp) return NULL;

	dirp->fd = open(dirname, STAT_READER);
	if (dirp->fd < 0) {
		free(dirp);
		return NULL;
	}

	if (!rp_type(fd_rp(dirp->fd), "dir")) {
		errno = ENOTDIR;
		close(dirp->fd);
		free(dirp);
		return NULL;
	}

	list = rp_list(fd_rp(dirp->fd));

	dirp->entryv = strparse(list, "\t");

	if (!dirp->entryv) {
		free(dirp);
		return NULL;
	}

	dirp->dirpos = 0;

	return dirp;
}
Beispiel #4
0
Datei: lib.c Projekt: kahrs/cda
int
wrd(void)
{
	static int nlines;
	char *l, *src[13];
	int n;

	l = Brdline(wr, '\n');
	if(l == 0)
		return -1;
	++nlines;
	l[BLINELEN(wr)-1] = 0;
	n = strparse(l, src, 13, " ");
	if(n != 12 || src[0][0] == 0 || src[0][1] != 0){
		fprint(2, "wrap file format error, line %d\n", nlines);
		exits("format");
	}
	wbuf.stype = src[0][0];
	wbuf.mark = strtol(src[1], 0, 10);
	strncpy(wbuf.sname, src[2], sizeof wbuf.sname);
	wbuf.slen = strtol(src[3], 0, 10);
	coord(&wbuf.pent[0], &src[4]);
	coord(&wbuf.pent[1], &src[8]);
	return 0;
}
Beispiel #5
0
void readUserObjects(void)
{
 FILE *fp;
 String atom_name, push_action, label, icon, drag_icon;
 char s[MAXAPPSTRINGLEN];
 int i, p;

 usrObjects.nr = 0;
 usrObjects.obj = NULL;

 if (!(fp = fopen(resources.usrobj_file, "r")))
 {
     if (exists(resources.usrobj_file))
	 error(topShell, "Cannot read object file", resources.usrobj_file);
     return;
 }

 for (i=0; (p = parseObj(fp, &atom_name, &push_action, &label, &icon, &drag_icon)) > 0; i++)
 {
     usrObjects.obj = (UserObjectRec *) XTREALLOC(usrObjects.obj, (i+1) * sizeof(UserObjectRec));
     usrObjects.obj[i].atom_name = XtNewString(strparse(s, atom_name, "\\:"));
     if ((usrObjects.obj[i].atom = XmInternAtom(dpy, usrObjects.obj[i].atom_name, False)) == None)
     {
	 XTFREE(usrObjects.obj[i].atom_name);
	 error(topShell, "Couldn't initialize user defined object", atom_name);
	 i--;
     }
     else
     {
	 usrObjects.obj[i].push_action = XtNewString(strparse(s, push_action, "\\:"));
	 usrObjects.obj[i].label = XtNewString(strparse(s, label, "\\:"));
	 usrObjects.obj[i].icon = XtNewString(strparse(s, icon, "\\:"));
	 usrObjects.obj[i].drag_icon = XtNewString(strparse(s, drag_icon, "\\:"));
     }
 }

 if (p == -1)
     error(topShell, "Error in objects file:", resources.usrobj_file);

 usrObjects.nr = i;

  
  if (fclose(fp))
      sysError(topShell, "Error reading objects file:");
}
Beispiel #6
0
void readDTIcons(void)
{
 FILE *fp;
 AppRec app;
 char *name, *directory, *fname, *icon, *push_action, *drop_action, *xp, *yp;
 char s[MAXAPPSTRINGLEN];
 int i, p, x, y;

 XtAppAddActions(app_context, icon_actions, XtNumber(icon_actions));
 trans = XtParseTranslationTable(icon_translations);

 dticons_blocked = False;

 if (stat(resources.dticon_file, &dticons_stats) ||
     !(fp = fopen(resources.dticon_file, "r")))
 {
     dticons_readable = False;
     error(getAnyShell(), "Cannot read desktop icons from", resources.dticon_file);
     return;
 }

 dticons_readable = True;

 for (i=0; (p = parseIcon(fp, &name, &directory, &fname, &icon, &push_action, &drop_action, &xp, &yp)) > 0; i++)
 {
     dtIcons = (DTIconRec **) XTREALLOC(dtIcons, (i+1) * sizeof(DTIconRec *));
     app.name = XtNewString(strparse(s, name, "\\:"));
     app.directory = XtNewString(strparse(s, directory, "\\:"));
     app.fname = XtNewString(strparse(s, fname, "\\:"));
     app.icon = XtNewString(strparse(s, icon, "\\:"));
     app.push_action = XtNewString(strparse(s, push_action, "\\:"));
     app.drop_action = XtNewString(strparse(s, drop_action, "\\:"));
     app.objType = getObjectType(app.push_action);
     app.remove_file = False;
     if ((x = atoi(strparse(s, xp, "\\:"))) < 0)
	 x += winInfo.rootWidth - DTICONWIDTH;
     if ((y = atoi(strparse(s, yp, "\\:"))) < 0)
	 y += winInfo.rootHeight - DTICONHEIGHT;

     dtIcons[i] = createDTIcon(getAnyShell(), &app, x, y);
     dtIcons[i]->save = True;
     displayDTIcon(dtIcons[i]);
 }
 
 if (p == -1)
     error(getAnyShell(), "Error reading desktop icons from", resources.dticon_file);

 n_dtIcons = i;

 if (fclose(fp))
     sysError(getAnyShell(), "Error reading desktop icons:");
}
int StringList::split( const char * pBegin, const char * pEnd, const char * delim )
{
    StrParse strparse( pBegin, pEnd, delim );
    const char * p;
    while( !strparse.isEnd() )
    {
        p = strparse.trim_parse();
        if ( !p )
            break;
        if ( p != strparse.getStrEnd() )
        {
            if ( !add( p, strparse.getStrEnd() - p ) )
                break;
        }
    }
    return size();
}
Beispiel #8
0
static void __event_handler(struct msg *msg) {
	event_t hook;
	char **argv;
	int argc;

	argv = strparse((const char*) msg->data, " ");
	if (!argv) return;

	for (argc = 0; argv[argc]; argc++);

	hook = (event_t) (uintptr_t) s_table_get(event_table, argv[0]);

	if (hook) {
		hook(msg->source, argc, argv);
	}

	for (argc = 0; argv[argc]; argc++) free(argv[argc]);
	free(argv);

	free(msg);
}
Beispiel #9
0
/***************************************************************************
 * ds_streamproc:
 *
 * Save MiniSEED records in a custom directory/file structure.  The
 * appropriate directories and files are created if nesecessary.  If
 * files already exist they are appended to.  If 'msr' is NULL then
 * ds_shutdown() will be called to close all open files and free all
 * associated memory.
 *
 * This version has been modified from others to add the add the suffix
 * integer supplied with ds_streamproc() to the defkey and file name.
 *
 * Returns 0 on success, -1 on error.
 ***************************************************************************/
extern int
ds_streamproc (DataStream *datastream, MSRecord *msr, long suffix, int verbose)
{
  DataStreamGroup *foundgroup = NULL;
  BTime stime;
  strlist *fnlist, *fnptr;
  char net[3], sta[6], loc[3], chan[4];
  char filename[400];
  char definition[400];
  char pathformat[600];
  char tstr[20];
  int fnlen = 0;
  
  /* Set Verbosity for ds_ functions */
  dsverbose = verbose;
  
  /* Special case for stream shutdown */
  if ( ! msr )
    {
      if ( dsverbose >= 1 )
        fprintf (stderr, "Closing archiving for: %s\n", datastream->path );
      
      ds_shutdown ( datastream );
      return 0;
    }
  
  if ( ! msr->fsdh )
    {
      fprintf (stderr, "ds_streamproc(): msr->fsdh must be available\n");
      return -1;
    }
  
  /* Build file path and name from datastream->path */
  filename[0] = '\0';
  definition[0] = '\0';
  snprintf (pathformat, sizeof(pathformat), "%s", datastream->path);
  strparse (pathformat, "/", &fnlist);

  fnptr = fnlist;

  /* Special case of an absolute path (first entry is empty) */
  if ( *fnptr->element == '\0' )
    {
      if ( fnptr->next != 0 )
	{
	  strncat (filename, "/", sizeof(filename));
	  fnptr = fnptr->next;
	}
      else
	{
	  fprintf (stderr, "ds_streamproc(): empty path format\n");
	  strparse (NULL, NULL, &fnlist);
	  return -1;
	}
    }
  
  /* Convert normalized starttime to BTime structure */
  if ( ms_hptime2btime (msr->starttime, &stime) )
    {
      fprintf (stderr, "ds_streamproc(): cannot convert start time to separate fields\n");
      strparse (NULL, NULL, &fnlist);
      return -1;
    }
  
  while ( fnptr != 0 )
    {
      int tdy;
      char *w, *p, def;

      p = fnptr->element;

      /* Special case of no file given */
      if ( *p == '\0' && fnptr->next == 0 )
	{
	  fprintf (stderr, "ds_streamproc(): no file name specified, only %s\n",
		   filename);
	  strparse (NULL, NULL, &fnlist);
	  return -1;
	}

      while ( (w = strpbrk (p, "%#")) != NULL )
	{
	  def = ( *w == '%' );
	  *w = '\0';
	  strncat (filename, p, (sizeof(filename) - fnlen));
	  fnlen = strlen (filename);

	  w += 1;

	  switch ( *w )
	    {
	    case 'n' :
	      ms_strncpclean (net, msr->fsdh->network, 2);
	      strncat (filename, net, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, net, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 's' :
	      ms_strncpclean (sta, msr->fsdh->station, 5);
	      strncat (filename, sta, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, sta, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'l' :
	      ms_strncpclean (loc, msr->fsdh->location, 2);
	      strncat (filename, loc, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, loc, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'c' :
	      ms_strncpclean (chan, msr->fsdh->channel, 3);
	      strncat (filename, chan, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, chan, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'Y' :
	      snprintf (tstr, sizeof(tstr), "%04d", (int) stime.year);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'y' :
	      tdy = (int) stime.year;
	      while ( tdy > 100 )
		{
		  tdy -= 100;
		}
	      snprintf (tstr, sizeof(tstr), "%02d", tdy);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'j' :
	      snprintf (tstr, sizeof(tstr), "%03d", (int) stime.day);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'H' :
	      snprintf (tstr, sizeof(tstr), "%02d", (int) stime.hour);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'M' :
	      snprintf (tstr, sizeof(tstr), "%02d", (int) stime.min);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'S' :
	      snprintf (tstr, sizeof(tstr), "%02d", (int) stime.sec);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'F' :
	      snprintf (tstr, sizeof(tstr), "%04d", (int) stime.fract);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'q' :
	      snprintf (tstr, sizeof(tstr), "%c", msr->dataquality);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'L' :
	      snprintf (tstr, sizeof(tstr), "%d", msr->reclen);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'r' :
	      snprintf (tstr, sizeof(tstr), "%ld", (long int) (msr->samprate+0.5));
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case 'R' :
	      snprintf (tstr, sizeof(tstr), "%.6f", msr->samprate);
	      strncat (filename, tstr, (sizeof(filename) - fnlen));
	      if ( def ) strncat (definition, tstr, (sizeof(definition) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case '%' :
	      strncat (filename, "%", (sizeof(filename) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    case '#' :
	      strncat (filename, "#", (sizeof(filename) - fnlen));
	      fnlen = strlen (filename);
	      p = w + 1;
	      break;
	    default :
	      fprintf (stderr, "Unknown layout format code: '%c'\n", *w);
	      p = w;
	      break;
	    }
	}
      
      strncat (filename, p, (sizeof(filename) - fnlen));
      fnlen = strlen (filename);

      /* If not the last entry then it should be a directory */
      if ( fnptr->next != 0 )
	{
	  if ( access (filename, F_OK) )
	    {
	      if ( errno == ENOENT )
		{
		  if ( dsverbose >= 1 )
		    fprintf (stderr, "Creating directory: %s\n", filename);

		  if (mkdir
		      (filename, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH))
		    {
		      fprintf (stderr, "ds_streamproc: mkdir(%s) %s\n", filename, strerror (errno));
		      strparse (NULL, NULL, &fnlist);
		      return -1;
		    }
		}
	      else
		{
		  fprintf (stderr, "%s: access denied, %s\n", filename, strerror(errno));
		  strparse (NULL, NULL, &fnlist);
		  return -1;
		}
	    }

	  strncat (filename, "/", (sizeof(filename) - fnlen));
	  fnlen++;
	}

      fnptr = fnptr->next;
    }

  strparse (NULL, NULL, &fnlist);

  /* Add ".suffix" to filename and definition if suffix is not 0 */
  if ( suffix )
    {
      snprintf (tstr, sizeof(tstr), ".%ld", suffix);
      strncat (filename, tstr, (sizeof(filename) - fnlen));
      strncat (definition, tstr, (sizeof(definition) - fnlen));
      fnlen = strlen (filename);
    }

  /* Make sure the filename and definition are NULL terminated */
  *(filename + sizeof(filename) - 1) = '\0';
  *(definition + sizeof(definition) -1) = '\0';

  /* Check for previously used stream entry, otherwise create it */
  foundgroup = ds_getstream (datastream, msr, definition, filename);

  if (foundgroup != NULL)
    {
      /* Write binary data samples to approriate file */
      if ( msr->datasamples && msr->numsamples )
	{
	  if ( dsverbose >= 3 )
	    fprintf (stderr, "Writing binary data samples to data stream file %s\n", filename);
	  
	  if ( !write (foundgroup->filed, msr->datasamples, msr->numsamples * ms_samplesize(msr->sampletype)) )
	    {
	      fprintf (stderr, "ds_streamproc: failed to write binary data samples\n");
	      return -1;
	    }
	  else
	    {
	      foundgroup->modtime = time (NULL);	  
	    }
	}
      /* Write the data record to the appropriate file */ 
      else
	{
	  if ( dsverbose >= 3 )
	    fprintf (stderr, "Writing data record to data stream file %s\n", filename);
	  
	  if ( !write (foundgroup->filed, msr->record, msr->reclen) )
	    {
	      fprintf (stderr, "ds_streamproc: failed to write data record\n");
	      return -1;
	    }
	  else
	    {
	      foundgroup->modtime = time (NULL);	  
	    }
	}

      return 0;
    }
  
  return -1;
}  /* End of ds_streamproc() */
Beispiel #10
0
void
main(int argc, char **argv)
{
	int id, arc; char *arv[4];
	char *l, *name;

	chatty = 1;
	ARGBEGIN{
	case '9':
	case 'u':
		style = ARGC();
		break;
	case 'D':
		++debug;
		break;
	}ARGEND
	if(argc <= 0){
		ids = readunixids("/fd/0", style);
		if(ids)
			idprint(1, ids);
		exits(ids ? 0 : "readunixids");
	}
	mapinit(argv[0], 0);
	in = Bopen("/fd/0", OREAD);
	while(l = Brdline(in, '\n')){	/* assign = */
		l[Blinelen(in)-1] = 0;
		arc = strparse(l, nelem(arv), arv);
		if(arc <= 0)
			continue;
		switch(arv[0][0]){
		case 'r':
			if(arc < 2)
				continue;
			mapinit(arv[1], arv[2]);
			break;
		case 'i':
			if(arc < 2)
				continue;
			id = strtol(arv[1], 0, 10);
			name = id2name(pids, id);
			print("%d -> %s\n", id, name);
			break;
		case 'n':
			if(arc < 2)
				continue;
			name = arv[1];
			id = name2id(pids, name);
			print("%s -> %d\n", name, id);
			break;
		case 'p':
			print("server=%s, client=%s\n", mp->server, mp->client);
			break;
		case 'P':
			idprint(1, *pids);
			break;
		case 'u':
			pids = &mp->u.ids;
			print("users...\n");
			break;
		case 'g':
			pids = &mp->g.ids;
			print("groups...\n");
			break;
		}
	}
	exits(0);
}
Beispiel #11
0
void updateIconDisplay(void)
{
  struct stat cur;
  Boolean reread = False;
  if (dticons_blocked) return;
  if (resources.check_application_files)
      if (dticons_readable)
	  reread = stat(resources.dticon_file, &cur) || cur.st_ctime >
	      dticons_stats.st_ctime || cur.st_mtime > dticons_stats.st_mtime;
      else
	  reread = !stat(resources.dticon_file, &cur);
  if (reread) {
      FILE *fp;
      AppRec *app;
      char *name, *directory, *fname, *icon, *push_action, *drop_action,
	  *xp, *yp;
      char *nname, *ndirectory, *nfname, *nicon, *npush_action, *ndrop_action;
      char s[MAXAPPSTRINGLEN];
      int i, j, p, x, y;
      zzz();
      dticons_readable = !stat(resources.dticon_file, &dticons_stats);
      if (!(fp = fopen(resources.dticon_file, "r")))
	  {
	      dticons_readable = False;
	      error(getAnyShell(), "Cannot read desktop icons from",
		    resources.dticon_file);
	      i = 0;
	      goto remove;
	  }
      /* update existing icons/append new ones */
      for (i=0; (p = parseIcon(fp, &name, &directory, &fname, &icon,
			       &push_action, &drop_action, &xp, &yp)) > 0;
		i++) {
	  if ((x = atoi(strparse(s, xp, "\\:"))) < 0)
	      x += winInfo.rootWidth - DTICONWIDTH;
	  if ((y = atoi(strparse(s, yp, "\\:"))) < 0)
	      y += winInfo.rootHeight - DTICONHEIGHT;
	  nname = XtNewString(strparse(s, name, "\\:"));
	  ndirectory = XtNewString(strparse(s, directory, "\\:"));
	  nfname = XtNewString(strparse(s, fname, "\\:"));
	  nicon = XtNewString(strparse(s, icon, "\\:"));
	  npush_action = XtNewString(strparse(s, push_action, "\\:"));
	  ndrop_action = XtNewString(strparse(s, drop_action, "\\:"));
	  if (i < n_dtIcons) {
	      DTIconRec *dticon = dtIcons[i];
	      app = &dticon->app;
	      if (!(x != dticon->x ||
		    y != dticon->y ||
		    strcmp(nname, app->name) ||
		    strcmp(ndirectory, app->directory) ||
		    strcmp(nfname, app->fname) ||
		    strcmp(nicon, app->icon) ||
		    strcmp(npush_action, app->push_action) ||
		    strcmp(ndrop_action, app->drop_action))) {
		  XTFREE(nname);
		  XTFREE(ndirectory);
		  XTFREE(nfname);
		  XTFREE(nicon);
		  XTFREE(npush_action);
		  XTFREE(ndrop_action);
		  continue;
	      }
	      XtDestroyWidget(dticon->app.form);
	      if (dticon->label_mask != None)
		  freePixmap(dticon->label_mask);
	      if (dticon->drop_pixmap != None)
		  freePixmap(dticon->drop_pixmap);
	      freeApplicationResources(&dticon->app);
	  } else {
	      dtIcons = (DTIconRec **) XTREALLOC(dtIcons, (i+1) * sizeof(DTIconRec *));
	      dtIcons[i] = (DTIconRec *) XtMalloc(sizeof(DTIconRec));
	  }
	  app = &dtIcons[i]->app;
	  app->name = nname;
	  app->directory = ndirectory;
	  app->fname = nfname;
	  app->icon = nicon;
	  app->push_action = npush_action;
	  app->drop_action = ndrop_action;
	  app->objType = getObjectType(app->push_action);
	  app->remove_file = False;
	  dtIcons[i]->x = x;
	  dtIcons[i]->y = y;
	  readApplicationIcon(getAnyShell(), app, ERR_POPUP);
	  dtIcons[i]->label_mask = None;
	  dtIcons[i]->drop_pixmap = None;
	  dtIcons[i]->moved = False;
	  dtIcons[i]->save = True;
	  displayDTIcon(dtIcons[i]);
      }
    remove:
      /* remove any remaining icons */
      for (j = i; j < n_dtIcons; j++) {
	  DTIconRec *dticon = dtIcons[j];
	  XtDestroyWidget(dticon->shell);
	  freeApplicationResources(&dticon->app);
	  if (dticon->label_mask != None)
	      freePixmap(dticon->label_mask);
	  if (dticon->drop_pixmap != None)
	      freePixmap(dticon->drop_pixmap);
	  XTFREE(dticon);
      }

      if (i < n_dtIcons)
	  dtIcons = (DTIconRec **)
	      XTREALLOC(dtIcons, i * sizeof(DTIconRec *));
      n_dtIcons = i;

      wakeUp();

      if (dticons_readable && p == -1)
	  error(getAnyShell(), "Error reading desktop icons from",
		resources.dticon_file);

      if (dticons_readable && fclose(fp))
	  sysError(getAnyShell(), "Error reading desktop icons:");
  }
}
Beispiel #12
0
//////////////////////////
//	Read header & possible body
//////////////////////////
bool CMimeProtocol::readMimeRequest(int link,CHARPTR *storage,int nMaxSize)
{
	int read=0;
	int bytes;

	//	Allocate initial buffer
	CHARPTR pszBuffer;

	pszBuffer = *storage = coms->Links[link].buffer;
	nMaxSize = coms->Links[link].limit;

	while(true){
		
		//	Read next lot
		if((bytes = recvTcp(link,&pszBuffer[read],nMaxSize-read)) < 0)
			return false;

		//	Remote disconnect
		if(bytes == 0)
			return false;
		
		read+=bytes;
		
		//	Check for header & body
		CHARPTR ptrHeadEnd=strstr(pszBuffer,"\r\n\r\n");
		CHARPTR ptrContLen=strstr(pszBuffer,"Content-Length: ");

		int contentLength;

		//	No header yet
		if(!ptrHeadEnd)			
			return false;

		//	Header & no-body required
		if(!ptrContLen){

			*ptrHeadEnd=0;
			return true;
		}
		
		//	Get body length
		if(!strparse(ptrContLen,"Content-Length: %1d",&contentLength))
			return false;

		//	Compare strlen of body
		int bodyLen = (ptrHeadEnd+=4)-pszBuffer;
		
		//	Re-allocate for biggies
		if(contentLength > nMaxSize){

			//	Catch potential memory errors
			try{
				
				//	Re-alloc & copy current data to new buffer
				coms->Links[link].buffer = *storage = new CHAR[nMaxSize=(contentLength+nMaxSize)];
				coms->Links[link].limit = nMaxSize;

				 //*storage = new CHAR[nMaxSize=(contentLength+nMaxSize)];
				memcpy(*storage,pszBuffer,read);

				//	Re-assign
				delete [] pszBuffer;
				pszBuffer = *storage;
			}
			catch( ... ){
				return false;
			}
		}

		//	Check if body there
		if(read >= (bodyLen + contentLength)){

			ptrHeadEnd[contentLength]=0;
			return true;
		}

		//	Expect data (15 seconds ???)
		if(!waitForEvent(link,15000))
			return false;
	}
}
Beispiel #13
0
//////////////////////////
//	Read header & populate text with body
//////////////////////////
bool CMimeProtocol::readMimeResponse(int link,CHARPTR headers,int size,CHARPTR content)
{
	CHAR buffer[CBUFF_HUGE+2];

	CHARPTR ptrHeadEnd;
	CHARPTR ptrContLen;

	int read=0;
	int bytes;

	//	Reset
	strcpy(content,"");
	strcpy(headers,"");

	//	1st read headers
	while(true){

		//	Wait
		if(!waitForEvent(link,10000)){

			strcpy(content,headers);
			return true;
		}
				
		//	Read next lot
		while((bytes = recvTcp(link,&headers[read],size-read)) <= 0){

				switch(OSALASTERROR){

					//	No data to read - try again
		 			case OSAWOULDBLOCK:

						if(!waitForEvent(link,2000))
							return false;
			 
 					continue;

					// Oh oh
		 			default:
					return false;
				}

			return false;
		}

		read+=bytes;
		headers[read]=0;
	
		//	Check for header & body
		ptrHeadEnd=strstr(headers,"\r\n\r\n");
		
		//	No header yet
		if(ptrHeadEnd)
			break;
	}

	ptrContLen=strstr(headers,"Content-Length: ");
	int contentLength;

	//	Terminate
	*ptrHeadEnd=0;

	//	Header & nobody - copy headers
	if(!ptrContLen){

		//	Just keep reading until server closes connection
		contentLength=128000;

		ptrHeadEnd += strlen("\r\n\r\n");
		strcpy(content,ptrHeadEnd);
	}
	else{

		//	Get content length
		if(!strparse(ptrContLen,"Content-Length: %1d",&contentLength))
			return false;

		//	Skip to start of body
		ptrHeadEnd += strlen("\r\n\r\n");
		strcpy(content,ptrHeadEnd);
	}

	//	Calculate remaining
	read = strlen(ptrHeadEnd);

	while(read < contentLength){
		
		//	Read next lot
		if((bytes = recvTcp(link,buffer,CBUFF_HUGE)) <= 0){

			switch(bytes){

				//	Remote closure
				case 0:
				return true;

			 	// Error - check
				default:
				switch(OSALASTERROR){

					//	No data to read - try again
		 			case OSAWOULDBLOCK:

						if(!waitForEvent(link,2000))
							return false;
			 
 					continue;

					// Oh oh
		 			default:
					return false;
				}
				break;
			}
		}

		buffer[bytes] = 0;
		read+=bytes;

		strcat(content,buffer);
	}

	//	Good to go
	return true;
}
Beispiel #14
0
status_t TGenericDirentParser::AddEntries(const char *strDirList, const char *option)
{
	status_t status = B_OK;
	uint32 st = 1;
	BList list;
	BString strdir(strDirList), curdir;
	strdir.ReplaceAll("\r\n", "\n");
	strdir.ReplaceAll("\r", "\n");
	
	// ftpd から得た NLST 文字列 strDirList を各行に分割して list にポインタを記憶する
	char *p = (char *)strdir.String();
	while (*p != 0) {
		list.AddItem(p);
		p = strchr(p, '\n');
	    if (p == NULL) break;
		*p = 0;
		p++;
	}
	
	// 解析
	for(int32 i = 0; i < list.CountItems(); i++) {
		p = (char *)list.ItemAt(i);
		
		// 空白行は無視。但し、次行はディレクトリ名と仮定(再帰モード時)
		if (strlen(p) == 0) {
			st = 0;
			continue;
		}
		if (st == 0) {
			st = 1;
			if (strcmp(option, "R") == 0) {
				curdir.SetTo(p);
				if (curdir.String()[curdir.Length() - 1] == ':') curdir.ReplaceLast(":", "");
				i++;		// ディレクトリ名の次は total または空行なので無視
				continue;
			}
		}
		
		// 先頭文字(即ち permission のファイル属性) が "-", "d", "l", "c" でなければ無視する。
		if (strchr("-dlc", *p) == NULL) continue;
		
		uint32 itemCount;
		char *dlist[10], *permission, *num, *owner, *group, *cparam, *size, *month, *day, *houryear, *name;
		memset(dlist, 0, sizeof(dlist));
		if (*p == 'c') {
			itemCount = 10;
			strparse(p, dlist, &itemCount);
			if (itemCount != 10) continue;
			permission = dlist[0];
			num        = dlist[1];
			owner      = dlist[2];
			group      = dlist[3];
			cparam     = dlist[4];
			size       = dlist[5];
			month      = dlist[6];
			day        = dlist[7];
			houryear   = dlist[8];
			name       = dlist[9];
		} else {
			itemCount = 9;
			strparse(p, dlist, &itemCount);
			if (itemCount != 9) continue;
			permission = dlist[0];
			num        = dlist[1];
			owner      = dlist[2];
			group      = dlist[3];
			size       = dlist[4];
			month      = dlist[5];
			day        = dlist[6];
			houryear   = dlist[7];
			name       = dlist[8];
		}
		
		
		// 日付・時間を変換
		BString strdate, strtime;
		if (atoi(houryear) < 1900) {
			char stryear[5];
			time_t timer;
			struct tm *date;
			time(&timer);
			date = localtime(&timer);
			strftime(stryear, sizeof(stryear), "%Y", date);
			strdate << stryear;
			strtime << " " << houryear;
		} else {
			strdate << houryear;
		}
		strdate << "/";
		if (strcasecmp("Jan", month) == 0) strdate << "01"; else
		if (strcasecmp("Feb", month) == 0) strdate << "02"; else
		if (strcasecmp("Mar", month) == 0) strdate << "03"; else
		if (strcasecmp("Apr", month) == 0) strdate << "04"; else
		if (strcasecmp("May", month) == 0) strdate << "05"; else
		if (strcasecmp("Jun", month) == 0) strdate << "06"; else
		if (strcasecmp("Jul", month) == 0) strdate << "07"; else
		if (strcasecmp("Aug", month) == 0) strdate << "08"; else
		if (strcasecmp("Sep", month) == 0) strdate << "09"; else
		if (strcasecmp("Oct", month) == 0) strdate << "10"; else
		if (strcasecmp("Nov", month) == 0) strdate << "11"; else
		if (strcasecmp("Dec", month) == 0) strdate << "12"; else strdate << month;
		char strday[3];
		sprintf(strday, "%2.2d", atoi(day));
		strdate << "/" << strday << strtime;
		
		// リストに追加
		status = this->AddEntry(curdir.String(), name, atoi(size), strdate.String(), permission, owner, group);
		if (status != B_OK) break;
	}
	return status;
}