From 2ba379a218dcef842b5b46b10d12130757a6dc3f Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Sun, 23 Sep 2012 15:03:28 +0200 Subject: Optimize code (using pointers). --- src/ninjacloud.go | 232 ++++++++++++++++++++++++++---------------------------- 1 file changed, 110 insertions(+), 122 deletions(-) (limited to 'src') diff --git a/src/ninjacloud.go b/src/ninjacloud.go index a600ee7..f2d31d7 100644 --- a/src/ninjacloud.go +++ b/src/ninjacloud.go @@ -33,7 +33,7 @@ import ( ) const APP_NAME = "Ninja Go Local Cloud" -const APP_VERSION = "0.1 Draft" +const APP_VERSION = "0.1" var versionFlag bool var interfaceFlag string @@ -50,13 +50,10 @@ const dirPath = "/directory/" const webPath = "/web?url=" const statusPath = "/cloudstatus/" -const drivePrefixLen = len(drivePrefix) - 1 const filePathLen = len(filePath) const dirPathLen = len(dirPath) const webPathLen = len(webPath) -//const statusPathLen = len(statusPath) - func sliceContains(s []string, c string) bool { for _, e := range s { if c == e { @@ -69,13 +66,13 @@ func sliceContains(s []string, c string) bool { //////// FILESYSTEM func properties(path string) (infos os.FileInfo, err error) { - infos, err = os.Stat(path) + infos, err = os.Stat(*&path) return } func modifiedSince(path string, since string) bool { - s, err := strconv.ParseInt(since, 10, 64) - infos, err := properties(path) + s, err := strconv.ParseInt(*&since, 10, 64) + infos, err := properties(*&path) if err != nil { return false } @@ -88,67 +85,67 @@ func modifiedSince(path string, since string) bool { } func exist(path string) bool { - _, err := os.Stat(path) - if !os.IsNotExist(err) { + _, err := os.Stat(*&path) + if !os.IsNotExist(*&err) { return true } return false } func isInRoot(path string) bool { - return filepath.HasPrefix(path, rootFlag) + return filepath.HasPrefix(*&path, *&rootFlag) } //// Files func writeFile(path string, content []byte, overwrite bool) (err error) { if !overwrite { - if exist(path) { + if exist(*&path) { err = os.ErrExist return } } else { - if !exist(path) { + if !exist(*&path) { err = os.ErrNotExist return } } - err = ioutil.WriteFile(path, content, 0777) + err = ioutil.WriteFile(*&path, *&content, 0777) return } func readFile(path string) (content []byte, err error) { - content, err = ioutil.ReadFile(path) + content, err = ioutil.ReadFile(*&path) return } func removeFile(path string) (err error) { - err = os.Remove(path) + err = os.Remove(*&path) return } func moveFile(source string, dest string) (err error) { - err = os.Rename(source, dest) + err = os.Rename(*&source, *&dest) return } func copyFile(source string, dest string) (err error) { // from https://gist.github.com/2876519 - sf, err := os.Open(source) + sf, err := os.Open(*&source) if err != nil { return err } defer sf.Close() - df, err := os.Create(dest) + df, err := os.Create(*&dest) if err != nil { return err } defer df.Close() - _, err = io.Copy(df, sf) + _, err = io.Copy(*&df, *&sf) if err == nil { - si, err := os.Stat(source) + si, err := os.Stat(*&source) if err != nil { - err = os.Chmod(dest, si.Mode()) + err = os.Chmod(*&dest, si.Mode()) } } @@ -158,53 +155,53 @@ func copyFile(source string, dest string) (err error) { //// Dirs func createDir(path string) (err error) { - err = os.MkdirAll(path, 0777) + err = os.MkdirAll(*&path, 0777) return } func removeDir(path string) (err error) { - err = os.RemoveAll(path) + err = os.RemoveAll(*&path) return } /*func listDir(path string) (list []os.FileInfo, err error) { - list, err = ioutil.ReadDir(path) + list, err = ioutil.ReadDir(*&path) return }*/ func moveDir(source string, dest string) (err error) { - err = os.Rename(source, dest) + err = os.Rename(*&source, *&dest) return } func copyDir(source string, dest string) (err error) { // from https://gist.github.com/2876519 - fi, err := os.Stat(source) + fi, err := os.Stat(*&source) if err != nil { return } if !fi.IsDir() { return os.ErrInvalid } - _, err = os.Open(dest) - if !os.IsNotExist(err) { + _, err = os.Open(*&dest) + if !os.IsNotExist(*&err) { return os.ErrExist } - err = os.MkdirAll(dest, fi.Mode()) + err = os.MkdirAll(*&dest, fi.Mode()) if err != nil { return } - entries, err := ioutil.ReadDir(source) + entries, err := ioutil.ReadDir(*&source) for _, entry := range entries { sfp := source + "/" + entry.Name() dfp := dest + "/" + entry.Name() if entry.IsDir() { - err = copyDir(sfp, dfp) + err = copyDir(*&sfp, *&dfp) if err != nil { return } } else { - err = copyFile(sfp, dfp) + err = copyFile(*&sfp, *&dfp) if err != nil { return } @@ -228,15 +225,15 @@ func listDir(path string, recursive bool, filter []string, returnType string) (l returnAll := returnType == "all" || returnType == "" returnFiles := returnType == "files" || returnAll returnDirs := returnType == "directories" || returnAll - currentDir, err := ioutil.ReadDir(path) + currentDir, err := ioutil.ReadDir(*&path) for _, d := range currentDir { if d.IsDir() && returnDirs { var e element modTime := strconv.FormatInt(d.ModTime().UnixNano(), 10) - modTime = modTime[:len(modTime)-6] - uri := path + "/" + d.Name() - uri = filepath.Clean(drivePrefix + projectsDir + "/" + uri) - uri = filepath.ToSlash(uri) + modTime = modTime[:len(*&modTime)-6] + uri := drivePrefix + projectsDir + "/" + path + "/" + d.Name() + uri = filepath.Clean(*&uri) + uri = filepath.ToSlash(*&uri) e.Type = "directory" e.Name = d.Name() e.Uri = uri @@ -245,25 +242,26 @@ func listDir(path string, recursive bool, filter []string, returnType string) (l e.Size = strconv.FormatInt(d.Size(), 10) e.Writable = "true" // TODO if recursive { - e.Children, err = listDir(uri, recursive, filter, returnType) + e.Children, err = listDir(*&uri, *&recursive, *&filter, *&returnType) if err != nil { return } } else { e.Children = nil } - list = append(list, e) + list = append(*&list, *&e) } else if !d.IsDir() && returnFiles { ext := filepath.Ext(d.Name()) if ext != "" { ext = ext[1:] } - if cap(filter) == 1 || sliceContains(filter, ext) { + if cap(*&filter) == 1 || sliceContains(*&filter, *&ext) { var e element modTime := strconv.FormatInt(d.ModTime().UnixNano(), 10) - modTime = modTime[:len(modTime)-6] - uri := filepath.Clean(drivePrefix + projectsDir + "/" + path + "/" + d.Name()) - uri = filepath.ToSlash(uri) + modTime = modTime[:len(*&modTime)-6] + uri := drivePrefix + projectsDir + "/" + path + "/" + d.Name() + uri = filepath.Clean(*&uri) + uri = filepath.ToSlash(*&uri) e.Type = "file" e.Name = d.Name() e.Uri = uri @@ -272,7 +270,7 @@ func listDir(path string, recursive bool, filter []string, returnType string) (l e.Size = strconv.FormatInt(d.Size(), 10) e.Writable = "true" // TODO e.Children = nil - list = append(list, e) + list = append(*&list, *&e) } } } @@ -290,9 +288,9 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { w.Header().Add("Access-Control-Allow-Origin", "*/*") w.Header().Add("Access-Control-Max-Age", "86400") p := filepath.Clean(r.URL.Path[filePathLen:]) - p = filepath.ToSlash(p) - p = strings.TrimLeft(p, driveName+"/"+projectsDir+"/") - if filepath.IsAbs(p) { + p = filepath.ToSlash(*&p) + p = strings.TrimLeft(*&p, driveName+"/"+projectsDir+"/") + if filepath.IsAbs(*&p) { w.WriteHeader(http.StatusForbidden) return } @@ -300,19 +298,19 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case "POST": // Create a new file - content, err := ioutil.ReadAll(r.Body) + content, err := ioutil.ReadAll(*&r.Body) if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } - err = writeFile(p, *&content, false) + err = writeFile(*&p, *&content, false) if err == os.ErrExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusBadRequest) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } @@ -322,19 +320,19 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { source := r.Header.Get("sourceURI") if source == "" { // Update an existing file (save over existing file) - content, err := ioutil.ReadAll(r.Body) + content, err := ioutil.ReadAll(*&r.Body) if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } - err = writeFile(p, *&content, true) + err = writeFile(*&p, *&content, true) if err == os.ErrNotExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusNotFound) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } @@ -343,40 +341,30 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { } else { // Copy, Move of an existing file if r.Header.Get("overwrite-destination") != "true" { - if exist(p) { + if exist(*&p) { w.WriteHeader(http.StatusInternalServerError) return } - /*err := removeFile(p) - if err == os.ErrNotExist { - log.Println(err) - w.WriteHeader(http.StatusNotFound) - return - } else if err != nil { - log.Println(err) - w.WriteHeader(http.StatusInternalServerError) - return - }*/ } if r.Header.Get("delete-source") == "true" { - err := moveFile(source, p) + err := moveFile(*&source, *&p) if err == os.ErrNotExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusNotFound) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } } else { - err := copyFile(source, p) + err := copyFile(*&source, *&p) if err == os.ErrNotExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusNotFound) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } @@ -386,17 +374,17 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { } case "DELETE": // Delete an existing file - if !exist(p) { + if !exist(*&p) { w.WriteHeader(http.StatusNotFound) return } - err := removeFile(p) + err := removeFile(*&p) if err == os.ErrNotExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusNotFound) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } @@ -407,7 +395,7 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { modSince := r.Header.Get("If-modified-since") getInfo := r.Header.Get("get-file-info") if modSince != "" && modSince != "false" && modSince != "none" { - if modifiedSince(p, modSince) { + if modifiedSince(*&p, *&modSince) { w.WriteHeader(http.StatusOK) return } else { @@ -423,14 +411,14 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { return } } else if getInfo != "" && getInfo != "false" { - infos, err := properties(p) + infos, err := properties(*&p) if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } modDate := strconv.FormatInt(infos.ModTime().UnixNano(), 10) - modDate = modDate[:len(modDate)-6] + modDate = modDate[:len(*&modDate)-6] size := strconv.FormatInt(infos.Size(), 10) fileInfo := map[string]string{ "creationDate": modDate, // TODO @@ -438,16 +426,16 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { "size": size, "readOnly": "false", // TODO } - j, err := json.MarshalIndent(fileInfo, "", " ") + j, err := json.MarshalIndent(*&fileInfo, "", " ") if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } w.Write(j) return } else { - ext := filepath.Ext(p) + ext := filepath.Ext(*&p) switch ext { case ".htm": case ".html": @@ -456,14 +444,14 @@ func fileHandler(w http.ResponseWriter, r *http.Request) { case ".json": w.Header().Set("Content-Type", "application/json") } - file, err := readFile(p) + file, err := readFile(*&p) if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) - w.Write(file) + w.Write(*&file) return } } @@ -478,9 +466,9 @@ func dirHandler(w http.ResponseWriter, r *http.Request) { w.Header().Add("Access-Control-Allow-Origin", "*/*") w.Header().Add("Access-Control-Max-Age", "86400") p := filepath.Clean(r.URL.Path[dirPathLen:]) - p = filepath.ToSlash(p) - p = strings.TrimLeft(p, driveName+"/"+projectsDir+"/") - if filepath.IsAbs(p) { + p = filepath.ToSlash(*&p) + p = strings.TrimLeft(*&p, driveName+"/"+projectsDir+"/") + if filepath.IsAbs(*&p) { w.WriteHeader(http.StatusForbidden) return } @@ -488,9 +476,9 @@ func dirHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case "POST": // Create a new directory - err := createDir(p) + err := createDir(*&p) if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusBadRequest) return } @@ -498,17 +486,17 @@ func dirHandler(w http.ResponseWriter, r *http.Request) { return case "DELETE": // Delete an existing directory - if !exist(p) { + if !exist(*&p) { w.WriteHeader(http.StatusNotFound) return } - err := removeDir(p) + err := removeDir(*&p) if err == os.ErrNotExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusNotFound) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } @@ -518,11 +506,11 @@ func dirHandler(w http.ResponseWriter, r *http.Request) { // List the contents of an existing directory modSince := r.Header.Get("If-modified-since") if modSince != "" && modSince != "false" && modSince != "none" { - if !exist(p) { + if !exist(*&p) { w.WriteHeader(http.StatusNotFound) return } - if modifiedSince(p, modSince) { + if modifiedSince(*&p, *&modSince) { w.WriteHeader(http.StatusOK) return } else { @@ -530,7 +518,7 @@ func dirHandler(w http.ResponseWriter, r *http.Request) { return } } else if r.Header.Get("check-existence-only") == "true" { - if exist(p) { + if exist(*&p) { w.WriteHeader(http.StatusNoContent) return } else { @@ -551,31 +539,31 @@ func dirHandler(w http.ResponseWriter, r *http.Request) { n.Type = "directory" n.Name = projectsDir n.Uri = drivePrefix + projectsDir - c = append(c, n) + c = append(*&c, *&n) e.Type = "directory" e.Children = c } else { if p == "" { p = "." } - fileInfo, err := listDir(p, recursive, filter, returnType) + fileInfo, err := listDir(*&p, *&recursive, *&filter, *&returnType) if err == os.ErrNotExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusNotFound) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } - rootDir, err := properties(p) + rootDir, err := properties(*&p) if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } modTime := strconv.FormatInt(rootDir.ModTime().UnixNano(), 10) - modTime = modTime[:len(modTime)-6] + modTime = modTime[:len(*&modTime)-6] e.Type = "directory" e.Name = rootDir.Name() e.Uri = drivePrefix + p @@ -586,9 +574,9 @@ func dirHandler(w http.ResponseWriter, r *http.Request) { e.Children = fileInfo } - j, err := json.MarshalIndent(e, "", " ") + j, err := json.MarshalIndent(*&e, "", " ") if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } @@ -604,24 +592,24 @@ func dirHandler(w http.ResponseWriter, r *http.Request) { } operation := r.Header.Get("operation") if operation == "move" { - err := moveDir(source, p) + err := moveDir(*&source, *&p) if err == os.ErrNotExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusNotFound) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } } else if operation == "copy" { - err := copyDir(source, p) + err := copyDir(*&source, *&p) if err == os.ErrNotExist { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusNotFound) return } else if err != nil { - log.Println(err) + log.Println(*&err) w.WriteHeader(http.StatusInternalServerError) return } @@ -650,9 +638,9 @@ func getStatusHandler(w http.ResponseWriter, r *http.Request) { "server-root": drivePrefix + projectsDir, "status": "running", } - j, err := json.MarshalIndent(cloudStatus, "", " ") + j, err := json.MarshalIndent(*&cloudStatus, "", " ") if err != nil { - log.Println(err) + log.Println(*&err) } w.Write(j) } @@ -676,16 +664,16 @@ func main() { root := filepath.Clean((rootFlag + "/" + projectsDir)) - err := createDir(root) + err := createDir(*&root) if err != nil { - log.Println(err) + log.Println(*&err) return } - err = os.Chdir(root) + err = os.Chdir(*&root) currentDir, err := os.Getwd() if err != nil { - log.Println(err) + log.Println(*&err) return } @@ -700,7 +688,7 @@ func main() { err = http.ListenAndServe(interfaceFlag+":"+portFlag, nil) if err != nil { - log.Println(err) + log.Println(*&err) return } } -- cgit v1.2.3