Пример #1
0
int signs(chunk *r, int x, int z, void *ctx) {
  tag t; t.data = NULL; tag_parse(&t,r);
  if(t.data == NULL) return 0;
  tag *tents;
  if(tag_find(&t,&tents,1,"TileEntities") && tents->type == 9) {
    tag *ents = (tag*)tents->data; tag *tid; tag *ttext; int i;
    for(i = 0; i < tents->length; i++) {
      if(tag_find(ents+i,&tid,1,"id") && tid->type == 8) {
	if(tid->length == 4 && strncmp((char*)tid->data,"Sign",4) == 0) {
	  int *pos[3]; tag *text[4];
	  ttile_pos(pos,ents+i);
	  if(!tag_find(ents+i,text+0,1,"Text1")) continue;
	  if(!tag_find(ents+i,text+1,1,"Text2")) continue;
	  if(!tag_find(ents+i,text+2,1,"Text3")) continue;
	  if(!tag_find(ents+i,text+3,1,"Text4")) continue;
	  printf("(%i+%i,%i,%i+%i)\n",x,*pos[0],*pos[1],z,*pos[2]);
	  if(text[0]->data != NULL) { printf("\"%s\"\n",(char*)text[0]->data); } else { printf("\"\"\n"); }
	  if(text[1]->data != NULL) { printf("\"%s\"\n",(char*)text[1]->data); } else { printf("\"\"\n"); }
	  if(text[2]->data != NULL) { printf("\"%s\"\n",(char*)text[2]->data); } else { printf("\"\"\n"); }
	  if(text[3]->data != NULL) { printf("\"%s\"\n",(char*)text[3]->data); } else { printf("\"\"\n"); }
	  printf("\n");
	}
      }
    }
  }
  tag_destroy(&t);
  return 0;
}
Пример #2
0
int git_tag__parse(void *_tag, git_odb_object *odb_obj)
{
    git_tag *tag = _tag;
    const char *buffer = git_odb_object_data(odb_obj);
    const char *buffer_end = buffer + git_odb_object_size(odb_obj);

    return tag_parse(tag, buffer, buffer_end);
}
Пример #3
0
int main(int argc, char *argv[]) {
  if(argc != 2) {
    printf("Usage: %s [.dat]\n",argv[0]);
    return 2;
  }
  chunk *f = chunk_opengz(argv[1],"r");
  if(!f) {
    printf("Cound not open file\n");
    return 3;
  }
  tag t; t.data = NULL;
  tag_parse(&t,f);
  chunk_close(f);
  if(!t.data) {
    printf("No data found\n");
    return 5;
  }
  tag_tree(&t);
  tag_destroy(&t);
}
Пример #4
0
int git_tag_create_frombuffer(git_oid *oid, git_repository *repo, const char *buffer, int allow_ref_overwrite)
{
    git_tag tag;
    int error;
    git_odb *odb;
    git_odb_stream *stream;
    git_odb_object *target_obj;

    git_reference *new_ref = NULL;
    git_buf ref_name = GIT_BUF_INIT;

    assert(oid && buffer);

    memset(&tag, 0, sizeof(tag));

    if (git_repository_odb__weakptr(&odb, repo) < 0)
        return -1;

    /* validate the buffer */
    if (tag_parse(&tag, buffer, buffer + strlen(buffer)) < 0)
        return -1;

    /* validate the target */
    if (git_odb_read(&target_obj, odb, &tag.target) < 0)
        goto on_error;

    if (tag.type != target_obj->cached.type) {
        giterr_set(GITERR_TAG, "The type for the given target is invalid");
        goto on_error;
    }

    error = retrieve_tag_reference_oid(oid, &ref_name, repo, tag.tag_name);
    if (error < 0 && error != GIT_ENOTFOUND)
        goto on_error;

    /* We don't need these objects after this */
    git_signature_free(tag.tagger);
    git__free(tag.tag_name);
    git__free(tag.message);
    git_odb_object_free(target_obj);

    /** Ensure the tag name doesn't conflict with an already existing
     *	reference unless overwriting has explicitly been requested **/
    if (error == 0 && !allow_ref_overwrite) {
        giterr_set(GITERR_TAG, "Tag already exists");
        return GIT_EEXISTS;
    }

    /* write the buffer */
    if ((error = git_odb_open_wstream(
                     &stream, odb, strlen(buffer), GIT_OBJ_TAG)) < 0)
        return error;

    if (!(error = git_odb_stream_write(stream, buffer, strlen(buffer))))
        error = git_odb_stream_finalize_write(oid, stream);

    git_odb_stream_free(stream);

    if (error < 0) {
        git_buf_free(&ref_name);
        return error;
    }

    error = git_reference_create(
                &new_ref, repo, ref_name.ptr, oid, allow_ref_overwrite, NULL);

    git_reference_free(new_ref);
    git_buf_free(&ref_name);

    return error;

on_error:
    git_signature_free(tag.tagger);
    git__free(tag.tag_name);
    git__free(tag.message);
    git_odb_object_free(target_obj);
    return -1;
}