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; }
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); }
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); }
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; }