gcsweb/cmd/gcsweb/gcsweb.go
func parseXML(body []byte, object string) (*gcsDir, error) {
	dir := new(gcsDir)
	if err := xml.Unmarshal(body, &dir); err != nil {
		return nil, err
	}
	// We think this is a dir if the object is "/" (just the bucket) or if we
	// find any Contents or CommonPrefixes.
	isDir := object == "/" || len(dir.Contents)+len(dir.CommonPrefixes) > 0
	selfIndex := -1
	for i := range dir.Contents {
		rec := &dir.Contents[i]
		name := strings.TrimPrefix(rec.Name, object)
		if name == "" {
			selfIndex = i
			continue
		}
		rec.Name = name
		if strings.HasSuffix(name, "/") {
			rec.isDir = true
		}
	}

	for i := range dir.CommonPrefixes {
		cp := &dir.CommonPrefixes[i]
		cp.Prefix = strings.TrimPrefix(cp.Prefix, object)
	}

	if !isDir {
		return nil, nil
	}

	if selfIndex >= 0 {
		// Strip out the record that indicates this object.
		dir.Contents = append(dir.Contents[:selfIndex], dir.Contents[selfIndex+1:]...)
	}
	return dir, nil
}
func parseXML(body []byte, object string) (*gcsDir, error) {
	dir := new(gcsDir)
	if err := xml.Unmarshal(body, &dir); err != nil {
		return nil, err
	}
	// We think this is a dir if the object is "/" (just the bucket) or if we
	// find any Contents or CommonPrefixes.
	isDir := object == "/" || len(dir.Contents)+len(dir.CommonPrefixes) > 0
	selfIndex := -1
	for i := range dir.Contents {
		rec := &dir.Contents[i]
		name := strings.TrimPrefix(rec.Name, object)
		if name == "" {
			selfIndex = i
			continue
		}
		rec.Name = name
		if strings.HasSuffix(name, "/") {
			rec.isDir = true
		}
	}

	for i := range dir.CommonPrefixes {
		cp := &dir.CommonPrefixes[i]
		cp.Prefix = strings.TrimPrefix(cp.Prefix, object)
	}

	if !isDir {
		return nil, nil
	}

	if selfIndex >= 0 {
		// Strip out the record that indicates this object.
		dir.Contents = append(dir.Contents[:selfIndex], dir.Contents[selfIndex+1:]...)
	}
	return dir, nil
}
func parseXML ( body [ ] byte , object string ) ( * gcsDir , error ) { dir := new ( gcsDir ) if err := xml . Unmarshal ( body , & dir ) ; err != nil { return nil , err } // We think this is a dir if the object is "/" (just the bucket) or if we // find any Contents or CommonPrefixes. isDir := object == " " || len ( dir . Contents ) + len ( dir . CommonPrefixes ) > 0 selfIndex := - 1 for i := range dir . Contents { rec := & dir . Contents [ i ] name := strings . TrimPrefix ( rec . Name , object ) if name == " " { selfIndex = i continue } rec . Name = name if strings . HasSuffix ( name , " " ) { rec . isDir = true } } for i := range dir . CommonPrefixes { cp := & dir . CommonPrefixes [ i ] cp . Prefix = strings . TrimPrefix ( cp . Prefix , object ) } if ! isDir { return nil , nil } if selfIndex >= 0 { // Strip out the record that indicates this object. dir . Contents = append ( dir . Contents [ : selfIndex ] , dir . Contents [ selfIndex + 1 : ] ... ) } return dir , nil }
// parseXML extracts a gcsDir object from XML.  If this returns a nil gcsDir,
// the XML indicated that this was not a directory at all.
parseXML extracts a gcsDir object from XML . If this returns a nil gcsDir the XML indicated that this was not a directory at all .