Exemplo n.º 1
0
bool buildflagset_get(buildflagset_t* set, const char* flag)
{
  assert(set != NULL);
  assert(flag != NULL);
  assert(set->flags != NULL);
  assert(set->started_enum);

  // First check mutually exclusive groups.
  ssize_t index = os_index(flag);

  if(index >= 0)  // OS platform flag.
    return set->enum_os_flags == index;

  index = size_index(flag);

  if(index >= 0)  // Size platform flag.
    return set->enum_size_flags == index;

  // Just a normal flag.
  flag_t f1 = {flag, false};
  flag_t* f2 = flagtab_get(set->flags, &f1);

  // Flag MUST have been added previously.
  assert(f2 != NULL);

  return f2->value;
}
Exemplo n.º 2
0
void buildflagset_add(buildflagset_t* set, const char* flag)
{
  assert(set != NULL);
  assert(flag != NULL);
  assert(set->flags != NULL);
  assert(!set->started_enum);

  // First check for mutually exclusive groups.
  if(os_index(flag) >= 0)
  {
    // OS flag.
    set->have_os_flags = true;
    return;
  }

  if(size_index(flag) >= 0)
  {
    // Size flag.
    set->have_size_flags = true;
    return;
  }

  // Just a normal flag.
  flag_t f1 = {flag, false};
  flag_t* f2 = flagtab_get(set->flags, &f1);

  if(f2 != NULL)  // Flag already in our table.
    return;

  // Add flag to our table.
  flagtab_put(set->flags, flag_dup(&f1));
}
Exemplo n.º 3
0
/**
 * Ecrit des donnees dans un fichier indexe.
 *fddescripteur du fichier modifie
 *buf     ptr vers les donnees la ecrire
 *nbytes  nb d'octets a ecrire 
 *(nbytes doit etre >= a la taille d'index)
 * Renvoie le nb d'octets ecrits, -1 en cas de pb.
 */
ssize_t indwrite(int fd, const void *buf, size_t nbytes){
  
  int size = size_index(fd);

  if((int)nbytes < size){
    return -1;
  }

  return write(fd,buf,nbytes);

}
Exemplo n.º 4
0
/**
 * Lit des donnees dans un fichier indexe.
 *fd      descripteur du fichier lu
 *buf     ptr vers les donnees lues
 *nbytes  nb d'octets a lire 
 *(nbytes doit etre >= a la taille d'index)
 * Renvoie le nb d'octets lus, 0 si fin de fichier, -1 en cas de pb.
 */
ssize_t indread(int fd, void *buf, size_t nbytes){

  int size = size_index(fd);

  if((int)nbytes < size){
    return -1;
  }

  return read(fd, buf,nbytes);

}
Exemplo n.º 5
0
/**
 * Deplace le curseur dans un fichier indexe.
 *fddescripteur du fichier
 *offset  deplacement a effectuer (en nb de structures index)
 *whence  positionnement initial du curseur 
 * Renvoie le deplacement effectif du curseur (en nb d'octets), -1 en cas de pb.
 */
off_t indlseek(int fd, off_t offset, int whence){
  
  int position;
  int size_element = size_index(fd);

  switch(whence){
  case SEEK_SET: // Début de fichier
    position = (offset *  size_element) + sizeof(int);
    break;
  case SEEK_CUR:
    position = (offset * size_element);
    break;
  case SEEK_END:
    position = (offset * size_element);
    break; 
  }  
  
  return lseek(fd,position,whence); 
}