Beispiel #1
0
int
decode_DIS_attrl(int sock, struct attrl **ppatt)
{
	int		 hasresc;
	int		 i;
	unsigned int	 numpat;
	struct attrl  *pat      = 0;
	struct attrl  *patprior = 0;
	int		 rc;


	numpat = disrui(sock, &rc);
	if (rc) return rc;

	for (i=0; i < numpat; ++i) {

		(void) disrui(sock, &rc);
		if (rc) break;

		pat = malloc(sizeof(struct attrl));
		if (pat == 0)
			return DIS_NOMALLOC;

		pat->next     = (struct attrl *)0;
		pat->name     = (char *)0;
		pat->resource = (char *)0;
		pat->value    = (char *)0;

		pat->name = disrst(sock, &rc);
		if (rc)	break;

		hasresc = disrui(sock, &rc);
		if (rc) break;
		if (hasresc) {
			pat->resource = disrst(sock, &rc);
			if (rc) break;
		}

		pat->value = disrst(sock, &rc);
		if (rc) break;

#ifdef NAS /* localmod 005 */
		pat->op = (enum batch_op) disrui(sock, &rc);
#else
		pat->op = disrui(sock, &rc);
#endif /* localmod 005 */
		if (rc) break;

		if (i == 0) {
			/* first one, link to passing in pointer */
			*ppatt = pat;
		} else {
			patprior->next = pat;
		}
		patprior = pat;
	}

	if (rc)
		PBS_free_aopl((struct attropl *)pat);
	return rc;
}
Beispiel #2
0
int
decode_DIS_attropl(int sock, struct attropl **ppatt)
  {
  int   hasresc;
  unsigned int  i;
  unsigned int  name_len;
  unsigned int  numpat;

  struct attropl  *pat = NULL;

  struct attropl  *patprior = NULL;
  int   rc;


  numpat = disrui(sock, &rc);

  if (rc) return rc;

  for (i = 0; i < numpat; ++i)
    {

    name_len = disrui(sock, &rc); /* name_len is unused here */

    if (rc) break;

    pat = malloc(sizeof(struct attropl));

    if (pat == 0)
      return DIS_NOMALLOC;

    pat->next     = (struct attropl *)0;

    pat->name     = (char *)0;

    pat->resource = (char *)0;

    pat->value    = (char *)0;

    pat->name = disrst(sock, &rc);

    if (rc) break;

    hasresc = disrui(sock, &rc);

    if (rc) break;

    if (hasresc)
      {
      pat->resource = disrst(sock, &rc);

      if (rc) break;
      }

    pat->value = disrst(sock, &rc);

    if (rc) break;

    pat->op = (enum batch_op)disrui(sock, &rc);

    if (rc) break;

    if (i == 0)
      {
      /* first one, link to passing in pointer */
      *ppatt = pat;
      }
    else
      {
      patprior->next = pat;
      }

    patprior = pat;
    }

  if (rc)
    PBS_free_aopl(pat);

  return rc;
  }